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

EVM6678L NAND boot

我按照论坛上给的一个6678 NAND boot的一个流程(如下所述),但试了好久都不成功,尝试中遇到一些问题,希望能得到好心的大牛们指导。

 

()生成应用程序的二进制文件,烧入NAND中。

1、将LedTest.out重新命名为LedTest.bin(有人说直接改为.bin,不需要转换内容)

2、将LedTest.bin文件写入NAND中。

     使用mcsdk_2_00_04_16\tools\writer\nand\evmc6678l\bin\nandwriter_evm6678l.out

     其中nand_writer_input.txt文件的内容为

     file_name  = LedTest.bin
     start_addr = 16384

(二)将IBL烧入EEPROM

1、将i2crom_0x51_c6678_le.bin文件从"mcsdk_2_00_04_16\tools\boot_loader\ibl \src\make\bin"拷贝到"mcsdk_2_00_04_16\tools\writer\eeprom\evmc6678l\bin"

2、使用mcsdk_2_00_04_16\tools\writer\eeprom\evmc6678l\bin\eepromwriter_evm6678l.out进行烧写

     其中eepromwriter_input.txt的内容为:

file_name  =  i2crom_0x51_c6678_le.bin
    bus_addr   = 0x51
    start_addr = 0
    swap_data  = 0

3、手动载入文件i2crom_0x51_c6678_le.bin加载到0x80000000

()配置IBL

1、修改mcsdk_2_00_04_16\tools\boot_loader\ibl\src\make\bin\i2cConfig.gel的内容,将函数setConfig_c6678_main()的语句

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

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

 2、运行程序mcsdk_2_00_04_16\tools\boot_loader\ibl\src\make\bin\i2cparam_0x51_c6678_le_0x500.out

3、加载文件 i2cConfig.gel然后在CCS的DEBUG界面上点击,Srcipts->EVM c6678 IBL -> setConfig_c6678_main 

4、几秒钟以后,在console界面上敲击回车键

测试是否成功

 1、首先修改板子的启动模式

    (pin1, pin2, pin3, pin4) 
    SW3(off, off, on, off),     SW4(on, off, on, on),     SW5(on, on, on, off),
    SW6(on, on, on, on)

我有如下的一些问题:

【1】       第(一)和(二)大步都需要手动将.bin的文件载入到0x80000000吗?我读了下源程序,感觉需要手动载入。

【2】       在CCS.5.2中手动载入.bin文件时,在Memory browser的Load Memory功能下,需要选择Type-size,这个选择哪一种呢?有8bits,16bits,32bits,64bits。

【3】       我的程序是通过if(DNUM)来实现多核的不同工作的,如果将这种多核程序(只有一个.out文件)成功下载到NAND中,上电启动后,多核会开始工作吗?还是需要做一些多核启动什么的?

【4】       我的工程后续还需要加入BIOS系统,让他单独在一个核上运行,这会不会对程序下载有一些新的特殊要求?

【5】       EVM6678L有没有一些更简单的程序烧录方法?

 

希望能得到大家的及时解答。谢谢大家!

 

Kaka

2013/5/13

chenpjh:

Huang你好:

最近我也刚开始看C6678boot方面的文献。对于你的问题,我的看法是:

问题一:是需要手工加入,但加入的地址与MCSDK的版本有关,可参见我后面附的IBL与NAND的烧录过程。

问题二:选择32位宽。

问题三:如果仅加载一个核的*.out文件到NAND flash中,在使用IBL二次boot时则只能有一个核进行启动。当然你也可以在用户程序中进行修改,但不建议。对于多核的具体过程我目前还没有理清楚,但从TCI6488的boot文档上看:要使用多个核一般要多个*.out文件,并分别产生相应的boot表,并进行合并。然后再进行烧录。(这一点希望多交流)。

问题四:Boot与你是否使用了SYS/BIOS没有关系,整个boot过程所有的程序均看为一般的用户程序。

问题五:目前还没有看到更简单的boot方法。

 

附IBL烧录与NAND烧录:

对I2C进行POR或IBL程序编程:(参见MCSDK的111页)

(1)          将目标板(EVM或用户板)设置在no boot/EMIF16模式,连接Jtag并加电。

(2)          在CCS环境连接目标Core0:采用evmc66xxl.gel配置文件并初始化DDR。(对于2.0.8及这之前版本的MCSDK在初始化程序中使用了DDR)

(3)          调入在CCS环境下的编程工具:program writer \eeprom \evmc66xxl \bin \eepromwriter_evm66xxl.out。

(4)          在CCS下打开内存观察窗口(view->Memory Browser):观察0x0C000000(这是共享MSM内存的首地址)下的地址。(注意:这个地址与MCSDK的版本有关。对于2.0.8及这之前版本的MCSDK需使用0x80000000。这也是网上对该地址混乱的一个原因。另外在烧录POST时,所有的MCSDK版本均使用0x80000000地址)

(5)          将IBL程序i2crom_0x51_c6670_le.bin copy到目录:writer\eeprom\evmc66xxl\bin 下,同时调入CCS的内存0x0C000000处。具体方法:在CCS的内存观察窗口中按鼠标右键→调入文件“load memory” →选择文件i2crom_0x51_c6670_le.bin→不需要使用选项:“Use the file header information to set the start address and size of the memory block to be loaded”(32位宽,无交换)→按“next”即可完成。

(6)          设置配置文件:writer\eeprom\evmc66xxl\bin\eepromwriter_input.txt(注意:对这些参数进行修改时,字符的大小写,空格均不要改变原文件中的格式)

file_name = i2crom_0x51_c6670_le.bin (在烧录IBL时这个文件名是否需要同时改成App.bin?因而MCSDK文档上是这样的;而在烧录POST时,这两个文件名保持相同的原始文件。这儿需要注意的是,这个等烧录的文件已不是原始的*.out文件了!)
bus_addr = 0x51
start_addr = 0
swap_data = 0

(7)          在CCS环境下运行:按F5。但编程正确结束,则console终端中显示“EEPROM programming completed successfully”,否则提示错误信息。

 

NAN flash的烧录方法:

(1)          将目标板(EVM或用户板)设置在no boot/EMIF16模式,连接Jtag并加电。

(2)          在CCS环境连接目标Core0:采用evmc66xxl.gel配置文件以初始化DDR。

(3)          将待烧录的程序(*.out)后缀改成*.bin,如果待烧录的程序为LedText.out,则将其copy到mcsdk_2_00_04_16\tools\writer\nand\evmc6678l\bin,并改成LedText.bin;

(4)          在CCS环境下调入程序:mcsdk_2_00_04_16\tools\writer\nand\evmc6678l\bin\ nandwriter_evm6678l.out,并将该程序的配置文件:nandwriter_input.txt作相应的设置,一般nand_writer_input.txt文件的内容修改为:

file_name = LedTest.bin(烧录文档说明中二个文件名均采用app.bin,感觉这儿只要这二个文件名相同就可以了)
start_addr = 16384

(5)          在CCS下打开内存观察窗口(view->Memory Browser):观察0x80000000(这是DDR3内存的首地址)下的地址。(注意:这个地址与MCSDK的版本无关。所有版本的MCSDK需使用0x80000000)将用户程序LedText.bin装入内存。具体方法:在CCS的内存观察窗口中按鼠标右键→调入文件“load memory” →选择文件LedText.bin→不需要使用选项:“Use the file header information to set the start address and size of the memory block to be loaded”(开始地址0X80000000,32位宽,无交换)→按“next”即可完成。

(6)          运行烧录程序(或按F8)开始烧录。如果正确烧录,则在console终端上输出: "NAND programming completed successfully",否则给出错误的提示信息。

 

 

Kaka Huang:

回复 chenpjh:

先谢谢你的回答!我待会去试试,有问题再请教。

前几天的尝试中还有个问题,希望您能指导指导:

我将.out的文件重命名为.bin后,在Load Memory时,采用32位,在DDR3中看到的数据貌似没问题(DDR已经初始化);但是我在向内存中laod i2crom_0x51_c6678_le.bin时(32位或者16位),从内存中看到的数据大部分都是0,感觉数据有问题。不知道我的这个现象是否是正确的。

另外。我用6678大概半年了,主要使用了EVM上的SPI、EDMA、UART等,后边会使用SRIO、EMAC等。了解的东西不多,以前也没做过DSP开发,希望多多交流。

Mark:

回复 chenpjh:

你好,我最近也在研究nand的boot问题,我用的mcsdk版本是mcsdk_2_01_02_06,但是一直没有成功,你能将你mcsdk下的tools文件夹打包发我一下吗,我的邮箱是maguodong12345@126.com,谢谢了!

ziye:

请问你多核NAND BOOT 成功了吗?对于0核启动其他7个核的操作是怎么做的,可不可以把代码发给我一下,非常感谢。981342847@qq.com,希望多交流

zhonghong zhang:

回复 ziye:

您好,请问单核boot成功后,如何做多核的程序自加载呢?我刚刚接触6678,都不太熟悉。现在out直接重命名bin之后,多个核之间的out文件怎么烧写呀,还需要合并吗?

zhonghong zhang:

回复 ziye:

hi ziye 您好

这段时间我一直在做NAND FLASH 自加载。但我刚刚接触6678,都不太熟悉。现在单核IBL nand boot可以成功了,如何做多核的程序自加载呢?还有,现在out直接重命名bin之后,多个核之间的out文件怎么烧写呀,还需要合并吗?需要boot parameter table 和 DDR table之类的配置吗?

不知道您是否有过相关方面的开发经验,如果方便能提供一些例程吗?不胜感激

ziye:

回复 zhonghong zhang:

我后来没深入研究了,就是在工程里把所有的核程序合在一起了

zhonghong zhang:

回复 ziye:

您好

您的程序合在一起之后, 只在单核里面运行程序吗?还是说生成一个out文件, 烧写之后 ,可以在8个核里面分别运行?

ziye:

回复 zhonghong zhang:

就是说8个核的程序都是一样的,用同一个out

zhonghong zhang:

回复 ziye:

那样自加载boot时,是八个核都跑起来了吗?您方便的话能给我一个例程,参考一下?

赞(0)
未经允许不得转载:TI中文支持网 » EVM6678L NAND boot
分享到: 更多 (0)