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.

TMS320C6672: Converting the DSP out file into bootable image with hex6x

Part Number: TMS320C6672

Hi,

I've been working on a custom board featuring C6672 DSP. I'm able to properly build projects and load applications to the processor through an XDS560v2 emulator.

Now, I want to store the application in the on-board Spansion NOR flash (which resides in 0x70000000:0x73FFFFFF) and boot the processor with that application on startup. To that end, I've learnt that I need to pass the output file through a series of TI tools (namely hex6x, b2ccs, ccs2bin). However, I don't know how to fill the ROMS section of the RMD file required by hex6x.

Here, I've attached my linker command file (that is dynamically generated by SYS/BIOS configuration file and the platform package) 

3808.linker.cmd.txt
/*
 * Do not modify this file; it is automatically generated from the template
 * linkcmd.xdt in the ti.targets.elf package and will be overwritten.
 */

/*
 * put '"'s around paths because, without this, the linker
 * considers '-' as minus operator, not a file name character.
 */


-l"C:\Users\okancalis\workspace_app\appv2\Release\configPkg\package\cfg\app_pe66.oe66"
-l"C:\ti\edma3_lld_2_12_05_30C\packages\ti\sdo\edma3\drv\sample\lib\c6678-evm\66\release\edma3_lld_drv_sample.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\hal\timer_bios\lib\hal_timer_bios.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\os\lib\os.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\hal\userled_stub\lib\hal_userled_stub.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\hal\eth_stub\lib\hal_eth_stub.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\tools\cgi\lib\cgi.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\tools\hdlc\lib\hdlc.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\tools\console\lib\console_min.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\netctrl\lib\netctrl_min.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\nettools\lib\nettool.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\hal\ser_stub\lib\hal_ser_stub.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\tools\servers\lib\servers_min.ae66"
-l"C:\ti\ndk_2_26_00_08\packages\ti\ndk\stack\lib\stk6.ae66"
-l"C:\Users\okancalis\workspace_app\appv2\src\sysbios\sysbios.ae66"
-l"C:\ti\pdk_AD-0000-0486_1_4_0_0\packages\ti\platform\evmc6678l\platform_lib\lib\release\ti.platform.evm6678l.ae66"
-l"C:\ti\pdk_AD-0000-0486_1_4_0_0\packages\ti\csl\lib\ti.csl.ae66"
-l"C:\ti\pdk_AD-0000-0486_1_4_0_0\packages\ti\drv\pcie\lib\ti.drv.pcie.ae66"
-l"C:\ti\edma3_lld_2_12_05_30C\packages\ti\sdo\edma3\drv\lib\66\release\edma3_lld_drv.ae66"
-l"C:\ti\edma3_lld_2_12_05_30C\packages\ti\sdo\edma3\rm\lib\c6678-evm\66\release\edma3_lld_rm.ae66"
-l"C:\ti\bios_6_52_00_12\packages\ti\targets\rts6000\lib\ti.targets.rts6000.ae66"
-l"C:\ti\bios_6_52_00_12\packages\ti\targets\rts6000\lib\boot.ae66"

--retain="*(xdc.meta)"


--args 0x0
-heap  0x0
-stack 0x400

MEMORY
{
    MSMCSRAM (RWX) : org = 0xc000000, len = 0x400000
    DDR (RWX) : org = 0xa0000000, len = 0x60000000
    DDR_PCIE (W) : org = 0x80000000, len = 0x20000000
    BOOT (R) : org = 0x70000000, len = 0x100
    INTVEC (R) : org = 0x70000100, len = 0x1000
    EMIF16_CS2 (R) : org = 0x70001100, len = 0x3fe000
}

/*
 * Linker command file contributions from all loaded packages:
 */

/* Content from xdc.services.global (null): */

/* Content from xdc (null): */

/* Content from xdc.corevers (null): */

/* Content from xdc.shelf (null): */

/* Content from xdc.services.spec (null): */

/* Content from xdc.services.intern.xsr (null): */

/* Content from xdc.services.intern.gen (null): */

/* Content from xdc.services.intern.cmd (null): */

/* Content from xdc.bld (null): */

/* Content from ti.targets (null): */

/* Content from ti.targets.elf (null): */

/* Content from xdc.rov (null): */

/* Content from xdc.runtime (null): */

/* Content from ti.targets.rts6000 (null): */

/* Content from ti.sysbios.interfaces (null): */

/* Content from ti.sysbios.family (null): */

/* Content from xdc.services.getset (null): */

/* Content from ti.ndk.rov (null): */

/* Content from ti.sdo.edma3.rm (null): */

/* Content from ti.sdo.edma3.drv (null): */

/* Content from ti.drv.pcie (null): */

/* Content from ti.csl (null): */

/* Content from ti.platform.evmc6678l (null): */

/* Content from ti.sysbios.family.c62 (null): */

/* Content from xdc.runtime.knl (null): */

/* Content from ti.ndk (null): */

/* Content from ti.ndk.hal.timer_bios (null): */

/* Content from ti.ndk.os (null): */

/* Content from ti.ndk.hal.userled_stub (null): */

/* Content from ti.ndk.hal.eth_stub (null): */

/* Content from ti.ndk.tools.cgi (null): */

/* Content from ti.ndk.tools.hdlc (null): */

/* Content from ti.ndk.stack (null): */

/* Content from ti.ndk.tools.console (null): */

/* Content from ti.ndk.netctrl (null): */

/* Content from ti.ndk.nettools (null): */

/* Content from ti.ndk.hal.ser_stub (null): */

/* Content from ti.ndk.tools.servers (null): */

/* Content from ti.sysbios.family.c64p.tci6488 (null): */

/* Content from ti.catalog.c6000 (null): */

/* Content from ti.catalog (null): */

/* Content from ti.catalog.peripherals.hdvicp2 (null): */

/* Content from xdc.platform (null): */

/* Content from xdc.cfg (null): */

/* Content from ti.platforms.generic (null): */

/* Content from ComintKarettaBoard (null): */

/* Content from ti.sysbios.hal (null): */

/* Content from ti.sysbios.knl (null): */

/* Content from ti.sysbios.timers.timer64 (null): */

/* Content from ti.sysbios.family.c64p (ti/sysbios/family/c64p/linkcmd.xdt): */

/* Content from ti.sysbios.family.c66 (ti/sysbios/family/c66/linkcmd.xdt): */
ti_sysbios_family_c66_Cache_l1dSize = 32768;
ti_sysbios_family_c66_Cache_l1pSize = 32768;
ti_sysbios_family_c66_Cache_l2Size = 524288;

/* Content from ti.sysbios (null): */

/* Content from ti.sysbios.rts (ti/sysbios/rts/linkcmd.xdt): */

/* Content from ti.sysbios.rts.ti (ti/sysbios/rts/ti/linkcmd.xdt): */

/* Content from ti.ndk.config (null): */

/* Content from ti.sdo.edma3.drv.sample (null): */

/* Content from ti.sysbios.family.c66.tci66xx (null): */

/* Content from ti.sysbios.gates (null): */

/* Content from ti.sysbios.xdcruntime (null): */

/* Content from ti.sysbios.heaps (null): */

/* Content from ti.sysbios.utils (null): */

/* Content from configPkg (null): */

/* Content from xdc.services.io (null): */


/*
 * symbolic aliases for static instance objects
 */
xdc_runtime_Startup__EXECFXN__C = 1;
xdc_runtime_Startup__RESETFXN__C = 1;

SECTIONS
{
    .text: load >> DDR
    .ti.decompress: load > DDR
    .stack: load > MSMCSRAM
    GROUP: load > DDR
    {
        .bss:
        .neardata:
        .rodata:
    }
    .cinit: load > DDR
    .pinit: load >> DDR
    .init_array: load > DDR
    .const: load >> DDR
    .data: load >> DDR
    .fardata: load >> DDR
    .switch: load >> DDR
    .sysmem: load > DDR
    .far: load >> DDR
    .args: load > DDR align = 0x4, fill = 0 {_argsize = 0x0; }
    .cio: load >> DDR
    .ti.handler_table: load > DDR
    .c6xabi.exidx: load > DDR
    .c6xabi.extab: load >> DDR
    PCIE_DATA_SECTION: load > DDR_PCIE
    .vecs: load > DDR
    xdc.meta: load > DDR, type = COPY

}
and the resulting MAP file app.map.txt.

When I feed my app.out file to the hex6x tool with this RMD file

app.rmd.txt
app.out
--ascii
--image
--map=app.map
--entrypoint _c_int00
--order L
  
ROMS
{
            ROM1: org=0x70000000, len=0x200000, romwidth=32, memwidth=32
            files={app.btbl}
}  
, I get the following errors: 

Translating to ASCII-Hex format...
"app.out" ==> .const.1
warning: section app.out(.const.1) at 0a025d3f0h falls in unconfigured memory
(skipped)
"app.out" ==> .text
warning: section app.out(.text) at 0a025d400h falls in unconfigured memory
(skipped)
"app.out" ==> .const.2
warning: section app.out(.const.2) at 0a02ab0c0h falls in unconfigured memory
(skipped)
"app.out" ==> .switch
warning: section app.out(.switch) at 0a02b4b0ch falls in unconfigured memory
(skipped)
"app.out" ==> .vecs
warning: section app.out(.vecs) at 0a02b5000h falls in unconfigured memory
(skipped)
"app.out" ==> .cinit
warning: section app.out(.cinit) at 0a02b5320h falls in unconfigured memory
(skipped)

Is this happening because of some inconsistency between my linker script and RMD file? If so, how can I resolve it?

Thanks in advance.

  • The error indicated by hex6x seems to be caused due to sections of your code that don`t lie in the ROM1 region. The syntax and usage of hex6x is provided in the TI compiler documentation:

    http://www.ti.com/lit/ug/sprui03b/sprui03b.pdf

    Details for booting from EMIF NOR can be found by referring to E2E post referenced here:

    http://processors.wiki.ti.com/index.php/KeystoneI_Bootloader_Resources_and_FAQ#EMIF16.2FParallel_NOR_boot

    Regards,

    Rahul

  • Hi, Rahul,

    Thanks for your response. I already read the relevant chapter in the assembly tools guide and I also saw the two forum threads about the matter, which are rather helpful by the way.

    Perhaps, I should elaborate on my issue. I don't understand which memory should be provided in the ROMS section. Say, I want to boot from the NOR flash, which is connected via the EMIF16 interface (0x70000000), I should enter that address in the ROMS section, shouldn't I? In that case, my linker script will be full of DDR memory references (0x80000000 and higher), which will cause hex6x to complain again, right?

  • I believe that since this is an execute in place boot mode, you need to have the .text section and all initialization sections into EMIF16_CS2 area.  The data sections and stack and heap sections can be in in onchip memory. You cannot put section in DDR since external memory has not yet been initialized. 

    In this case if the hex6x complains about sections in SHRAM/MSMC , you can ignore it as stack, uninitialized data or heap don`t need to be initialized. DDR memory is connect to EMIF so the EMIF timing settings and HW initialization needs to be done using user code as this can`t be done by ROM in case of EMIF NOR/XIP boot.

    Regards,

    Rahul