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.

关于C6748程序仿真能运行,但是烧录到NAND FLASH就重新上电不运行

Other Parts Discussed in Thread: TMS320C6748, OMAP-L138

我参考官网的《TMS320C6748 DSP 开发套件 (LCDK)》原理图做了块板,NAND FLASH和DDR都是直接用官网的原理图了,用16位的nandflash,制作了NANDWriter_DSP,提示已经烧写成功了,但是拔掉仿真器重新上电后还是不能正常工作,LED灯不闪烁。什么原因?

  • 补充:请问是我的CMD文件要修改什么东西吗?以下是我的CMD配置
    MEMORY
    {
    #ifdef DSP_CORE
    /****************************************************************************/
    /* */
    /* DSP 专有内存区域 */
    /* */
    /****************************************************************************/
    DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
    DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */
    DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
    DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
    #endif

    /****************************************************************************/
    /* */
    /* 公共内存区域 */
    /* */
    /****************************************************************************/
    SHDSPL2ROM o = 0x11700000 l = 0x00100000 /* 1MB L2 共享内置 ROM */
    SHDSPL2RAM o = 0x11800000 l = 0x00040000 /* 256KB L2 共享内置 RAM */
    SHDSPL1PRAM o = 0x11E00000 l = 0x00008000 /* 32KB L1 共享内置程序 RAM */
    SHDSPL1DRAM o = 0x11F00000 l = 0x00008000 /* 32KB L1 共享内置数据 RAM */

    EMIFACS0 o = 0x40000000 l = 0x20000000 /* 512MB SDRAM (CS0) */
    EMIFACS2 o = 0x60000000 l = 0x02000000 /* 32MB 异步 (CS2) */
    EMIFACS3 o = 0x62000000 l = 0x02000000 /* 32MB 异步 (CS3) */
    EMIFACS4 o = 0x64000000 l = 0x02000000 /* 32MB 异步 (CS4) */
    EMIFACS5 o = 0x66000000 l = 0x02000000 /* 32MB 异步 (CS5) */

    SHRAM o = 0x80000000 l = 0x00020000 /* 128KB 共享 RAM */
    DDR2 o = 0xC0001000 l = 0x08000000 /* 128MB DDR2 分配给 DSP */

    EntryPoint o = 0xC0000000 l = 0x00000800 /* 2 KB C 语言入口点 */
    Vector o = 0xC0000800 l = 0x00000800 /* 2 KB 中断向量表 */

    /****************************************************************************/
    /* */
    /* 外设内存区域 */
    /* */
    /****************************************************************************/
    SYSCFG0 o = 0x01C14000 l = 0x00001000 /* 4K SYSCFG0 */
    uPP o = 0x01E16000 l = 0x00001000 /* 4K uPP */
    GPIO o = 0x01E26000 l = 0x00001000 /* 4K GPIO */
    McBSP1 o = 0x01D11000 l = 0x00000800 /* 2K McBSP1 */

    #ifndef DSP_CORE
    /****************************************************************************/
    /* */
    /* ARM 专有内存区域 */
    /* */
    /****************************************************************************/
    ARMROM o = 0xFFFD0000 l = 0x00010000 /* 64kB ARM 本地 ROM (ARM ROM Bootloader) */
    ARMRAM o = 0xFFFF0000 l = 0x00002000 /* 8kB ARM 本地 RAM */
    #endif
    }

    SECTIONS
    {
    .text:_c_int00 > EntryPoint /* 可执行代码 C 程序入口点*/
    .text > DDR2 /* 可执行代码 */
    .stack > DDR2 /* 软件系统栈 */
    //.bss > DDR2 /* 未初始化全局及静态变量 */
    .cio > DDR2 /* C 输入输出缓存 */
    ".vectors" > Vector /* 中断向量表 */
    .const > DDR2 /* 常量 */
    .data > DDR2 /* 已初始化全局及静态变量 */
    .switch > DDR2 /* 跳转表 */
    .sysmem > DDR2 /* 动态内存分配区域 */
    .far > DDR2 /* 远程全局及静态变量 */
    .args > DDR2
    .ppinfo > DDR2
    .ppdata > DDR2

    /* TI-ABI 或 COFF */
    .pinit > DDR2 /* C++ 结构表 */
    .cinit > DDR2 /* 初始化表 */

    /* EABI */
    .binit > DDR2
    .init_array > DDR2
    //.neardata > DDR2
    .fardata > DDR2
    //.rodata > DDR2
    .c6xabi.exidx > DDR2
    .c6xabi.extab > DDR2
    GROUP (NEARDP_DATA) // group near data
    {
    .neardata
    .rodata
    .bss // note: removed fill = 0
    } > DDR2

    /* DDR2 */
    .buffer > DDR2

    /* 外设 */
    .Reg_SYSCFG0 > SYSCFG0
    .Reg_uPP > uPP
    .Reg_GPIO > GPIO
    .Reg_McBSP1 > McBSP1
    }
  • 参考以下链接的Question: Why does my program work in CCS but does not boot from flash看一下
    www.ti.com/.../spracm8.pdf
    先检查以下几个方面:
    1、Gel File Reliance
    2、Incorrect External Memory Configuration
    3、Incorrect Boot Mode
  • 第1点不太明白是什么意思?

    第3点启动从nandflash,硬件上BOOT0拉低,BOOT1\2\\3拉高其它都拉低

    第2点外部内存配置,是指.cfg文件里的吗?如下:

    Boot Mode=NAND Flash
    Boot Speed=115200
    Flash Width=0
    Flash Timing=8224114
    Configure Peripheral=False
    Configure PLL0=True
    Configure SDRAM=False
    Configure PLL1=True
    Configure DDR2=True
    Configure LPSC=True
    Configure Pinmux=False
    Enable CRC=False
    Specify Entrypoint=False
    Enable Sequential Read=False
    Use 4.5 Clock Divider=False
    Use DDR2 Direct Clock=False
    Use mDDR=False
    Use DuplicateMddrSetting=False
    ROM ID=3
    Device Type=1
    Input Clock Speed=24
    Clock Type=0
    PLL0 Pre Divider=1
    PLL0 Multiplier=19
    PLL0 Post Divider=1
    PLL0 Div1=1
    PLL0 Div3=4
    PLL0 Div7=10
    PLL1 Multiplier=13
    PLL1 Post Divider=1
    PLL1 Div1=1
    PLL1 Div2=2
    PLL1 Div3=3
    Entrypoint=0
    SDRAM SDBCR=0
    SDRAM SDTMR=0
    SDRAM SDRSRPDEXIT=0
    SDRAM SDRCR=0
    DDR2 PHY=c3
    DDR2 SDCR=134632
    DDR2 SDCR2=0
    DDR2 SDTIMR=264a2a09
    DDR2 SDTIMR2=4412c722
    DDR2 SDRCR=40000260
    LPSC0 Enable=0+1+2+3+4+5+9+11+12+13+15+
    LPSC0 Disable=
    LPSC0 SyncRst=
    LPSC1 Enable=0+1+3+4+5+6+7+9+10+11+12+13+14+15+16+17+18+19+20+21+24+25+26+27+28+29+30+31+
    LPSC1 Disable=
    LPSC1 SyncRst=
    Pinmux=
    App File String=
    AIS File Name=

  • 1、在线仿真的时候是通过GEL文件来配置DDR/PINMUX/PLL等,烧写程序是通过AISgen工具来配置,要确保两者配置是一致的。
    2、你应该是从nand 16启动,启动方式似乎配置的不对。

    3、就是DDR部分的配置,也是在AISgen里面配置的。

  • 我把BOOT0\1\2\3接地,BOOT4接高电平,其它低电平,都还是一样,仿真正常烧进去就不工作。一开始选择0x01110启动是因为官网的这个原理图上是16位的flash(我跟官网的一样了),而且官网原理图上标的启动有两项其中一项就是从nandflash启动写的是0x01110的,如下图

  • 我的板子有一个问题是本应该1.8V的电压,却有时候是2.7V,有时候二次上电又正常1.8V,不知道这个会不会影响
  • 读一下BOOTCFG确保与上图表格中配置一致就可以了。
    电源部分也会影响启动,需要满足手册6.3 Power Supplies部分的要求。
    电源,复位时序都检查一下。
  • 也可以参考这个链接中的步骤再试一下,看能否正常启动,需要下载staterware。
    processors.wiki.ti.com/.../C6748_StarterWare_Booting_And_Flashing 

    staterware中提供的bootloader已经做了aisgen中需要的一些配置,可以排除配置问题。

  • 你好!我又一块板子的各个电压都是正常的了,也能从仿真里读出BOOTMODE跟设置的一样是10000,但是还是不能脱离仿真器运行。有两个疑问,

    1、我怎么可以判断我的ais程序真的烧到nand flash里了呢?我只是从仿真的时候可以看到提示NAND boot preparation was successful!  还有其它方法可以验证我的ais程序在不在nandflash吗?

    2、可不可以提供一下16位nandflash的引导源程序?以下是我用到的DDR和flash

  • 1、可以从nand flash中将数据读取出来与你生成的.ais文件对比看一下。
    2、你是指哪个引导程序?是我上一条回复贴出来的吗?
    software-dl.ti.com/.../index_FDS.html
  • 您的问题解决了吗?我也遇到了C6748 nand flash的烧写问题,我们也是参照 TI 的 C6748核心板做了一套板子,nand flash、DDR都和 TI 的C6748核心板一样,我现在是nandwriter的工程都编译不通过,报的错误是Extern_Ram_Start、Extern_Ram_End、NandStart  这些函数 first reference 在util.obj这些文件里  , 编译不过就生成不了 nandwriter.out烧写程序,TI的板子是怎么烧写进去的,TI 应该有例程吧,在哪可以找到啊,您有解决的办法吗?

  • 首先你的程序要能编译

  • 编译总是报错,报的错误都是这几个函数没有定义啥的,我把头文件、源文件都添加了啊,错误如下:

    您知道怎么解决这些错误吗,我用的是CCS7.2版本,XDS200的仿真器

  • 报的错误信息如上图所示

  • 报的错误信息是:
    unresolved symbol EXTERNAL_RAM_END, first referenced in F:/TI/OMAP-L138_FlashAndBootUtils_2_40/OMAP-L138/CCS/NANDWriter/Debug/util.obj

    unresolved symbol EXTERNAL_RAM_START, first referenced in F:/TI/OMAP-L138_FlashAndBootUtils_2_40/OMAP-L138/CCS/NANDWriter/Debug/device.obj

    Description Resource Path Location Type
    unresolved symbol NANDStart, first referenced in F:/TI/OMAP-L138_FlashAndBootUtils_2_40/OMAP-L138/CCS/NANDWriter/Debug/nandwriter.obj NANDWriter_DSP C/C++ Problem
    您知道怎么解决这些错误吗,是缺少头文件吗
  • 您好,我们现在也遇到了把程序烧写到nand flash中启动不起来的问题,nand flash 是16位的,DDR和nand flash和 TI 的C6748核心板是一样的,您的nand flash烧写程序后的启动问题解决了吗