TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678 IBL nand加载问题

各位专家好,最近用mcsdk_2_01_02_06里的ibl进行nand的boot程序加载,我用的是ibl里的通过I2C加载nand的例程(\mcsdk_2_01_02_06\tools\boot_loader\examples\i2c\nand\evmc6678l),加载过程完全按照ibl的烧写即配置顺序,程序的烧写也是按照nand的烧写过程,加载完毕,把开关博导相应的位置

 NAND Boot:
   Set the dip switches (pin1, pin2, pin3, pin4) to:    SW3(off, off, on, off),    SW4(on, off, on, on),    SW5(on, on, on, off),
    SW6(on, on, on, on)

复位后电脑串口终端一直不停输出DDR OK,不知道这是什么原因,我又烧写了一个可以再CCS上运行的LED点灯程序,也不能正常点灯,请问这是什么原因啊!谢谢了!

Andy Yin1:

您好,

附件是我之前在EVM6670上成功运行Nand flash boot的说明,请参考。

Mark:

回复 Andy Yin1:

谢谢您的解答,Andy Yin1,我也是按照你给我的这个txt上的步骤来的,只是烧写IBL,配置IBL和烧写NAND我都是一次完成的,没有重启evm板,回去再试试,谢谢了!

zhonghong zhang:

回复 Mark:

您好,不知道您的自加载现在成功了吗?

我现在刚刚做6678的nand flash boot,我严格按照流程,每步都是正确的,但是自加载时也是一直打印DDR ok 不过到最后会停止,到现在还是不知道是什么原因。我的MCSDK是2.01.02.05版本的。您说的烧写IBL,配置IBL和烧写NAND,每一步完成之后,我都断电,重新上电后,进行下一步操作,但是还是没有自加载成功。非常麻烦,向您请教。

jack liu_first:

回复 zhonghong zhang:

你的cmd分配是否占用了0x800000 — 0x81bdef这段空间,这段空间分配给了IBL,如果占用了,避开这段空间

zhonghong zhang:

回复 jack liu_first:

您好,我在分配CMD的时候,设置如下:特意避开了IBL的运行空间0x00800000 to 0x0081BDFF.

-heap  0x1000

-stack 0x2000

MEMORY

{   /* Local L2, 0.5~1MB*/

    VECTORS:    o = 0x00820000  l = 0x00000200   /*o = 0x00800000  l = 0x00000200 set memory protection attribitue as execution only*/

    LL2_CODE:   o = 0x00820200  l = 0x0000FE00   /*o = 0x00800200  l = 0x0000FE00 set memory protection attribitue as execution only*/

    LL2_R_DATA:     o = 0x00830000  l = 0x00008000   /* o = 0x00810000  l = 0x00008000 set memory protection attribitue as read only*/

    LL2_RW_DATA:    o = 0x00838000  l = 0x00047FFF   /* o = 0x00818000  l = 0x00068000 set memory protection attribitue as read/write*/

    /* Shared L2 2~4MB*/

    SL2:        o = 0x0C000000  l = 0x00180000  

    SL2_RW_DATA:    o = 0x18000000  l = 0x00200000   /*remapped SL2, set memory protection attribitue as read/write*/

    /* External DDR3, upto 2GB per core */

    DDR3_CODE: o = 0x80000000  l = 0x01000000   /*set memory protection attribitue as execution only*/

    DDR3_R_DATA:    o = 0x81000000  l = 0x01000000  /*set memory protection attribitue as read only*/

    DDR3_RW_DATA:   o = 0x82000000  l = 0x06000000   /*set memory protection attribitue as read/write*/

}

结果还是和以前一样,一直输出DDR OK,输出很多个DDR OK之后,停止。但是相同的程序,烧写到NOR FLASH中就可以自加载成功。

在此程序中,我确认的地方还有,在NAND 自加载时,连上DSP,

6678芯片内部本身有boot ROM ,也就是iBL引导代码,可以完成加载前的基本初始化工作,该代码执行完后,bootcomplete 寄存器的值会置1。BOOTCOMPLETE(0x0262013C) 是 0x00000001,说明已经加载了。
查询加载后0x80000000有我烧写的代码数据内容,和bin文件一致。但是我看到有些人说这些代码数据应该在0x00800000空间??
查询MAGIC_ADDRESS(0x1x87FFFC) 为非空值。值为00803320。
查看Device Status Register(0x02620020) 始终是0x0000082b。
out转bin,直接改的后缀名,烧写之后自加载不成功;采用out转hex,转ccs的dat,再转bin,烧写之后自加载也不成功。下面是转换的Bat应用脚本语言:

set IBL_UTIL=C:\ti\mcsdk_2_01_02_05\tools\boot_loader\ibl\src\util

hex6x makefile.rmd

pause

%IBL_UTIL%\btoccs\b2ccs image.hex image.dat

pause

%IBL_UTIL%\btoccs\ccs2bin image.dat image.bin

pause

我的硬件平台是:mcsdk_2_01_02_05 和TMDXEVM6678LE Rev1.0。mcsdk_2_01_02_06的也尝试过,还是和之前的一个现象,总是显示DDR OK。现在对于NAND FLASH 的自加载正在查找原因,好长时间了,没有进展呀。但是相同的程序,烧写到NOR FLASH中就可以自加载成功。谢谢~~

 

jack liu_first:

回复 zhonghong zhang:

你好,

配置IBL时

i2cConfig.gel中的关于evm6678部分的,不知你做了这个吗

ibl.bootModes[1].u.nandBoot.bootFormat    = ibl_BOOT_FORMAT_BBLOB;

改为

 ibl.bootModes[1].u.nandBoot.bootFormat    = ibl_BOOT_FORMAT_ELF;

.out直接重命名为.bin即可

zhonghong zhang:

回复 jack liu_first:

您好  ibl的配置里改了nandBoot.bootFormat    = ibl_BOOT_FORMAT_ELF,看到了I2C write complete  文件格式转换时,我两种方式都试过,一种是直接重命名改为.bin另一种用转换工具,但是两种方法都不成功

jack liu_first:

回复 zhonghong zhang:

你好,你用的是6678evm?简单的点灯程序都不行吗?你把所有代码避开IBL代码区,放在L2里吗?

zhonghong zhang:

回复 jack liu_first:

板卡是TMDXEVM6678LE Rev1.0  代码区域已经全部避开了IBL的空间的   没有试点灯程序 我的应用程序是一个UART可以输出信息的程序  

jack liu_first:

回复 zhonghong zhang:

你好,是否有代码放在DDR,是否加载了DDR参数表做DDR的初始化?

赞(0)
未经允许不得转载:TI中文支持网 » C6678 IBL nand加载问题
分享到: 更多 (0)