This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DSP 6670 SRIO Boot loader example

Hi,

I am trying to understand the boot loader on c6670 DSP in SRIO boot mode. I started with the examples in  \ti\mcsdk_2_01_02_06\tools\boot_loader\examples\srio. I can compile the project and when I run the project I don't see any output on the serial console. I have the same issue as described in the below thread.

https://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/197165.

I tried the fixes from the thread which helped on getting Port OK. This is what I see on the Host EVM CCS console.

Test Setup:


1. Connected two 6670LE EVMs using TI Dual Breakout card.

2. Two EVMs are in SRIO boot mode.

3. Followed the procedure in Readme document located at  \ti\mcsdk_2_01_02_06\tools\boot_loader\examples\srio\docs.

4. Jumpers on the EVM are set to output to the Teraterm. Tested the UART interface with POST.

is there anything else I need to do to get the bootloader working ?


Thanks

Hari

  • Hi Hari,
    Can you give it try with pre-built binaries from MCSDK 2.x ?

    The thread you were referred has enough information to boot from SRIO.

    Thank you.
  • Hi,

    Yes I tried the srioboot_example_evm6670l.out pre-built binary. But I still have the same issue. I cannot see the bootEVM output on Teraterm/HyperTerminal. I am using code composer studio Version: 6.1.0.00104 . Few things I noticed are

    1. I can see the boot image in the Boot EVM memory. The magic address for core0 (0x108F FFFC) has 0x8000D060 (Boot Entry address). I think this is as expected from the boot process. But the magic address (0x1n8f FFFC) of cores 1. 2 and 3 have 0x00000000. This does not look right to me.

    2. DDR init code array (srioDdrInit.h) and srioBootCode array (srioBootCode.h) has same entries initially after the start address entry. Is there any reason for this ?

    3. I did not clearly understand the boot entry address field. First 4 bytes in srioDdrInit.h and srioBootCode.h. What is this address ? Is this the starting address of program ?

    4. Did you guys try SRIO boot mode with CCS6 and Dual EVM break out card ?

    Thanks

    Hari
  • Hi,

    1. I can see the boot image in the Boot EVM memory. The magic address for core0 (0x108F FFFC) has 0x8000D060 (Boot Entry address). I think this is as expected from the boot process. But the magic address (0x1n8f FFFC) of cores 1. 2 and 3 have 0x00000000. This does not look right to me.

    During the boot process, the RBL executes an IDLE command on the secondary CorePacs and keeps the secondary CorePacs waiting for an interrupt. After the application code to be loaded in these secondary CorePacs are loaded and the BOOT_MAGIC_ADDRESS values in individual CorePacs are populated, the application code in the CorePac0 can trigger the IPC interrupt to wake up the secondary cores and branch up to the address specified in the BOOT_MAGIC_ADDRESS.

    2. DDR init code array (srioDdrInit.h) and srioBootCode array (srioBootCode.h) has same entries initially after the start address entry. Is there any reason for this ?

    No. DDR init code run on L2 memory of Core 0 and SRIO Boot code run on DDR memory.

    3. I did not clearly understand the boot entry address field. First 4 bytes in srioDdrInit.h and srioBootCode.h. What is this address ? Is this the starting address of program ?

    First 4 bytes on boot code file is start address(Boot Entry address) of program. DDR init code run on L2 memory of Core 0(0x1080CF00) and SRIO Boot code run on DDR memory( 0x8000D060).

    4. Did you guys try SRIO boot mode with CCS6 and Dual EVM break out card ?

    I will try to test the same boot example on my setup and get back to you.

    Thanks,
  • Hi Hari,
    As Ganapathi mentioned, We are working to re-produce the issue under CCSv6 and get back to you.

    Thank you for your patience.
  • Thank you Raja and Ganapathi.

    Where can I buy CI2EVMBOC (Dual EVM Break out card) ? I cannot find it in the TI Store. Or where can I buy the Breakout cards to connect two EVMs as described in the Readme document for SRIO boot loader example.

    Thanks
    Hari
  • Hi Hari,

    This can be ordered through the distributors such as Avnet and please get in touch with your distributor to place the order.



    Thank you.

  • Hi,

    The SRIO boot example is working on my setup(C6678). I have followed the below steps to test the example on my setup:

    1. Set the both EVM boot mode dip switch setting as ROM SRIO boot mode. 
     
    2. Insert the Two EVM’s to the AMC slot of the breakout card(CI2EVMBOC).
    3. Connect the booting EVM COM1 to the PC’s serial port using a RS-232 cable and connect the JTAG emulator on the Host EVM. 
    4. Power on both EVM’s
    5. Open Tera Terminal connection, set the baud rate to 115200 bps, data 8-bit, parity none, stop 1-bit, and flow control none.
    6. Connect the Host EVM using CCS, then load and run the srioboot_example_evm66xxl.out 
     
    see below screen shot for CCS console and Tera Term log:

     
    Thanks,
  • Hari,
    On step6, Make sure to not initialize the core0 with gel file. Remove gel from target configuration file.

    Thank you.
  • Hi,

    GEL file initialize the corepac on No-Boot mode only. So no issue for connect the target with GEL file, It is not initialize the corepac on SRIO Boot mode. 

        // Check if target is not in real-time mode. If it is in stop mode,
        // initialize everything. In real-time mode, do nothing to connect
        // unobtrusively...
        if (!GEL_IsInRealtimeMode())
        {
            // Validates if emulation boot mode
            if (DEVSTAT & 0x0000000E)
            {
                GEL_TextOut("No initialization performed since bootmode = %x \n",,,,,(DEVSTAT >> 1 ) & 0xF);
                GEL_TextOut("You can manually initialize with GlobalDefaultSetup\n");
            }
            else
            {
                // Comment the following line at production application test
                // when the application need to initialize everything, but not the
                // GEL file.
                Global_Default_Setup_Silent();
            }
        } else {
            GEL_TextOut("No initialization performed in real time mode\n");
        }

    Thanks,

  • Ganapathi,

    Thank you for your information. I forgot about it.
  • Hi Ganapathi,

    Thank you for testing the example on your 6678 setup. I followed the same procedure on 6670 EVMs. But I still don't see the output on tera term. I even tried putting Blink LED to see if that works. That did not work either.

    1. Do you know if it works on 6670 setup ?

    2. Can you provide me the jumper settings on the Dual EVM BOC ?

    3. When two EVMs are connected to Dual EVM BOC, did you change the serial numbers of EVMs when connected to CCS. The reason I am asking this is both the EVMs have same serial numbers, I have trouble connecting to the CCS?

    4. Can you please provide me snapshot of the setup and the source files for Boot example project ?

    Thanks
    Hari
  • Hi,

    1. Do you know if it works on 6670 setup ?

    Yes. The SRIO boot example is works on C6670 setup.

    2. Can you provide me the jumper settings on the Dual EVM BOC ?  

    I am using Rev. A BOC card for my setup. If you using same version of BOC for your setup. See below BOC snapshot to correct the jumper settings

    3. When two EVMs are connected to Dual EVM BOC, did you change the serial numbers of EVMs when connected to CCS. The reason I am asking this is both the EVMs have same serial numbers, I have trouble connecting to the CCS?  

    No need to change the serial numbers of EVMs. Connect HOST EVM JTAG to PC for connecting to the CCS.

    4. Can you please provide me snapshot of the setup and the source files for Boot example project ?  

    The SRIO boot example is working on C6670 setup. I have followed the below steps to test the example on my setup:

    1. Set the both EVM boot mode dip switch setting as ROM SRIO boot mode. 
     
    2. Insert the Two EVM’s to the AMC slot of the breakout card(CI2EVMBOC).
    3. Connect the booting EVM COM1 to the PC’s serial port using a RS-232 cable and connect the JTAG emulator on the Host EVM. 
    4. Power on both EVM’s
    5. Open Tera Terminal connection, set the baud rate to 115200 bps, data 8-bit, parity none, stop 1-bit, and flow control none.
    6. Connect the Host EVM using CCS, then load and run the srioboot_example_evm66xxl.out 
     
    see below screen shot for CCS console and Tera Term log:
    Please find the attached binary for C6670 test setup. Copy the binary to the following MCSDK path: "C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\srio\srioboot_example\src"
    Note: Make sure the COM_SEL1 jumper settings to 3-pin serial COM port on Boot EVM.
    Thanks,
  • Hi Ganapathi,

    Thank you. The bootloader worked as expected now with the source code you have sent me. The srioBootCode.h and srioDdrInit.h have different addresses when compared to your files.  Source files  path C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\srio\srioboot_example\src . I have the same MCSDK version as you. But I don't know why the Boot entry addresses and the data size in the header files are different.

    Here is the data I have in my header files. Do you know the reason why it is different ?

    srioBootCode.h

    uint8_t bootCode[] = {

    0x80, 0x00, 0xD0, 0x60, 0x00, 0x00, 0xD8, 0x80, 0x80, 0x00, 0x00, 0x00, 0x02, 0x04, 0x03, 0xE2, 0x92, 0x46, 0x0C, 0x6E, 0x00, 0x8C, 0xA3, 0x62,

    srioDdrInit.h

    uint8_t ddrInitCode[] = {
    0x10, 0x80, 0xCF, 0x00, 0x00, 0x00, 0xD6, 0x60, 0x10, 0x80, 0x00, 0x00, 0x02, 0x04, 0x03, 0xE2, 0x92, 0x46, 0x0C, 0x6E, 0x00, 0x8C, 0xA3, 0x62,

    Thanks

    Hari

  • Hi Hari,
    Thanks for the update. We will compare and get back to you. Thank you.
  • Thank you Raja. I am working on developing custom boot image referring to this example project. It would be a great help if you can get back to me soon. And one more thing I noticed is that the scripts srioboot_ddrinit_elf2HBin (C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\srio\srioboot_ddrinit\evmc6670l\bin) and helloworld_elf2HBin have C6000_CG_DIR="C:\Program Files\Texas Instruments\C6000 Code Generation Tools 7.4.0" in them. Is it the right path ? or it need to be updated ?

    If I have my own application code .out file, can I use these scripts to convert to header file (BootImage ) or are there any latest scripts ?

    Thanks
    Hari
  • Hi,

    I think you are using C6678 device srioBootCode.h and srioDdrInit.h files for your testing. Bydefault the MCSDK package have C6678 files only.

    C6678.zipC6670.zip

    I have attached the both device C6678 & C6670 srioBootCode.h and srioDdrInit.h files for your reference.

    Please take a look at Readme.pdf document and generate the srioBootCode.h and srioDdrInit.h files for C6670 device.

    MCSDK Path: C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\srio\docs\Readme.pdf

    Thanks,

  • Hi Ganapathi,

    Yes I have the C6678 srioBootCode.h and srioDdrInit.h files.

    1. But as per the Readme document if I run the srioboot_ddrinit_elf2HBin.bat and helloworld_elf2HBin.bat and other scripts from C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\srio\srioboot_helloworld\evmc6670l\bin and C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\srio\srioboot_ddrinit\evmc6670l\bin i should have the right values in 6670 srioBootCode.h and srioDdrInit.h files right ?

    2. The scripts mentioned above, do they have the right paths in them ? I noticed set C6000_CG_DIR="C:\Program Files\Texas Instruments\C6000 Code Generation Tools 7.4.0" in the srioboot_ddrinit_elf2HBin.bat file. But I don't have this directory path in my machine. Does I need to update this path ? or Does TI have updated scripts ?

    Thanks
    Hari
  • 1. Yes. Your understanding is correct.
    2. Yes. Manually update the required path(as per your installation) in the script like Code Generation Tool (CGT) before executing it.

    Thank you.
  • Hi,

    1. Yes, your understanding is correct.

    2. It is a default installation path for Code Generation Tools. If you not installed the Code Generation Tools on your machine, refer the below link to install the Code Generation Tools(7.4.0) on your machine at right path.
    software-dl.ti.com/.../download.htm

    Thanks,
  • Hi,

    I have c6000_7.4.7 compiler installed on my machine.

    By changing the path  to C6000_CG_DIR="C:\ti\ccsv6\tools\compiler\c6000_7.4.7" in srioboot_ddrinit_elf2HBin.bat and helloworld_elf2HBin.bat files I can see that the boot images are updated with the right values. Now I can see SRIO boot example working as expected.

    Ganapathi,

    When you say Code Generation Tools path it is the compiler directory path (c6000_7.4.7 )as mentioned above right ?

    Thanks

    Hari

  • Hi,

    Code Generation Tools 7.4.0 or higher versions are fine for compilation. So you can use the c6000_7.4.7 compiler path for your testing.

    Thanks,