我参考C6678帖子的叙述和bootloader以及writer里面的readme,分别进行了如下步骤:
(1)将IBL烧入EEPROM中
1、将i2crom_0x51_c6657_le.bin文件从"mcsdk_2_00_04_16\tools\boot_loader\ibl \src\make\bin"拷贝到"mcsdk_2_00_04_16\tools\writer\eeprom\evmc6657l\bin"
2、使用mcsdk_2_00_04_16\tools\writer\eeprom\evmc6657l\bin\eepromwriter_evm6657l.out进行烧写
其中eepromwriter_input.txt的内容为:
file_name = i2crom_0x51_c6657_le.bin
bus_addr = 0x51
start_addr = 0
swap_data = 0
3、手动载入文件i2crom_0x51_c6657_le.bin加载到0x80000000
(2)配置IBL
1、修改mcsdk_2_00_04_16\tools\boot_loader\ibl\src\make\bin\i2cConfig.gel的内容,将函数setConfig_c6657_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_c6657_le_0x500.out
3、加载文件 i2cConfig.gel然后在CCS的DEBUG界面上点击,Srcipts->EVM c6678 IBL -> setConfig_c6657_main
4、几秒钟以后,在console界面上敲击回车键
(3)生成应用程序的二进制文件,烧入NAND中。
1、将LedTest.out重新命名为LedTest.bin(有人说直接改为.bin,不需要转换内容)
2、将LedTest.bin文件写入NAND中。
使用mcsdk_2_00_04_16\tools\writer\nand\evmc6678l\bin\nandwriter_evm6657l.out
其中nand_writer_input.txt文件的内容为
file_name = LedTest.bin
start_addr = 16384
测试是否成功
1、首先修改板子的启动模式
Boot Mode |
DIP SW3 (Pin1, 2, 3, 4, 5, 6, 7, 8) |
DIP SW5 (Pin1, 2, 3, 4, 5, 6, 7, 8) |
|
||
IBL NAND boot on image 0 |
(off, off, on, off, on, off, on, on) |
(on, on, on, off, on, on, on, on) |
IBL NAND boot on image 1 |
(off, off, on, off, off, off, on, on) |
(on, on, on, off, on, on, on, on) |
两种都尝试了,并没有启动?
有如下几个问题:
1、在操作的时候发现nand_writer_input.txt里面的start_addr为什么默认不是16384地址而是131072,readme说明上应该是16384。
疑问:为什么默认不是16384地址而是131072呢?如果起始地址不是0的话IBL启动会不会找不到程序入口呢?为什么烧写相同的LED闪烁到NOR可以成功,到NAND却不能成功闪烁呢?
2、之前在烧写NOR flash的时候操作步骤差不多,烧写LED程序配置为 NOR boot on image 0 (default)确实成功启动了,但是当我烧写一个6M左右程序时提示程序过大,那说明书上的NOR 大小为16M是什么意思呢?
Allen35065:
start_addr是16384还是131072取决于你板上使用的NAND一个block的大小,6657EVM对应的一个block的大小是131072,6678是16384;
IBL NAND启动时可以指定NAND启动是从某个block开始,默认是从block 1开始;
6657 EVM外接的SPI NOR 是32Mb(4MB)