DSP系统开发过程中应用程序的引导加载方法研究
摘要:本文以TI公司高速数字信号处理器TMS320VC33和AMD公司的AM29LV800B为例,分析了DSP中Bootloader引导加载的机理,详细介绍了DSP系统开发过程中应用程序的引导加载方法,并给出了实例说明。实践表明,该方法具有很强的实用性和典型性。
关键词: TMS320VC33 FLASH 引导加载
1、 引言
在DSP系统的开发中,DSP系统的引导加载是极为重要的一环,使用FLASH实现DSP系统的在线编程具有多方面的优点,代表着引导加载方法的发展方向。本文立足实际经验,对DSP的FLASH加载流程进行阐述,并较为详细的介绍了基于FLASH AM29LV800B的在线编程加载方法,研究了在线烧写应用程序的方法以及应用中的注意事项。
FLASH 存储器是在EPROM和EEPROM的基础上发展起来的一种高密度、非易失性电可擦写存储器,在掉电情况下仍能保证数据不丢失,并能够在不离开电路板或数据设备的情况下实施擦除和再编程操作。具有结构简单、维护便利、存取速度快、对环境适应能力强等优点,而且单位存储比特的价格比传统的EPROM要低,十分适合于低功耗,小尺寸和高性能的便携式系统,也可以利用现成的DSP通过软件编程来实现同样的功能。使用FLASH的另外一个突出优点是它可以实现在线编程,这样就可以避免使用EPROM反复插拔产生的一些问题,该优点在系统的调试阶段尤为明显。
2、 Boot loader引导装载机理
在VC33系统上电或手动复位期间,当MCBL/MP管脚为低时,复位后VC33从片外地址0000H开始执行程序,此处的程序存储器必须是32位的;当此管脚为高时,VC33调用片内固化的引导程序,从片外某一地址将一定格式的数据(即用户代码)拼装后装入片内或片外的32位存储器,然后VC33跳到拼好的32位存储器的某一指定地址,开始执行那里的指令。
当VC33检测到MCBL/MP管脚为高时,将依次检测/INT3、/INT0、/INT1、/INT2管脚,如图1所示,根据这些管脚的电平来决定引导方式和引导地址。
图1 VC33程序引导流程图
本系统中,设计VC33从BOOT2即400000H处加载程序,因为只用了两个外部中断/INT0和/INT2,所以直接将/INT1接GND(低电平),/INT3接+3.3V(高电平),并且保证/INT0在上电复位时为高电平。
3、 应用FLASH实现在线编程的硬件连接
FLASH AM29LV800B数据线和地址线分别和DSP的外部数据和地址总线相连,AM29LV800B的/OE、/WE信号分别接由CPLD综合处理的信号,DSP和FLASH的连接示意图如图2所示。、
图2 TMS320VC33与AM29LV800B的连接示意图
逻辑关系如下所示:其中的VC33_ R/ W是它本身的读/写信号,VC33_ 为DSP本身的片选信号,它们都是DSP给出的存储器接口信号:
接DSP的 管脚,在这个系统中,将AM29LV800B映射到400000-7FFFFF的一段空间内。
4、系统引导表的建立
建立系统引导表的步骤为:
(1)编译文件。在CC开发环境下用C语言及汇编语言写完程序代码后,对源程序进行编译;
(2)链接文件。编写链接命令文件.cmd,该文件编写的正确与否直接影响到引导装载能否成功;
(3)生成hex文件。在CC开发环境下,Rebuld all后生成可执行文件(即.out文件),然后利用转换工具生成Hex文件[3]。转换后的Hex文件即是引导表的内容,引导表包含程序执行的入口地址、程序存放的目的地址、用户程序及用户程序块长度;
(4)将生成的Hex文件通过编程器按照格式要求处理后通过在线编程把文件写入到FLASH。
5、文件的格式转化
TI 为TMS320C3X 提供的代码格式转换器是HEX30. EXE,其功能是将链接器生成的
. out 文件(COFF 文件格式) 转化为其他格式的文件,以便于烧写FLASH。由于Intel 格式的文件容易处理,所以将. out文件转换为Intel MCS - 86 目标文件格式。根据要求编辑格式转换使用的CMD文件,以下是一个完整的CMD文件示例:
Vc33.out /*用户代码所生成的目标文件名*/
-o vc33.hex /*转换成为16进制代码后的文件名*/
-map vc33.map /*生成映射文件*/
-i /*生成Intel MCS-86格式的文件*/
-e 0x800413 /*用户代码的入口地址,根据实际定义*/
-boot /*生成Intel MCS-86格式的文件*/
-bootorg 0x400000 /*程序执行的起始地址,根据实际定义*/
-cg 0x10f8 /*控制寄存器值*/
-romwidth 8 /*程序存储器的宽度*/
-memwidth 8 /*数据存储器的宽度*/
MEMORY /*定义目标系统的存储器*/
{
RAM : o = 800000h,l = 80000h /*定义用户代码起始地址及长度*/
}
使用该CMD文件运行HEX30. EXE即可将. out 文件转化为INTEL格式的数据文件。需要注意的是,每次源文件的修改可能会引起程序入口地址的改变,因此重新编译时,需要对cmd文件进行相应修改。
6、生成准备写入FLASH 的程序数据文件
前面生成的Intel MCS - 86 文件,可以直接利用编程器向EPROM 中烧制使用,但是要在FLASH中应用还需要一定的处理。考虑到经过上面步骤中通过CMD 文件的配置,在Intel MCS – 86文件中已经具备了Bootloader要读取的程序头(Boot Table),因此,我们只需要根据Intel MCS – 86 文件格式,重新组织这些数据,将其变成可以写入到FLASH中的程序数据。查看Intel MCS – 86文件格式可以知道,文件中每个记录以九个字符的前缀开始,还有两个字符的累加检查后缀。
可以看出:自左向右第10列才是引导表的实际内容,而每行最后两个ASCII码是校验码,因此,每行的前9个ASCII码和最后两个ASCII码都是描述信息,而这些是我们不需要的。所以需要把这些前缀和后缀去掉才能写入到Flash。
去掉前缀和后缀的方法很多,如果hex文件内容比较多,则需要编写程序对它进行重组。但是对于大多数用户来说,这种方法的实用性不强。在此处介绍一种简洁方便的方法,其过程是Uedit32的环境下打开需要处理的hex文件,然后利用工具栏中行列下面的行列模式,可以手动快捷的选中任意列的文件,即可方便地去除不需要的前缀和后缀。
7、结语
本文的创新点是从工程应用的角度阐述DSP的FLASH引导加载的实现方法,并恰当的选用该领域的典型器件来详细、系统的说明,另外,为体现典型性,本文没有过多涉及相关的硬件设计,而是关注其中的共性问题并提供相应的解决措施,因此,文中所介绍的方法可以为不同情况下的程序加载过程提供参考。
|