我用evm6678开发板验证spiflash启动过程,按以下步骤作的:
1.打开spi_boot_suit\2_ledtestprj\LedTest\6678下的8个测试工程,成功编译并生成8个.out文件,
生成.out 文件命名为simple0.out 、simple1.out、 simple2.out 、simple3.out ……
2. 将8个.out文件拷贝到spi_boot_suit\1_utilities\multicore_boot_8cores路径下,双击spiboot_multi_8cores.bat批处理文件,开始生成文件,得到spirom_le.dat
3. 将evm板调成no-boot 模式,拨码开关对应 SW3~SW6 1000 0000 0000 1100 (0 对应on 1对应off)
4. 打开MCSDK自带的nor-writer工程,将工程bin文件夹下的nor_writer_input.txt 打开,修改"app.bin"为"spirom_le.dat" 并将spirom_le.dat拷贝到mcsdk_xxxx\tools\writer\nor\evmc6678l\bin路径下
5. 链接工程,等PC指针停在main函数入口,打开view–memory browser,输入0x80000000,load memory 选择spirom_le.dat,(自动)勾上Use the header… 再次确认start address 为0x80000000,length为spirom_le.dat的长度(单位是word) 开始往DDR里灌数。
6. 烧写工程run,console输出 ,烧写成功。
NOR programming completed successfully
7.断电,将evm修改拨码开关为spi-boot模式,SW3~SW6:1011 0000 0010 1000 (0 对应on 1对应off)
8.上电重启,发现所有led灯一直亮没有闪烁,打开spi_boot_suit\2_ledtestprj\LedTest\6678下的8个测试工程连接开发板连接不上,显示:error initializing emulator:(error -2083 @0x0)……
烧写成功了但是没有boot起来,而且这种模式下无法连接仿真器,无法观察指针的状态。还请大神来指点一下
striker Qian:
jim jim,
应该boot成功了,只是亮灯程序跑死了。亮灯程序只是为了给出一个明显的boot成功的标识,但是不亮灯未必没有boot起来。
修改策略:
1. 注释掉亮灯部分,改成while(1)
2.先尝试单核,再尝试多核boot
3.先尝试不带DDR的启动,所有代码数据段放在L2SRAM。
总之就是先尝试单核不涉及DDR的boot,注释掉亮灯程序后改为while(1),boot 之后连仿真器看下PC指针。在合理范围内便说明成功boot。此时如果load_symbol 选被烧写的.out 文件就可以看到代码。
striker
jim jim3:
回复 striker Qian:
非常感谢你细致的解答,在no boot 模式下我直接把6735.spi_boot_suit_v2.3.1_8corepatch.zip\spi_boot_suit_v2.3.1_8corepatch\1_utilities\1.6678\multicore_boot_1cores下的spirom_le.dat通过SPI烧写到flash中,在烧写过程中用示波器测量flash芯片的clk管脚测到有时钟输入,烧写完成后断电将拨码开关调整为SPI启动模式,重新上电,同时用示波器测量flash的clk管脚,没有测到时钟信号,连接仿真器发现PC指针指在0x20BC0954.
烧写其他多核文件夹下的dat文件也是一样的现象。
感觉片上boot loader没有起作用,例程中的dat文件能直接用吧?
striker Qian:
回复 jim jim3:
jim
0x20B 开头的地址就是没有启动起来,代码还是处于RBL 。
两种可能,一种是被烧写的镜像格式不对(目录下.dat 可以使用),另外一种可能是eeprom里的镜像被清除了 。 EVM 板需要eeprom里的IBL做workaround。如果是这样需要重新烧写eeprom.
striker
jim jim3:
回复 striker Qian:
您好 striker:
SPI启动时dat文件从flash搬移到内存不是有DSP bootrom 中的RBL完成的么,那么这个IBL是做什么用的呢?
有没有烧写eeprom IBL的例程或步骤呢?
期待您的答复
jim
striker Qian:
回复 jim jim3:
jim,
6678 evm 自带IBL在EEPROM里,只要没有被破坏就不需要重新烧写。烧写的例程在mcsdk里有。
只有evm板卡在进行SPI BOOT 时需要IBL 绕开PLL bug,用户自己制作的板卡不需要。为什么这样,因为为了避开这个bug,即使你选择了SPI boot,EVM板卡也会强制板卡进入I2C boot , 再进SPI flash 。
不用修改任何FPGA程序。
如果不放心可以重新烧写一下eeprom的IBL。
striker
Dan Jia:
回复 striker Qian:
striker striker ,您好,我看到您的历程里多核烧写的.text都是放在L2RAM,如果.text段太大,只能放在DDR3怎么烧写呢?还有在cfg文件中,定义的platform数据段和代码段应该放在那儿?
jim jim3:
回复 striker Qian:
striker,
根据您的建议,我向IIC EEPROM中重新烧写了IBL,烧写步骤是这样的:
(1) 将目标板(EVM或用户板)设置在no boot/EMIF16 模式
(pin1, pin2, pin3, pin4) SW3(off, on, on, on), SW4(on, on, on, on), SW5(on, on, on, off), SW6(on, on, on, on),连接Jtag并加电。
(2) 在CCS环境连接目标Core0:采用evmc6678l.gel配置文件并初始化DDR。
(3) 调入在CCS环境下的编程工具:program writer \eeprom \evmc66xxl \bin \eepromwriter_evm6678l.out。
(4) 在CCS下打开内存观察窗口(view->Memory Browser):观察0x0C000000(这是共享MSM内存的首地址)下的地址。
(5) 将IBL程序i2crom_0x51_c6678_le.bin copy到目录:writer\eeprom\evmc6678l\bin 下,同时调入CCS的内存0x0C000000处。具体方法:在CCS的内存观察窗口中按鼠标右键→调入文件“load memory” →选择文件i2crom_0x51_c6678_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_c6678_le.bin
bus_addr = 0x51
start_addr = 0
swap_data = 0
(7) 在CCS环境下运行:按F5。编程正确结束,console终端中显示“EEPROM programming completed successfully”。
(二)配置IBL
(8)、运行程序mcsdk_2_00_04_16\tools\boot_loader\ibl\src\make\bin\i2cparam_0x51_c6678_le_0x500.out
(9)、加载文件 i2cConfig.gel然后在CCS的DEBUG界面上点击,Srcipts->EVM c6678 IBL -> setConfig_c6678_main
(10)、几秒钟以后,在console界面上敲击回车键 显示配置成功
烧写并配置完成后,依照之前的步骤烧写SPI flash,完成后将拨码开关拨到SPIflash启动模式,上电出现下面的现象:
(1)用示波器测量IIC eeprom的clk和data 发现一直有波形,等了好久一直这样。
(2)用示波器测量SPI flash时钟发现没有反应。
请问这是怎么回事呢,为什么启动时DSP一直在对IIC EEPROM进行操作,是不是我IBL烧写有问题?期待您的指点
striker Qian:
回复 jim jim3:
Jim,
流程看上去没有问题,你能附上你的spirom_le.dat 文件吗?
striker
jim jim3:
回复 striker Qian:
striker
感谢您耐心的回答,我将spirom_le.dat附在附件里了,麻烦您看下是否有问题。
再请教几个问题:
(1)是不是第一版的6678芯片有bug,所以必须借助IIC EEPROM中的IBL启动?新版的芯片可以直接通过RBL从SPI flash中启动吧?
(2)在芯片有bug的情况下,将开发板设置成SPI启动模式,它的启动流程是不是这样的:
1、芯片复位时检测到启动模式为SPI启动,运行相应的RBL。
2、RBL从IIC EEPROM中读取IBL到片内。
3、IBL配置PLL完成。
4、RBL再从SPI中读取应用程序代码到片内。boot完成。
(3)在新版芯片无bug的情况下,将开发板配置成SPI启动模式,它的启动流程是不是这样:
1、芯片启动时检测到启动模式为SPI启动,运行相应的RBL。
2、RBL将应用程序代码读入芯片内部。boot完成。
jim
striker Qian:
回复 jim jim3:
jim,
流程很对,但是没看到你的附件。不知道你问题解决没
striker