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.

tms320C5416 flash 烧写问题



各位专家老师,我最近在实用5416dsk,发现在调试模式下可以在cmd文件里把一些段开到8000h以后的空间里,但是如果烧到flash里面,只有把所有段都开在0到8000h这一空间中才能实现项目的正常功能,如果占用了8000h之后的空间,发现工程不能正常执行,我想问一下烧到flash里的程序怎样使用8000h之外的空间。恳请各位老师予以指导

  • 因为emif boot模式是从0x8000开始的数据空间开始boot程序的,所以只有等代码加载完成后,将DROM=1才能作为片上DARAM4-7用。

    你可以把段分配到其他的片上RAM,如page1, 2,3都有saram, daram可以使用。

  • 您好,非常感谢您的回答,我想再问您一下,page1说的是010000到01ffff这段空间吗,这段空间手册上说的是On-Chip DARAM0–3 (OVLY=1) External (OVLY=0),On-Chip DARAM4–7 (MP/MC=0) External (MP/MC=1),是不是说这个空间在使用时也需要改变寄存器的值,如果需要改变该如何设置,还是说可以直接使用,效果和page0是一样的?还有就是问您下烧写到flash里的hex文件大小是不是有要求,大于某一值的话是不是需要加一个二次boot?恳请您予以指导。



  • 是的,这段空间用做DARAM4-7, 需要MP/MC=0,直接用就可以了,因为boot mode本身要求MP/MC=0.

    因为受Data space的限制,emif boot mode最大只能加载32KW(0x8000~0xFFFF)的程序,再大就需要用二次bootloader了。

  • 谢谢您的回答,我今天试了一下把bss段开到0x18000到0x1ffff这段空间,发现调试模式下一切正常,但是烧写后程序还是不能正常执行。如果所有段都开到0x8000之前的空间,程序执行正常。您觉得是哪里出了问题?

    如果需要二次bootloader有没有参考文献?

    -stack 1000
    MEMORY {
    PAGE 0:

    PROG_RAM (RWX) : origin = 0x0080, length = 0x7F00

    PAGE 1:

    DAT_RAM(RWX) : origin = 0x18000, length = 0x8000
    }


    SECTIONS {
    .text > PROG_RAM PAGE 0
    .switch > PROG_RAM PAGE 0
    .cinit > PROG_RAM PAGE 0

    .vectors > VECTORS PAGE 0

    .cio > PROG_RAM PAGE 0
    .data > PROG_RAM PAGE 0
    .bss > DAT_RAM PAGE 1
    .const > PROG_RAM PAGE 0
    .sysmem > PROG_RAM PAGE 0
    .stack > PROG_RAM PAGE 0
    .csldata > PROG_RAM PAGE 0
    dmaMem : align(1024) { } > DAT_RAM PAGE 1
    }


    这是我的cmd文件,希望老师能够给予指导,麻烦您了!

  • 用仿真器跟一下boot过程,看是代码没有加载进来还是加载了但没有正确执行。