蒋炯炜,雷志军,于 鹏
(中国电子科技集团公司第58研究所,江苏无锡214072)
带看门狗喂狗功能的TMS320F2812远程加载技术
蒋炯炜,雷志军,于鹏
(中国电子科技集团公司第58研究所,江苏无锡214072)
为了提高系统可靠性,外部硬件看门狗电路的应用越来越广泛,但多数情况下,更新程序的同时无法完成喂狗操作,致使芯片不断复位,无法完成软件升级。在此基础上提出了一种基于RS232的带喂狗功能的TMS320F2812程序的远程加载方案,并详细阐述了实现过程。该方案不仅摆脱了Flash编程时对JTAG接口的依赖,而且对底层Flash API函数进行了修改,加入了喂狗程序,灵活性高,非常适用于军用领域,具有较大的实用价值。
F2812;RS232;看门狗;远程更新
随着科学技术的进步,系统的可靠性越来越受到重视,特别是军用领域的要求更苛刻。看门狗电路就是提高系统可靠性的一种关键技术,在出现死机、程序跑飞、程序有BUG导致不受控等情况出现时,可以起到复位系统的作用。看门狗电路分为内部看门狗(集成在处理器内部)和外部看门狗(基于硬件)。内部看门狗便于设计但容易失效,在程序运行失效时会禁止看门狗,导致系统的进一步混乱。而外部看门狗虽然需要占用额外的电路板空间,但其不仅可以监测VCC电源,在电压跌落到指定的门限以下时触发系统复位,而且完全不受内部程序失效的影响,对于可靠性要求较高的设计是不可或缺的。在大多数控制场合两者互相配合一起使用。
在系统可靠性提高的同时也带来一个新的问题。由于大多数自动化设备安装在野外或整机内部,若已安装的设备出现程序缺陷或用户提出新的需求,就需要对程序进行远程更新。以F2812为例,更新Flash程序的过程是个先擦后写的步骤。这一过程中程序擦除后内部看门狗被禁止了,但是外部看门狗却无法禁止,内部程序也不会再对其进行喂狗操作,导致的结果是外部复位芯片不断使F2812复位,无法完成程序的更新甚至有可能使芯片出现“锁死”,无法继续使用Flash空间。为了解决这一难题,本文提出一种基于RS232的加入了看门狗喂狗功能的远程升级技术。
在军用领域要求不拆机壳进行程序升级的前提下,目前最常用的是基于RS232的远程更新技术。该技术的核心是上电后通过F2812的SCI Boot模式[1~2]完成数据传输。SCI Boot的详细过程如图1所示。
为了实现这一复杂过程,需要上位机不断发送关键数据,TI公司也提供了相应的操作软件SDFlash,只是该软件并未公开源代码,而且更新程序过程中不具备喂狗功能。
图1 SCI Boot过程框图
3.1外部看门狗电路
以常用的复位电路MAX706为例,说明外部看门狗电路的原理。基本电路如图2所示。
图2 MAX706看门狗电路
复位芯片MAX706的RESET引脚连接至DSP的复位端口,WDI引脚与DSP的任一I/O端口相连,DSP通过定时翻转I/O口高低电平,即可完成喂狗操作。如果芯片出现死机等情况致使无法完成喂狗,芯片WDO引脚将输出低电平至MR引脚,触动芯片的手动复位功能,完成DSP的复位。具体看门狗时序如图3所示。此处的关键时间参数有:喂狗间隔时间典型值tWD=1.6 s,也就是说一旦停止喂狗1.6 s后,WDO将输出电平,引起复位。
图3 MAX706看门狗时序
3.2程序更新过程
要在F2812的Flash擦除和编写过程中实现喂狗功能,需要分三步走。
第一步:在喂狗间隔时间1.6 s内完成SCI Boot,上位机将程序A(具备喂狗功能)送入F2812执行;
第二步:程序A喂狗成功以后,需要接收来自上位机发送的程序B(带Flash的擦除和编程功能,同时具备喂狗功能);
第三步:程序B开始执行后,上位机再发送用户最终程序C,烧写到Flash中,完成升级。
需要注意的是,之所以将第一步和第二步分开是因为如果程序A和程序B合并将导致上位机向F2812的数据传输时间加长,极有可能无法在1.6 s内完成程序的传输。第一步开始到第三步结束,整个过程中都具备喂狗过程。具体流程如图4所示。
图4 程序更新过程框图
3.3技术难点
如3.2节所述,在整个程序更新过程中必须一直进行喂狗操作,典型的喂狗间隔时间值tWD=1.6 s,但是对于F2812来说150M系统时钟下,仅仅16 k Sector的擦除和编程典型时间分别为11 s和500 ms(参考TI手册SPRS174T)[3],如表1所示。即使更高性能的F28335的擦除和编程典型时间也分别需要2 s和500 ms(参考TI手册SPRS439M),如表2所示。
很显然,编程时间满足要求,擦除时间大于1.6 s,直接调用TI提供的API函数进行Flash的更新肯定会失败,因此需要修改底层API函数,将看门狗程序加入Flash的擦除扇区过程。
3.4解决措施
由于TI公司并未公开F2812的库文件内的函数源码,因此需要通过反汇编将API函数提取出来。
首先,通过CCS建立一个新的工程,工程中包含头文件Flash281x_API_Config.h、Flash281x_API_ Library.h和库文件Flash2812_API_V210.lib[4]。利用API函数Flash_Erase(Uint16 SectorMask,FLASH_ST* FEraseStat)编写一个擦除整个Flash扇区的主函数,然后通过CCS自带的反汇编工具将整个工程的汇编代码一段一段提取出来。
其次,整理汇编代码的结构,找到加入喂狗程序的地址空间。通过CCS提取出来的汇编代码并不能直接使用,不仅语法存在问题,而且相互调用的子函数名称和标号也需要重新定义。更重要的是汇编代码的函数地址是固定的,一旦向函数中增加删减语句或是改变指令都会使地址发生变化,导致函数之间调用失败。因此,需要分析函数内部结构,删除一些不影响功能的语句,插入喂狗的汇编代码同时保证函数地址不发生变化。
表1 150M下F2812-Flash擦写时间
表2 150M下F28335-Flash擦写时间
最后,将汇编文件打包成一个.asm文件加入工程中,执行程序B时调用即可完成扇区的擦除。
CCS需要预先编译好程序A和程序B并转化成特定的格式。上电后,针对SCI Boot模式上位机不断发送关键字符A,若收到F2812返回字符A即握手成功,否则超时连接失败[5]。握手以后就可以按照图4的流程进行Flash程序更新。
如图5所示为Flash程序更新过程,操作简单,建立连接成功后,只需选择编译生成的.out文件,点击更新程序即可。内部采用了分块更新方式,具体更新状态也可从上位机上反映出来。
图5 Flash程序更新过程
本文根据用户实际需求,提出了一种带看门狗喂狗功能的更新F2812 Flash程序的方法,该方法通过反汇编修改了TI的底层API函数,完成了功能扩展并阐述了软件设计开发的流程。实际测试成功并已经在用户处得到广泛使用,对其他类似系统的程序远程加载具有借鉴意义。
[1]TMS320F28xSerialCommunicationsInterface(SCI)Reference Guide(Rev.B)[P].
[2]沈润,张喆.基于串口的TMS320F28335应用程序在线升级技术的应用[J].化工自动化及仪表,2015.
[3]TMS320F281x Data Sheet(Rev.L)[P].
[4]TI.TMS320F281x Flash Programming API Revision Change[EB/OL].2005,www.ti.com.cn.
[5]王敏,黄站华,孙秋实,等.DSP系统程序远程更新的研究与实现[J].计算机工程与应用,2012.
A Technology of Remote Flash Programming to TMS320F2812 with Watchdog-feeding Function
JIANG Jiongwei,LEI Zhijun,YU Peng
(China Electronics Technology Group Corporation No.58 Research Institute,Wuxi 214035,China)
In order to improve system reliability,external hardware watchdog is increasingly used.But in most cases,the update operation cannot be implemented while feeding the watchdog,which incurs constant system resetting.A technology of remote flash programming to TMS320F2812 based on RS232 Interface is proposed with detailed execution process.The technology modifies the underlying Flash API function and enables programming while feeding the watchdog.This method is applicable for military use.
F2812;RS232;watchdog;remote flash programming
TN402
A
1681-1070(2016)10-0023-04
2016-5-25
蒋炯炜(1986—),男,江苏无锡人,硕士,助理工程师,就职于中国电子科技集团公司第58研究所,研究方向为DSP芯片的应用与测试。