DSP 的IC 引导装载方法的研究与实现

发布时间:2010-11-27 12:40    发布者:designer
关键词: dsp , 引导装载
DSP 芯片的片上引导装载程序(Bootloader) 用于在系统上电时将用户程序从外部非易失性慢速存储器(如FLASH 等)或外部控制器(如ARM 等) 中装载到片内或者片外的高速存储器中高速运行。DSP 芯片一般都提供多种引导装载模式,如Host 引导装载、EMIF 引导装载、I2C 引导装载、Serial RapidIO 引导装载等。相比其它几种模式而言,I2C 引导装载具有体积小、功耗低、连接简单等优点。本文以TI 公司的DSP 芯片TMS320C6455(以下简称C6455)为例,详细介绍了I2C 引导装载模式的实现步骤,并构建了一个小系统验证引导装载的实现过程。

1 C6455 的引导装载模式介绍

C6455 的引导装载模式由引导模式管脚BOOTMODE[3:0]决定。在DSP 复位时上述四个管脚的不同状态对应着不同的引导装载模式,具体如表1 所示。





对于主I2C 引导装载模式,DSP 作为I2C 总线上的主设备,在复位后引导装载程序会按照引导表的参数从外部I2C EEPROM 或者其它I2C 总线从设备读取数据到相应的目的地址完成引导过程。引导表指定了数据的目的地址和长度。

从I2C 引导装载与主I2C 引导装载类似,只是DSP 在复位后等待外部I2C 总线主设备按照引导表的参数将数据写入指定的地址。对于多DSP 的情况,可以用一个DSP 作为主设备,其它DSP 工作于从I2C 引导装载模式下。

本文使用主I2C 引导装载模式,构建的验证系统连接方式如图1 所示,使用的EEPROM 型号是Atmel 公司的AT24C1024B。为了保证系统能够稳定的工作,SCL 和SDA 信号都需要接上拉电阻





为了直观地验证引导装载的结果,我们使用一个简单的DSP 程序,通过C6455 的通用输入输出管脚GPIO2 不断输出高低交替的信号驱动一个发光二极管闪烁,相应的DSP 程序代码如下:

main()
{
initial(); // 初始化DSP
for(;;) GPIO2_toggle();//GPIO2 高低变化
}

2 I2C 引导装载的流程

如果在DSP 的复位过程中选择了主I2C 引导装载,也就是引导模式管脚BOOTMODE[3:0]配置为0101,那么DSP 的引导装载程序首先从外部I2C EEPROM 中读取128 个字节的引导参数。引导参数在EEPROM 中的起始偏移地址可由DSP 的配置管脚CFGGP[2:0]设定,即偏移地址为0x80×CFGGP[2:0],本文中CFGGP[2:0]是000 ,也就是引导参数的起始位置在EEPROM 的地址0 处。

引导装载程序根据读到的引导参数判断下一步该如何进行装载。引导参数表的主要内容如表2 所示,每一个参数占用两个字节,表中仅列出了主要的几个参数的定义。





Length 项指定了引导参数表的数据长度,固定为26 个字节。Checksum 项是所有26 个字节的校验和,如果是全0 表示不需要校验。Boot mode 项选择引导模式,本例中是0101, 主I2C 引导模式。

如果引导参数表中的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 使用,一个典型的配置文件如下所示(本例中的配置文件名为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 芯片,具有广泛的应用价值。
本文地址:https://www.eechina.com/thread-42249-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • 你仿真过吗?使用免费的MPLAB Mindi模拟仿真器降低设计风险
  • 想要避免发生灾难,就用MPLAB SiC电源仿真器!
  • 我们是Microchip
  • Cortex-M4外设 —— TC&TCC结合事件系统&DMA优化任务培训教程
  • 贸泽电子(Mouser)专区

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表