• Join
  • Sign In with my.TI Login
Texas Instruments
  • Products
  • Applications
  • Tools & Software
  • Support & Community
  • Sample & Buy
  • About TI
Sample & Purchase Cart Sample & Purchase Cart
  • Search
  • Advanced
TI E2E™ Community
  • Support Forums
  • Blogs
  • Groups
  • Videos
  • 简体中文
  • More ...
TI Home » TI E2E Community » Support Forums » Digital Signal Processors (DSP) » C6000 Multicore DSP » Keystone Multicore Forum (C66, 66A, AM5) » HUA demo + ethernet boot on the EVM 6678?
Share
C6000 Multicore DSP
  • Forums
  • Announcements
Options
  • Subscribe via RSS
Training Available
TI provides self-paced online training that introduces the primary components of the KeyStone II family of SoC devices.

  • KeyStone II SoC Overview >
  • KeyStone II Software Overview >
  • KeyStone II ARM Cortex-A15 Corepac Overview >
  • More Information >
  • Check out
    Multicore Mix blog
    • $core_v2_blog.Current.Name

      OpenMP - All aboard!

      Posted 1 day ago
      by Debbie Greenstreet
      With so many end products today relying on multicore DSPs for...
    • $core_v2_blog.Current.Name

      A look back: Two years of Multicore Mix

      Posted 2 days ago
      by Lauren Reed1
      A big thank you to everyone who participated in our contest last...
    • $core_v2_blog.Current.Name

      It’s our second anniversary, but you get the present!

      Posted 9 days ago
      by Lindsey Bare
      It’s hard to believe it’s already been two years...

    Forums

    HUA demo + ethernet boot on the EVM 6678?

    This question is answered
    Alejandro Gimeno
    Posted by Alejandro Gimeno
    on Apr 24 2012 01:18 AM
    Intellectual305 points

    Hi all,

    I am developing for the TMDXEVM6678L. My goal is to make a program that boots from ethernet and uses sockets to read a .out and then execute it in another core.
    By now, I have succesfully tested the HUA demo and the ethernet boot example (separately).
    So, now I am trying to mix them. That is, booting the HUA demo (C:\Program Files\Texas Instruments\mcsdk_2_00_07_19\demos\hua\evmc6678l\Release\hua_evmc6678l.out) from Ethernet.

    What I ahve done is taking the ethernet boot sample and change it to use hua_evmc6678l.out instead of simple.out

    My file simple.rmd contains this:

    hua_evmc6678l.out
    -a
    -boot
    -e _c_int00
    -order L

    ROMS
    {
       ROM1:  org = 0x0400, length = 0x0080, memwidth = 32, romwidth = 32
              files = { simple.btbl }
    }

    which is the same as simple.rmd (from C:\Program Files\Texas Instruments\mcsdk_2_00_07_19\tools\boot_loader\examples\ethernet\simple).

    However, when I run hex6x simple.rmd I get some warnings of the type "warning: boot table falls in unconfigured memory at 0480h"
    and the command bconvert64x -le simple.btbl simple.le.btbl fails.

    I suppose that the problem is that, hua_evmc6678l.out size is 5.54 MB and I am specifying org = 0x0400, length = 0x0080 for ROM1. So, it does not fit.
    Therefore, I have changed these parameters so that the program can fit. For example:

    org = 0x0400, length = 0x1000080

    This way, I get no warnings and I can run without problems

    bconvert64x -le simple.btbl simple.le.btbl
    bootpacket simple.le.btbl simple.eth

    to get a simple.eth file (3.12 MB) which I then send to the board via ethernet (like I did with the original simple.eth).
    However, this does not work. When I try to connect the browser to the board (like I did to test the basic HUA demo) I get no response from the board.

    So I have some doubts:
    -can I put the length that I need in the rmd file? I think that using 0x1000080 as I did, I may be overwriting memory that I shouldn't :(
    -are there any restrictions on the program that can be booted via Ethernet? (maximum size, libraries that can or cannot be used...)
    -for a program that uses NDK like the HUA demo, which entry point should I specify? (_c_int00, main...)
    -which is the relationship between the memory map on the cmd file and the one on the rmd file? are both referred to the same memory map? can/cannot they overlap? should the be on a specific memory block?

    In addition to this, I have seen in the documentation (spruh58, p.16), that the org address for the ROM1 section of the example corresponds to Local L2 RAM.
    Do I have to put there the bootable program, or can I use any section? (like DDR3, for example, since it is much bigger).

    Some advice would be great!

    Alejandro

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    All Replies
    • ArunMani
      Posted by ArunMani
      on Apr 24 2012 18:01 PM
      Genius9510 points

      Hi Alejandro,

      The size seems to be really big. But I don't think that should matter. You can try reducing the size to check that for sure. Also after you connect, do you know where the program counter is? Also can you check if the boot magic address(0x87fffc) is populated correctly.

      Thanks,

      Arun.

      If you need more help, please reply back. If this answers the question, please click  Verify Answer  , below.

      Report Abuse
      • Reply
      You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    • Alejandro Gimeno
      Posted by Alejandro Gimeno
      on Apr 25 2012 06:03 AM
      Intellectual305 points

      Hi Arun,

      thanks for replying. I have seen through CCS the content of address 0x87FFFc. The value is 0x80108D20, which according to my .map, corresponds to _c_int00. So, I think this is correct.
      However, when I connect from CCS, I see that the PC register is at different locations like 0xD94E2EFC or 0xA71ED27C which do not map to any known memory position (according to my memory map)

      By the way, when I run hex6x.exe simple.rmd I get the following output:

      Translating to ASCII-Hex format...
         "hua_evmc6678l.out"   ==> .cinit     (BOOT LOAD)
         "hua_evmc6678l.out"   ==> .text.1    (BOOT LOAD)
         "hua_evmc6678l.out"   ==> .text.2    (BOOT LOAD)
         "hua_evmc6678l.out"   ==> .const.1   (BOOT LOAD)
         "hua_evmc6678l.out"   ==> .const.2   (BOOT LOAD)
         "hua_evmc6678l.out"   ==> .switch.1  (BOOT LOAD)
         "hua_evmc6678l.out"   ==> .switch.2  (BOOT LOAD)
         "hua_evmc6678l.out"   ==> .vecs      (BOOT LOAD)

      and, since the output file (.btbl) is much smaller than the .out, and there are sections in the .out that do not show in the hex6x output (.nimu_eth_ll2, .far.1...), I wonder if hex6x could be missing some sections.

      On the other hand, I have tried to reduce the size of the .out file as you suggested. Basically, I have written this program:


                      #include <string.h>
                      #include <stdlib.h>
                      #include <ti/sysbios/BIOS.h>
                      #include <platform.h>

                      int main() { BIOS_start(); }

                      void EVM_init()
                      {
                          platform_init_flags sFlags;
                          platform_init_config sConfig;
                          memset( (void *) &sFlags,  0, sizeof(platform_init_flags));
                          memset( (void *) &sConfig, 0, sizeof(platform_init_config));
                          sFlags.tcsl = 1;
                          sFlags.phy  = 1;
                          if (platform_init(&sFlags, &sConfig) != Platform_EOK) {
                              while (1) {
                                  (void) platform_led(1, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);
                                  (void) platform_delay(50000);
                                  (void) platform_led(1, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
                                  (void) platform_delay(50000);     
                              }
                          }
                      }

                      int hpdspuaStart()
                      {
                          int i, k;
                          for (;;)
                          {
                              for (k = 0; k < 4; k ++)
                              {
                                  for (i = 0; i < 4; i ++)
                                  {
                                      platform_led(i, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
                                      (void) platform_delay(50000);
                                  }

                                  platform_led(k, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);
                                  (void) platform_delay(50000);
                              }
                          }

                          return(0);
                      }

                      uint8_t *Osal_platformMalloc (uint32_t num_bytes, uint32_t alignment) {    return malloc(num_bytes); }
                      void Osal_platformFree (uint8_t *dataPtr, uint32_t num_bytes) {  if (dataPtr) free(dataPtr); }
                      void Osal_platformSpiCsEnter(void){ return; }
                      void Osal_platformSpiCsExit (void){ return; }

      For linking I use the same flags/libraries as in the original HUA demo. This way the size reduces to 3.47 MB.
      When I run this program through CCS, it works (the LEDs flash). However, when I try to send it via Ethernet for booting, it does not work: the LEDs do nothing and the state of PC register and boot magic address are similar to the previous case.

      Any suggestions?

      Report Abuse
      • Reply
      You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    • Alejandro Gimeno
      Posted by Alejandro Gimeno
      on Apr 27 2012 05:48 AM
      Intellectual305 points


      I have made some progress on this topic.

      I have built the Example 2 from the BIOS_MCSDK_2.0 User Guide which consists of a BIOS program that plays with the LEDs (but with no NDK involved). The .out size is around 3 MB. The only thing I did not have was the rmd file used to convert the .out in a .eth that can be booted via ethernet.
      I tried with this rmd file:

      led_play.out
      -a
      -boot
      -order L

      ROMS
      {
         ROM1:  org = 0x90000000, length = 0x100000, memwidth = 32, romwidth = 32
                files = { led_play.btbl }
      }

      which should use DDR3 and it works!

      Then, I have been adding NDK support to the cfg file and what I have found out is the following:
      When I put everything on MSMCSRAM, it works fine.
      When I put a section on DDR3, it does not work.

      For example, if I change
        Program.sectMap[".const"] = "MSMCSRAM";
      to
        Program.sectMap[".const"] = "DDR3";

      the program does not work. So, is it possible that I am not able to start the HUA demo from Ethernet because it has lots of sections on DDR?
      I have read about a problem with revision 1.0 of the board (SPRZ334D.pdf, advisory 8) relating the PLL, and it says that there could be problems with DDR. Do you think this could be my problem?

      Report Abuse
      • Reply
      You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    • ArunMani
      Posted by ArunMani
      on Apr 30 2012 18:38 PM
      Verified Answer
      Verified by Alejandro Gimeno
      Genius9510 points

      Hi Alejandro,

      There are too many unknows. Is it possible for you try a NDK hello world example without MAD and try the Ethernet boot?

      Thanks,

      Arun.

      If you need more help, please reply back. If this answers the question, please click  Verify Answer  , below.

      Report Abuse
      • Reply
      You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    • Alejandro Gimeno
      Posted by Alejandro Gimeno
      on May 14 2012 00:56 AM
      Intellectual305 points

      Hi Arun,

      first of all, sorry for the delay, but I have had some technical issues trying to post.

      Thanks for the suggestion. I have tried the NDK hello world example with Ethernet boot and it did not worked.
      Then I have changed the .cfg file, by replacing all instances of DDR3 with MSMCSRAM so that nothing went to DDR3 and now it works!

      So, it seems that I have problems booting from ethernet when the program has someting placed in DDR3.
      I think I will try to continue with the rest of my program, since it should fit in non-DDR3 memory, and when I can get a rev 2.0 board I will try again
      just in case the problem is related to the PLL bug.

      On the other hand, when I run it from CCS, I always run the GEL script, that seems to initialize some DDR stuff.
      I wonder if it is possible that I have to make some similar initialization when booting from Ethernet...

      Best regards Arun!

      Report Abuse
      • Reply
      You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    TI E2E™ Community
    • Support Forums
    • Blogs
    • Videos
    • Groups
    • Site Support & Feedback
    • Settings
    TI E2E™ Community Groups
    • TI University Program
    • Make the Switch
    • Microcontroller Projects
    • Motor Drive & Control
    Other Communities
    • Deyisupport
    • Designsomething.org
    • beagleboard.org
    • TI on Element 14
    • TI on TechXchangeSM
    Other Technical & Support Resources
    • WEBENCH® Design Center
    • Product Information Centers
    • Technical Documents
    • TI Design Network
    • TI Technical Articles
    • TI Training

    All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.

    Content on this site may contain or be subject to specific guidelines or limitations on use. All postings and use of the content on this site are subject to the Terms of Use of the site; third parties using this content agree to abide by any limitations or guidelines and to comply with the Terms of Use of this site. TI, its suppliers and providers of content reserve the right to make corrections, deletions, modifications, enhancements, improvements and other changes to the content and materials, its products, programs and services at any time or to move or discontinue any content, products, programs, or services without notice.

    Follow Us Texas Instruments on Facebook Texas Instruments on Twitter Texas Instruments on LinkedIn Texas Instruments on Google+
    TI Worldwide | Contact Us | my.TI Login | Site Map | Corporate Citizenship | mobile m.ti.com (Mobile Version)

    TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs and
    embedded processors, along with software, tools and the industry’s largest sales/support staff.

    © Copyright 1995-2013 Texas Instruments Incorporated. All rights reserved.
    Trademarks | Privacy Policy | Terms of Use