陆平林
(数据通信科学技术研究所,北京 100191)
DSP在线升级是指脱离集成开发环境,利用DSP系统已有的通道,在运行状态下对DSP软件进行升级,在线升级大大提高了DSP系统的可维护性和可扩展能力。DSP在线升级的一种方法是直接写Flash[1],DSP内原有应用程序加载到RAM上运行,升级文件直接写入Flash,覆盖原有应用程序,DSP复位后即可运行新的DSP程序。这种方法简单易行,但可靠性差,一旦升级文件有误,或升级过程中意外掉电,会造成系统瘫痪,需采用新的设计思路,实现可靠的在线升级功能。
实现 DSP的可靠在线升级的基本思路是:把DSP程序分为固化的用户引导程序 Userbootloader(区别于DSP厂商固化的bootloader)和可升级的应用程序App,Userbootloader程序在最初用仿真器或编程器写入,之后由 Userbootloader支持在线升级,有以下两种方案:
第一种方案是采用乒乓存储,原有DSP程序留有备份,升级程序和原有程序都存在Flash上,升级的同时在Flash置标志位,重启后Userbootloader通过读取标志,选择加载App[2-4]。这种方法需要有多余的Flash空间,可能会增加硬件成本。
第二种方案是 Userbootloader直接将新应用替换原有应用,升级完成后,加载 App到 RAM,跳转到应用入口执行[5-6]。对于这种方案,通常对App的引导是在加载App代码后跳到_c_int00[6],但因为Userbootloader和 App是两个不同工程,这样要求App工程在链接时,必须设置其_c_int00和Userbootloader工程的_c_int00运行地址一致,同时,App的中断向量表也需要进行重新定向。
基于C6205DSP的PCI-E卡,采用上面的第二种方案,提出了一种在线升级方法,对App的引导是在加载 App代码后,Userbootloader跳到地址 0开始执行,对App没有上述要求,提高了升级系统的通用性、灵活性和可维护性。
升级系统体系结构如图1所示,分为上位机应用、API接口、PCI-E卡驱动和PCI-E卡4个层次。上位机应用和API接口运行在用户空间,上位机应用包括升级程序和业务程序,API接口用于实现应用程序调用的接口规范;驱动运行在操作系统内核空间,提供了访问硬件的接口。PCI-E卡插在上位机的 PCI-E插槽中,上位机应用通过 API接口和PCI-E卡驱动与卡通信。
PCI-E卡硬件逻辑框如图2所示,其核心采用TI公司的 TMS320C6205。C6205是一款高性价比DSP,有 64 kByte的片内程序区 IPRAM(地址0-0x10000)和64 kByte的片内数据区IDRAM,带两个多通道缓冲串行口MCBSP,支持4个通道的DMA,外部存储器接口(EMIF,External Memory Interfaces)分成4块空间CE0~CE3,通过EMIF总线,可以方便的扩展外设。
按照硬件设计,DSP通过CE0连接SDRAM,通过CE1连接FLASH。其中FLASH大小为16 MByte,分为128个块(BLOCK),每个块128 kByte,支持以块为单位设置写保护。由于CE1只有4 MByte空间,为支持访问Flash全部空间,用CPLD控制Flash地址的高4 bit,Flash地址低20 bit和DSP直接相连。这样把Flash空间分为16个窗口,每个窗口1 MByte。当DSP要寻址Flash时,先向CPLD写入窗口号,再在窗口内取偏移。
DSP通过串口连接了 IC卡读卡器,Userbootloader程序通过判断IC卡类型可以决定是否进入升级状态。
FPGA和PCI-E接口芯片一起完成接口转换工作,实现上位机和DSP的通路。
硬件上将DSP配置成为从Flash启动方式。系统复位后,C6205自动将Flash开始的64 kByte代码拷贝到IPRAM,然后从IPRAM地址0开始执行程序。
Userbootloader和 App程序由两个完全独立的工程生成。最初在开发环境下用仿真器或 Flash编程器烧写Userbootloader和初始的FPGA配置数据,以后App就由Userbootloader和上位机程序控制进行升级。
Userbootloader从Flash起始地址0x1400000开始,DSP复位后首先运行Userbootloader。Userbootloader和初始FPGA配置数据所在的Flash前1 MByte空间设写保护,防止被意外写坏。Flash结构分配如图3所示。
PCI-E卡上电启动后,DSP加载运行Userbootloader。Userbootloader本身大小不到64 kByte,可以不对自己做二次引导[7]。Userbootloader先进行必要的硬件寄存器配置,然后读取初始的FPGA配置数据配置 FPGA,以提供上位机到 DSP的通路。Userbootloader的流程如图4所示。
DSP有两种工作状态,升级状态和应用状态。Userbootloader检测插入的IC卡类型,根据IC卡类型和对APP数据的校验结果来决定进入的工作状态。
未插入IC卡或插入的IC卡不是升级IC卡时,Userbootloader对App数据进行校验。若校验通过,Userbootloader从Flash地址0x150000开始拷贝App的前64 kByte(实际是0xFF00 Byte)到IPRAM,然后跳到地址0执行App。App做二次引导,将自己的其余代码拷贝到SDRAM运行,这样DSP进入应用状态。应用状态下,DSP内运行的是App程序,由上位机服务系统发起应用。
当检测到升级IC卡或者App校验不通过时,则进入升级状态。升级状态下,DSP内运行的是Userbootloader程序,由上位机升级系统发起应用。Userbootloader等待上位机的升级指令,接收到上位机的升级指令后开始升级,升级步骤如下:
1)擦除App。2)逐帧接收上位机发来的App数据,写入Flash。3)接收上位机发来的 App校验值,用来校验写入Flash的App。若校验通过,将校验值写入Flash固定位置,升级完成,否则上位机需重新发起升级。
完成升级后,拔走升级IC卡,复位DSP,即可令DSP进入升级后的应用状态。实现Userbootloader加载功能时需要注意的是:1)先将App代码数据从Flash读到SDRAM,再将代码从SDRAM拷贝到IPRAM。
2)数据从SDRAM拷贝到IPRAM必须用DMA,且此时DMA代码必须放入IPRAM内执行[8]。
3)Userbootloader 没有拷贝App前64 kByte的最后256 Byte,是因为Userbootloader 的DMA代码和最后的跳转语句,放在IPRAM的最后256 Byte空间。代码拷贝将Userbootloader的前面部分覆盖,但不能将正在执行的部分覆盖,否则DSP运行结果不可预料。
对App来说,Userbootloader对其做了DSP复位时硬件Bootloader做的动作。App的启动过程和没有Userbootloader时类似,前64 kByte也被加载到IPRAM,也从IPRAM地址0开始执行,App的中断向量表放在App的起始位置,运行时中断向量表从地址0开始,不需要重置。这样App的开发和没有Userbootloader时几乎一致,原来没有考虑在线升级的App可以很容易的改为支持在线升级,只需要注意以下几个地方:
1)App作二次引导时,注意其起始Flash地址不是0x1400000而是0x1500000。
2)App前64 kByte的最后256 Byte没有加载到IPRAM。不过未加载部分仅占 IPRAM 总容量不到0.4%,最后这部分的IPRAM App一般用不到。若App需要再利用这256 Byte,App可以自己将代码数据拷贝到这块区域。
3)根据需要,App的升级数据可以包括 FPGA配置数据,App可以在启动或其他适当的时候对FPGA进行重新配置,App需定义好FPGA配置数据在Flash上的偏移位置。
提出了一种对DSP程序进行在线升级的方法,用Userbootloade模仿硬件bootloader对App进行引导,对App的开发影响小,App不需要固定应用程序入口_c_int00的地址,也不需要做中断向量的动态重定位。基于TMS320C6205的PCI-E卡,设计并实现了在线升级系统。工程实践表明,该升级方法简便可靠,可以为其他嵌入式处理器升级系统开发提供参考。
在实际的类似应用中,根据具体情况,可以不使用IC卡,例如可以设计Userbootloader启动后等待一段时间,若这期间接收到上位机发出的升级指令则进入升级状态进行升级。
[1] 任利民.基于PCI卡的DSP程序在线升级技术研究[J].通信技术,2003(12):114-116.
[2] 石乃轩,冯伟,王健,等.基于TMS320VC55x DSP 在线升级的设计与实现[J].通信技术,2010,43(07):236-238.
[3] 杨达亮,陈军灵,张力成.DSP系统软件在线升级机制的研究和实现[J].电测与仪表,2006,43(01):60-62.
[4] 孙亚萍,张慧熙.一种新型 DSP 软件在线升级方法的研究与实现[J].微型机与应用,2010,29(05):72-74.
[5] 文军,王加懂.DSP程序在线编程的研究与实现[J].信息安全与通信保密,2007(08):193-195.
[6] 李鹏.DSP在线升级与资源优化再配置[J].计算机工程,2008,34(17):225-226.
[7] Texas Instruments. Creating a Second-Level Bootloader for FLASH Bootloading on TMS320C6000 Platform With Code Composer Studio [DB/OL].(2006-05-01)[2011-3-20]. http://focus.ti.com.cn/cn/lit/an/spra999a/spra999a.pdf.
[8] Texas Instruments.TMS320C620x/C670x DSP Program and Data Memory Controller/Direct Memory Access(DMA) Controller Reference Guide [DB/OL].(2004-09-09)[2011-3-20]. http://focus.ti.com.cn/cn/lit/an/spru577a/spra999a.pdf.