1、GPIO配置
要使用bootloader首先需要配置GPIO电平来设置boot方式,我手上的两块板子分别使用的是I2C EEPROM与EMIF
2、EMIF和I2C boot简单分析
2.1 EMIF boot方式
并行EMIF模式开始读取位于CE1空间的word地址200000h处的引导表。
在此引导模式下,IO4将在启动过程的开始时降低。在启动表中执行可编程延迟特性时,IO4会升高。当延迟完成时,IO4将再次降低。在引导加载结束时,IO4会升高,DSP从入口点地址开始执行。IO4对于内存来说不是必需的,但是如果其他源正在为EMIF生成数据,那么它可以用作握手信号。
下图是TI对于此方式的解释
2.2 I2C EEPROM boot方式
内存设备符合飞利浦I2C总线规范v2.1,从地址要为50h。
内存设备使用两个字节(最多64K字节)来进行内部寻址。(经我查阅资料以及尝试后确定5509A的bootloader只能搬运16Kb容量)
引导加载程序在随机读取操作期间将GPIO4设置为低,以此标志i2c启动模式的开始。然后在剩余的读取操作期间将GPIO4设置为高。在引导过程结束时,I2c模块仍然启用(但没有总线活动),直到用户的应用程序关闭该模块。
3、引导表(boot table)
3.1 了解引导表
程序入口地址是引导表加载结束后,用户程序开始执行的地址;寄存器配置数目决定了后面有多少个寄存器需要配置;延时标志为0xFFFF时,延时才被执行,延时长度决定了在寄存器配置后多少个CPU周期才进行下一个动作;段长度、段起始地址和数据则为用户程序中定义的各个段的内容,并且可以重复添加,最后一0x00000000作为引导表的结束标志。
3.2 创建引导表
怎么创建引导表呢,用ti提供的hex55.exe工具(ccs里面有)来创建,将ccs最终编译的.out文件、hex55.exe以及.cmd文件放在同一目录下,通过DOS命令调用hex55.exe即可完成.out到hex格式的引导表文件的转化。
DOS命令如何写?
.cmd文件的实例:
-boot; 说明创建boot文件格式
-5510:2; 生成55xxboot文件格式
-serial8; 使用用串行加载方式(8位)
-a; ASCII格式
-reg_config 0x1c00,0x02b7; 在0x1c00寄存器写0x02b7
-delay 0x100; 延迟100CPU时钟周期
-o Test.hex; 输出.hex文件
-Test.out; 输入的.out文件
4、二次引导的实现
未完待续
参考资料:
Using the TMS320VC5503/C5506/C5507/C5509/C5509A Bootloader
TMS320C55x Assembly Language Tools User’s Guide
Developing a CCStudio 2.0 DSP/BIOS Application for FLASH Booting on the TMS320C5402 DSK