哪位调试过IBL的大神帮忙看一下我遇到的问题,希望可以得到指导。
1.本人找到了ibl\src\main\iblmain.c 在main函数中添加了一行代码*((unsigned int *)0x0c000000)=0xabcdabcd;(主要是为了验证ibl是否已经运行);
同样了修改了ibl\src\util\iblConfig\device.c setConfig_c6678_main()的语句 ibl.bootModes[1].u.nandBoot.bootFormat = ibl_BOOT_FORMAT_BBLOB; 替换为 ibl.bootModes[1].u.nandBoot.bootFormat = ibl_BOOT_FORMAT_ELF;
2. 本人按照ti的IBL使用说明,编译产生了四个文件,i2cConfig.gel , i2cparam_0x51_c6678_le_0x500.out , i2crom_0x51_c6678_le.bin , i2crom_0x51_c6678_le.dat; 同样修改了本次编译产生的gel文件 \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;
3. 按照IBL烧写nand说明,自己写的应用程序*.out(该应用程序是通过串口打印hello world的);烧到了TMDSEVM6678开发板的nand中;
4.按照IBL烧写eeprom说明,将i2crom_0x51_c6678_le.bin 文件烧写到了TMDSEVM6678开发板的eeprom中;
5.按照IBL烧写eeprom说明,使用TMDSEVM6678开发板 分别加载i2cConfig.gel , i2cparam_0x51_c6678_le_0x500.out文件到开发板中,并运行通过,看到了成功运行的信息;(事后证明,似乎该步骤就算没有,每次也可以成功)
6.按照IBL启动说明将拨码开关设置为I2C启动后,然后连接串口,看到了预期的启动信息。然后使用ccs连接卡发板,同样看到了0x0c000000上的值是0xabcdabcd; 查看DEVSTAT寄存器的值是0x0000082b;
到这里为止在开发板上试验非常完美成功,但是到公司自己的c6678上,噩梦就开始了
本人严格按照以上步骤,完整的走了一遍,最后发现串口没有任何打印信息,经检查串口没有任何问题。然后就连接ccs和公司的6678平台,然后发现0x0c000000上的内容是一个随机值,然后DEVSTAT寄存器的值是0x0001FFFF;经过检查竟然会使Hypelink启动。然后我就将刚刚烧写的eeprom内容全部檫除。然后再次启动,然后DEVSTAT寄存器的值是0x0001082b;
这里说明一下公司用的core时钟也是100MHz,eeprom和开发板一样,使用的FPGA来配置启动方式。FPGA部分肯定也没有问题。
希望路过的大神,帮忙分析一下原因,顺便提供一些建议。我需要修改哪些地方才可以想在开发板上运行的效果一样。
Thomas Yang1:
烧写完IBL FLASH/EEPROM后,请检查下启动模式是否为I2C BOOT,这个是第一步要保证的。
Peishu Yan:
你好 请问您的问题解决了吗??我现在也是通过IBL启动,目前遇到了三个问题,希望能得到您的解答。
1.我使用的DSP芯片为C6657,我按照各个烧写说明文档以及您提供的烧写步骤通过eeprom writer和nor writer成功烧写了各自的.bin文件,但是目前通过示波器观测上电后,DSP一直去读取I2C,不知道这是什么原因??
2.修改IBL文件是不是只需要修改device.c中的内容即可??假如我想要从spi nor flash实现二级加载需要把其他的加载方式的内容注释掉吗??比如eth、nand等
3.device.c中的DDR的时钟配置一直不清楚是怎么计算的,可否给说明一下呢?
希望能得到您的回复或者TI技术支持的答复,这是我的联系方式,819590597,十分感谢!!!
Peishu Yan:
你好 请问您的问题怎么解决的??我也遇到了你这样的问题,之前我遇到的问题解决了!