如果引导参数表中的Option 选项为00, 表示在LSW 项中指定的地址是另外一个引导参数表的起始地址。如果Option 选项是01,那么LSW 项中指定的地址是引导表(也就是实际的DSP 程序)的起始地址;如果 Option 选项为10,那么LSW 项中指定的地址是引导配置表的起始地址。
引导装载程序在读取了引导参数后将热启动DSP, 然后根据读到的参数进行相应的操作。如果Option 选项指定下一步要装入的是引导配置表,那么引导装载程序会根据引导配置表中的内容配置相应的寄存器等,同时引导参数中的LSW 项和Option 项也会被更新。然后引导装载程序热启动DSP,根据更新后的LSW 项和Option 项进行下一步的引导配置或者引导参数设置。
如果Option 选项指定下一步要装入的是引导表,那么引导装载程序会根据引导表中的设置从EEPROM 中读取一定长度的数据到指定地址,然后DSP 跳转到程序的入口地址处(一般就是_c_int00 )开始执行。
LSW 项指定下一步需要装载的引导配置表或者引导表的起始地址,Next LSW 项则是在Option 项为10 时指定引导配置完成后下一个引导参数表的起始地址。
2.1 引导配置表的设置
为了在程序引导装载之前初始化一些必须的参数,需要用到引导配置表。例如在引导装载程序要把代码装载到DDR 存储器中执行的时候,就需要在引导装载之前配置一些DDR 的控制寄存器。
配置每一个寄存器(或者写一个存储器地址)需要3 个字(32bit) 的配置过程。第一个字指定了需要配置的寄存器的地址,第二个字指定了该寄存器中需要设置为1 的位,第三个字节指定了该寄存器中需要设置为0 的位。如果第二个字和第三个字有某些数据位同时有效,那么对应的数据位数据翻转。如果第二个字和第三个字同时为0,那么程序跳转到第一个字指定的地址执行。如果三个字全部为0,那么引导配置结束,表3 举出几个例子详细说明上述配置的过程。
可以看出,虽然引导配置表一般只是在引导装载之前配置一些寄存器,但是对于一些很简短的程序,也可以使用引导配置表将程序直接装载到内部存储器中去运行。
在引导配置完成后就需要将引导表(也就是真正需要在DSP 中运行的用户程序)装载到指定地址。
2.2 引导表的生成
引导表包括DSP 程序的代码段、数据段、以及其它一些程序信息,如程序入口地址等。引导表可以根据COFF 文件格式由用户从CCS 工程文件(即*.out 文件)中提取,不过使用TI 提供的转换工具hex6x 更为方便。使用hex6x 生成引导表时需要设置一些参数,这些参数可以用配置文件的形式提供给hex6x 使用[5],一个典型的配置文件如下所示(本例中的配置文件名为led.cmd):
led.out ; 需要转换的文件-boot ; 生成引导表-a; ASCII 格式文件-e _c_int00 ; 程序入口-order L ; 小端模式-memwidth 32 ; 存储器数据宽度-romwidth 32 ; ROM 数据宽度-o led.hex ; 输出文件在DOS 的命令行输入hex6x led.cmd↙ ,就可以生成引导表文件led.hex, 实际的数据结构转换如图所示,可以看出,为了能够正确的进行程序的引导装载,引导表中加入了一些代码的长度、地址等信息。
不过这个引导表文件并不能直接写入EEPROM 中,还需要进一步的格式转换。
2.3 EEPROM 映像文件的生成
写入EEPROM 的映像文件由一个或者多个引导参数表、若干个引导配置表和一个引导表组成。引导表的数据按照包的形式存放,每一个数据包由数据长度、校验和以及程序数据组成,数据包的长度不能超过128 字节。把hex6x 生成的led.hex 文件分割成128 字节的数据包的过程可以使用TI 公司提供的相关工具软件来完成,也可以由用户根据上述格式进行转换。由引导参数表、引导配置表和引导表合成映像文件的过程也可以使用TI 公司提供的相关工具软件来完成。本文中使用的映像文件由一个引导参数表、一个引导配置表和一个引导表组成,在EEPROM 的存放位置如图3 所示。
3 测试结果及小结
使用编程器或者直接使用TI 公司的CCS 软件可以把上面生成的映像文件写入EEPROM。为了验证引导装载过程是否能够正确完成,可以给验证系统重新上电,看到发光二极管闪烁,说明引导装载成功。
创新观点:
本文提出的通过I2C 存储器实现TMS320C6455 的引导装载的方法能够简化系统的设计,缩短系统的开发时间。同时可以推广到TI 公司其它系列的DSP 芯片,具有广泛的应用价值。