第6节 单核烧写加载程序
6.1节 TI参考文档
参考文档:《KeystoneI Bootloader Resources and FAQ》讲的非常好,建议一定要看
里面有三个工程:
- C6678 EVM SPI boot example
- C6657 EVM SPI boot example with DDR initialization
- C6657 EVM NAND boot example
- 里面简介了工具的使用
参考文章:
《C6678学习——SPI NOR FLASH多核引导资料汇总及个人分享》
《TI DSP TMS320C66x学习笔记之SPI Nor Flash多核程序烧写》
《C6678十六进制转换工具Hex6x介绍》
《C6678镜像工具链介绍》
《C6678多核程序烧写固化》
6.2节 BOOTMOD与PIN的对应关系
- GPIO0对应大小端选择
- GPIO1对应BOOTMODE0
- GPIO2对应BOOTMODE1
- 依次类推
- GPIO13对应BOOTMODE12
6.3节 SPI NOR FLASH烧写
6.3.1
- 将out文件经过一系列转换为特定格式,通过NOR Flash烧写工程将转换后的文件烧写到flash中。
- 然后将开发板设置为SPI NOR Flash启动,开发板即可成功运行。
- 具体过程如下:下图为多核烧写过程,单核烧写中没有mergebtbl过程
- hex6x 配合.rmd文件(有几个.out文件就需要几个.rmd文件,描述输出控制、引导选项、存储器选项等内容)生成片上引导加载器加载程序所需的引导表,输出文件为*.btbl
- mergebtbl将*.btbl按照一定的顺序链接起来(单核烧写没有此步骤)
- b2i2c 将*.btbl转换成i2c/spi格式,把boot表划分成0x80字节块并附加长度(length)和校验码(checksum)
- b2ccs将*.btbl.i2c转换成.i2c.ccs,CCSV5 IDE接收的.dat格式,加载到DDR3中去。并手动将i2crom.ccs中的第9行51改为00。
- romparse 合并boot表和boot参数表,参数配置表文件*.map作为输入。
- byteswapccs将.dat转换成ROM Bootloader代码能够识别的大端模式(.dat文件可以直接烧写)
- ccs2bin将.dat文件转换成.bin文件(.bin文件可以直接烧写)
- 具体工具使用细节可参考第10节的烧写工具介绍
6.3.2 bin & dat两种文件可以烧写
- TI官网和创龙开发板烧写的是bin文件
- 钱丰提供的例程烧写的是dat文件
- 通过ccs2bin.exe工具可以将dat文件转换为bin问件
- 烧写是注意nor_writer_input.txt文件中的烧写名称的修改
两种文件加载DDR中选择项不同:
dat文件:
bin文件:
6.3.3使用创龙开发板例程烧写 NO DDR
开发板上可以测试通过Demo\Factory Reset\Tools\SPI NorFlash Image
- 制作脚本如下:
Buid.bat
@echo off
Bin\hex6x -order L Config\app.rmd app.out
Bin\b2i2c app.b app.spi.b
Bin\b2ccs app.spi.b app.spi.ccs
Bin\romparse Config\app_spirom.map.pp
Bin\ccs2bin -swap i2crom.ccs nor.bin
del *.ccs
del *.b
echo Finish!
- 使用步骤:
将编译出的xxx.out文件改名为app.out放到SPI NorFlash Image目录下运行Build.bat,生成nor.bin,然后通过NOR FLASH方法烧写到NOR Flash中,设置成SPI启动,上电即可看到程序运行。
6.3.4使用TI官方例程烧写NO DDR
例程下载地址:
参考文档:《KeystoneI Bootloader Resources and FAQ》讲的非常好,建议一定要看
里面有几个工程:
- C6678 EVM SPI boot example
使用TI官方例程C6678_directROM_boot_examples.zip
- 制作脚本如下:
Buid.bat
@echo off
set C6000_FOLDER=C:/ti/ccsv7/tools/compiler/ti-cgt-c6000_8.2.2
set PDK_PACKAGES=C:/ti/pdk_C6678_1_1_2_6/packages
set PATH=%C6000_FOLDER%\bin;%PATH%
spiboot.bat
set IBL_UTIL=C:\ti\pdk_c667x_2_0_15\packages\ti\boot\ibl\src\util
@REM FOR PROCESSOR SDK RTOS change the path to SDK_INSTALL_PATH\pdk\pdk_c66xx_2_0_0\packages\ti\boot\ibl\src\util
hex6x led_play.rmd //与创龙生成文件一样
%IBL_UTIL%\btoccs\b2i2c led_play.btbl led_play.btbl.i2c //与创龙生成文件一样
%IBL_UTIL%\btoccs\b2ccs led_play.btbl.i2c led_play.i2c.ccs //与创龙生成文件一样
%IBL_UTIL%\romparse\romparse nysh.spi.map //与创龙生成文件不一样
pause //此处暂停,修改i2crom.ccs文件将第9行0x01f40051改为0x01f40000,否则将不能运行
copy i2crom.ccs spirom_le.dat
byteswapccs i2crom.ccs spirom_le_swap.dat
copy spirom_le_swap.dat app.dat
%IBL_UTIL%\btoccs\ccs2bin i2crom.ccs spirom_le.bin
%IBL_UTIL%\btoccs\ccs2bin -swap i2crom.ccs spirom_le.swap.bin
- 使用步骤:
1、将setup.bat和spiboot.bat中的路径设置为本机真正的路径
2、先运行setup.bat
3、修改nysh.spi.map文件和创龙app_spirom.map.pp文件一样
4、运行romparse nysh.spi.map命令,然后修改i2crom.ccs文件将第9行0x01f40051改为0x01f40000,否则将不能运行
5、将spirom_le.swap.bin拷贝到NOR Flash工程进行烧写,然后拨到SPI NOR启动,即可成功。
- 注意事项:
- 创龙的romparse和TI官网的romparse命令不一样,创龙版本的romparse经过了特定修改。
- romparse 的作用是合并boot表和boot参数表,参数配置表文件*.map作为输入。
- 不同的启动方式boot para table不一样
6.3.5使用钱丰例程烧写NO DDR
例程下载地址:
烧写工具链接: https://pan.baidu.com/s/1em4jWjbskpMmNd1uzscjjA 提取码: 82qg
- 制作脚本如下:
hex6x simple.rmd
b2i2c simple.btbl simple.btbl.i2c
b2ccs simple.btbl.i2c simple.i2c.ccs
romparse nysh.spi.map
//钱丰增加了modify命令,实现了字节翻转,和将i2crom.ccs文件将第9行0x01f40051改为0x01f40000功能
modify i2crom.ccs spirom_le.dat
ccs2bin spirom_le.dat spirom_le.bin // 此处转bin文件不再进行字节翻转
- 使用步骤:
1、将生成的led_play.out文件改名为simple.out,放到E:\ft6678\doc\DSP_C6657\spi_boot_suit_v2.3.1_release\spi_boot_suit_v2.3\1_utilities\1.6678\singlecore_boot_not_support_large_binary目录下。
2、运行spiboot_single_noddr.bat,生成spirom_le.bin
3、将spirom_le.bin拷贝到NOR Flash工程进行烧写,然后拨到SPI NOR启动,即可成功。
- 注意事项:
1、钱丰使用的工具和TI官网提供的工具一样
2、钱丰增加了modify命令,实现了字节翻转功能
3、钱丰提供的脚本中没有实现ccs转bin的步骤,必须先将TI官网的ccs2bin工具放到钱丰的脚本目录下,脚本最后加上以下语句即可
ccs2bin spirom_le.dat spirom_le.bin
6.3.6使用钱丰例程烧写With DDR
例程下载地址:
烧写工具链接: https://pan.baidu.com/s/1em4jWjbskpMmNd1uzscjjA 提取码: 82qg
- 经测试发现上述3中烧写方法(6.1.3.2 6.1.3.3 6.3.1.4),没有提供带有DDR初始化的制作脚本,所以编写的代码必须在DSP内部存储空间内才可以运行。
- 钱丰提供了DDR初始化脚本。
- 在6.1.3.4的基础上点击spiboot_single.bat脚本即可生成带有DDR初始化的烧写文件
- 制作脚本如下:
hex6x simple.rmd
AddDdrTable6678 simple.btbl // 增加DDR初始化数据
b2i2c simple.btbl simple.btbl.i2c
b2ccs simple.btbl.i2c simple.i2c.ccs
romparse nysh.spi.map
modify i2crom.ccs spirom_le.dat
ccs2bin spirom_le.dat spirom_le.bin
- 注意事项:与使用钱丰例程烧写NO DDR相同
6.3.7使用TI官方例程烧写With DDR
例程下载地址:
参考文档:《KeystoneI Bootloader Resources and FAQ》讲的非常好,建议一定要看
里面有几个工程:
C6657 EVM SPI boot example with DDR initialization
- TI提供的官网例程中只是实现了程序可以在DDR中运行,但没有提供DDR初始化配置表
6.3.8 BOOT ParameterTable的定义
- 参考文章:《sprugy5b——KeyStone Architecture Bootloader.pdf》
里面有BOOT Parameter的定义描述。
- 烧写数据需要包含配置bootloader的Boot参数表信息,romparse工具将Boot参数表添加到.ccs文件的对应位置。
- 不同的bootloader方式对应的Boot参数表内容不同。
附带文件tiboot.h定义了对应不同Boot方式的boot参数表结构体。从该结构体可以得到参数表变量的用途及占用字宽。
6.3.9 DDR Configuration Table的定义
暂未记录
6.4节 I2C IBL二次启动单核烧写
6.4.1 烧写思想
- 先将IBL镜像烧写到EEPROM中,然后将out文件直接烧到NOR/NAND Flash中。
- 将开发板设置为I2C EEPROM方式启动。
- 启动后开发本先运行IBL,再由IBL加载Flash中的代码运行,实现I2C—NOR / I2C—NAND的二次引导启动。(创龙开发板使用此种方式启动)
- 由于IBL可以直接解释out文件,所有可以直接将out文件烧写到Flash中,省去了out文件转换为bin文件的繁琐过程。