打印

DSP系统开发过程中应用程序的引导加载方法研究

[复制链接]
545|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Roses|  楼主 | 2019-2-28 13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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引导加载的实现方法,并恰当的选用该领域的典型器件来详细、系统的说明,另外,为体现典型性,本文没有过多涉及相关的硬件设计,而是关注其中的共性问题并提供相应的解决措施,因此,文中所介绍的方法可以为不同情况下的程序加载过程提供参考。

相关帖子

沙发
Roses|  楼主 | 2019-2-28 13:50 | 只看该作者
DSP系统开发过程中应用程序的引导加载方法研究

文档1.pdf

177.42 KB

使用特权

评论回复
板凳
vcvfvgvb| | 2019-2-28 19:23 | 只看该作者
现在基本上有通讯功能的产品都会加上引导加载功能,可以通过通讯接口进行程序升级

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

709

主题

1023

帖子

7

粉丝