10/14/16 更新parameter table,原有的parameter table里的PLL设置不正确,可能导致部分SPI不能启动,使用时应根据DSP输入的coreclk配置nysh.spi.map的PLL配置,使最后的输出与core_freq_mhz 设置相同,应将sw_pll_prediv设置为1, core_freq_mhz =coreclk*sw_pll_mult/sw_pll_postdiv.
多核工程源代码参考 http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/109255.aspx
05/30/16 更新Step 6 NOR writer 步骤和代码
1. DSP启动的Rom Bootloader(RBL)只接受Boot table文件格式,编译生成的elf或者coff(.out)文件需要转换成boot table格式才能使用,转换工具为hex6x,所在目录一般为C:\ti\ccsv6\tools\compiler\c6000_7.x.xx\bin,hex6x使用rmd文件作为输入
一般只需更改输入out和输出的btbl文件的名字和路径,支持绝对路径和相对路径,length需根据用户使用的memory的大小进行相应的调整,只要长度大于用户使用的空间即可。起始地址0x0C000000无需更改为用户地址,不影响结果。
多核启动代码应分别使用hex6x生成对应的btbl文件格式,然后使用mergebtbl进行合并。
mergebtbl core0.btbl core1.btbl multi_core.btbl
2. 使用b2i2c工具将第1步生成的btbl文件转换成i2c/spi启动的格式,b2i2c工具和源代码可以在C:\ti\mcsdk_2_01_02_06\tools\boot_loader\ibl\src\util\btoccs里找到。
3. 使用b2ccs工具将第2步生成的i2c文件转换成CCS可识别的ccs文件
4. 使用Romparse工具将第3步生成的ccs文件和spi启动的参数合并生成i2crom.ccs,romparse的源代码C:\ti\mcsdk_2_01_02_06\tools\boot_loader\ibl\src\util\romparse,此处注意按照自己的SPI NOR的模式修改spi.map文件,比如片选信号。
在i2crom.ccs里修改如下图对应位置的51为00
5. 使用byteswapccs工具将i2crom.ccs 转换成大端,RBL只工作在大端模式下,因此,如果需运行在小端模式下,编译生成的小端格式的文件需进行转换。如果编译时使用了大端模式配置并将运行在大端的DSP下,可以直接将i2crom.ccs更名成第6步需要的文件名。
6. 使用SPI NOR writer在CCS下将文件写入NOR flash,SPI NOR writer的文件在mcsdk_2_01_02_06\tools\writer\nor\evmc66xx目录下,需要注意该烧写器代码仅对应EVM板,用户自己使用的NOR flash参数和DSP的参数可能与EVM不一致,需要修改重新编译才能使用,不同的EVM板对应的platform源文件在C:\ti\pdk_C66xx_1_1_2_6\packages\ti\platform\evmc6657l\platform_lib\src目录下。
由于CCS文件格式有一些变化,mcsdk_2_01_02_06\tools\writer\nor\evmc66xx下的writer需要做一些修改后才能使用,下载修改后的覆盖原工程的文件重新编译工具。
拷贝.dat文件到norwriter的bin目录下,然后更改nor_writer_input.txt内容如下,可以根据自己的文件名进行修改,注意需要用.dat文件格式;修改完成以后在no boot的启动模式下启动DSP,运行nor_writer读取dat文件并烧写到NOR flash,务必注意此时需加载gel文件初始化DDR3,因为用户dat文件会被读取到DDR3缓存中。
file_name = spirom_le.dat
start_addr = 0
7. 烧写完成以后,将boot模式置于SPI NOR flash启动,如不成功,可考虑按下述方式检
- 确定DSP是否正常启动,测量SYSCLKOUT管脚是否稳定输出时钟信号,连接JTAG读取DEVSTAT确定boot mode设置是否正确;
- 连上JTAG后可检查PC指针的值看是否仍停留在RBL(0x20B0000)还是已经进行用户代码
- 测量SPI线上时钟是否稳定;
- 使用JTAG读取SPI ROM内容并与写入的数据比较检查是否正确;
- 如果修改了spi.map的时钟,修改回低速率时钟再做测试。
- 多核启动每个核的cmd文件务必使用全局地址0x1x8xxxxx而不是本地地址0x008xxxxx,因为ROM的读取和写入都由core 0完成,使用本地地址无法找到对应的写入地址。
- DDR3必须初始化之后才可使用,如果使用DDR的内存作为boot段需考虑使用二次Boot,二次boot可以参考C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\srio\srioboot_ddrinit的代码。
- 如仍有问题,请到deyisupport多核论坛提出,请将上述步骤中测试的结果都描述清楚,有助于快速定位问题。
文中实例可在附件SPI_Bootloader.7z查看。