TMS320VC5502 程序大于内部RAM 想用外部SDRAM 运行程序

TMS320VC5502在开发中遇到程序代码太大,需要将将程序扩展到外部的SDRAM 中,请问如何做,是否可以使用二次BootLoader来实现,有没有参考程序,谢谢

7 个回复

  • 状元 215827 points
    vc5502的ROM bootloader可以把程序搬移到外部SDRAM中,不需要二次bootloader。

    您在应用程序中用#pragma DATA_SECTION ( symbol , " section name " );和#pragma CODE_SECTION (symbol , " section name " )伪指令可以把数据段或者代码段分配到外部SDRAM。具体请看下面的编译器手册。
    www.ti.com/.../spru281g.pdf

    下面是个例子供参考。


    #pragma DATA_SECTION(bufferB, ”my_sect”)
    char bufferB[512];

    在CMD文件中
    MEMORY
    {
    PAGE 0:
    DARAM2 : origin = 0008000h, length = 0028000h
    }


    SECTIONS
    {
    my_sect: {}> DARAM2 PAGE 0
    }

    若该回复解决了您的问题,请点击“确认此为答案”,谢谢。

  • 回复 Shine:

    您好!我这边的工程是将程序从外部flash搬到内部ram,现在功能增多代码增多,内部不足需要,将一部分程序搬到sdram,如您所说是否直接使用指令便可直接搬运程序,而不需要二次引导?谢谢
  • 状元 215827 points

    回复 user5820506:

    “我这边的工程是将程序从外部flash搬到内部ram”您这是自己写二次bootloader程序?

    vc5502片上ROM bootloader会自动把代码从外部flash搬移到片上或者片外SDRAM? 您现在是有什么特殊要求要自己写二次bootloader程序实现代码搬移。

    关于c5502 bootloader的流程请参考下面的文档。
    www.ti.com/.../spra911c.pdf

    若该回复解决了您的问题,请点击“确认此为答案”,谢谢。

  • 回复 Shine:

    对不起,是我没说清楚,代码存放在外部Flash,代码量小的时候是使用vc5502片上ROM bootloader实现从flash搬到内部ram;现在的需求是代码量远大于内部ram,需要将代码部分或全部移动到外部sdram来扩展。是否需要使用二次bootloader来实现从FLASH将代码搬到外部SDRAM?
    还是如您所说使用指令便可实现从外部Flash搬到外部SDRAM就可以?
    谢谢!
  • 状元 215827 points

    回复 user5820506:

    我上面说的指令是在您的应用程序中如何把代码放到外部SDRAM上运行,和是否使用bootloader代码搬移没有关系。

    ROM bootloader本身是支持把代码从flash搬移到片外SDRAM的。建议先仔细阅读上面的bootloader文档。

    若该回复解决了您的问题,请点击“确认此为答案”,谢谢。

  • 回复 Shine:

    您好!就是我在之前有看过这份文档,也按照上面所说设置我的应用程序可以在使用编程器在线调试是可以运行的,程序也是按照我的cmd文件配置实现程序运行在外部SDRAM中,当我使用HEX55生成bin文件写入flash,在上电程序没有正确执行,在查找多方资料后,所以考虑是否需要编写二次bootloader来实现该目的,如下是我的cmd文件配置,不知道是哪里没有正确配置,请告知!
    谢谢!
    这个配置在使用编程器在线调试的时候程序是可以运行,没有问题的。

    MEMORY
    {
    MMR: o = 0x000000 l = 0x0000c0
    SPRAM: o = 0x0000c0 l = 0x000040
    VECS: o = 0x000100 l = 0x000100
    DARAM0: o = 0x000200 l = 0x007E00
    DARAM1: o = 0x008000 l = 0x004000

    CE0: o = 0x010000 l = 0x3F0000
    CE1: o = 0x400000 l = 0x400000
    CE2: o = 0x800000 l = 0x030000
    CE: o = 0x830000 l = 0x030000 /*存放代码的外部sdram*/
    CE3: o = 0xC00000 l = 0x3F8000
    ROM: o = 0xFF8000 l = 0x007F00
    RESET_VECS: o = 0xFFFF00 l = 0x000100
    }

    SECTIONS
    {
    .vectors > VECS
    .cinit > CE
    .text > CE
    .stack > DARAM0
    .sysstack > DARAM0
    .sysmem > DARAM0
    .cio > CE
    .data > CE
    .bss > CE
    .const > CE
    .csldata > DARAM0
    }

    由hex55生成bin配置
    -boot
    -v5510:2
    -b
    -serial8
    -delay 0x100
    -delay 0x100
    -o text.bin
    text.out
  • 状元 215827 points

    回复 user5820506:

    hex cmd文件要改一下。在hex cmd文件生成boot表时,用−reg_config来配置一下SDRAM的寄存器,这样在搬移程序前,会先初始化SDRAM。

    −reg_config的用法在bootloader文档上有说明。

    −reg_config reg_addr, reg_val

    若该回复解决了您的问题,请点击“确认此为答案”,谢谢。