基于429总线的TMS320F2812程序的远程加载技术
2014-02-26黄旭东
黄旭东,韦 凯,钱 浩,陈 卫
(中国电子科技集团公司第58研究所,江苏 无锡 214035)
1 引言
TMS320F2812(以下简称F2812)是TI公司推出的C2000系列中性能最高的一款芯片。它既具有数字信号处理能力,又具有强大的事件管理能力和嵌入式控制能力,其片内自带有128 kB的flash,可以将程序写入片内flash运行,使用非常方便,自推出以来已在各行业得到广泛应用,在军用领域也得到了大量的应用。各类产品在运行使用过程中,难免都会需要对程序进行升级。在军用领域要求不拆机壳进行程序升级,现在基本采用RS232实现远程加载,因为RS232加载是F2812 Boot loader提供的一种标准加载方式。但是在军用领域,RS232通信方式是很少使用的,特别是航空领域大量使用429总线,单独为了实现远程加载增加RS232接口对主机来说是一种负担。本文提出一种基于429总线的F2812远程升级技术。
2 F2812引导方式及Flash编程简介[1]
2.1 F2812引导方式
在程序开发调试阶段,通常将编译链接产生的可执行代码装载到内部RAM中调试,一旦程序调试完成需要系统作为产品独立运行,就要求将应用程序固化到非易失性存储器中,系统上电后能够采用特定的引导操作自动运行应用程序。F2812上电后有6种不同的启动模式,主要通过GPIOF端口的4个引脚上电复位过程中所处的状态确定选择哪种方式启动,引导方式如表1所示。
表1 F2812引导方式
2.2 F2812的Flash编程
F2812的Flash编程过程及方法如图1所示,除了使用仿真器下载Flash程序和数据外,还可以通过SCI、SPI或GPIOB下载,除了JTAG外,其他下载方式都是经过boot loader完成。所有过程Flash的算法都需要搬移至片内RAM中,然后再实现对Flash的编程工作。
图1 F2812 Flash编程
3 基于429总线的F2812加载方案
正如2.2节中所述,只需将Flash的编程算法通过429总线搬移至片内RAM中,再将从429总线上接收到的数据传送给编程算法,算法执行后便可实现加载。因此我们需要重新编写自己的boot loader,并将boot代码固化在片内非易失性空间即可。TI的boot loader是固化在ROM中,我们无法更改,因此只能固化在flash中,在启动时从flash启动。
基于429总线的F2812加载方案如图2所示。429总线芯片通过XINTF接口与F2812相连,电脑通过USB转429通信板卡与下位机F2812进行通信。F2812上电运行后通过识别XBIO引脚状态,判定是执行用户代码还是继续执行boot代码从而重新加载Flash程序。当然如果用户系统端口资源紧张或是不想使用硬件识别方式也可以通过软件指令的方式判断是否需要重新加载Flash程序。本文按照硬件识别方式进行开发实现。
图2 基于429总线的F2812加载方案
4 基于429总线的F2812加载软硬件实现
4.1 硬件实现
429总线芯片选择HOLT公司的HI-3583,它集429协议与驱动器于一身,使用非常方便,通过本地总线即可实现与F2812的通信。与上位机通信采用欧比特公司的EMBC1000-USB429EI板卡实现,并在此基础上开发了上位机软件,实现将CCS编译生成的.out文件转换成HEX格式通过429总线逐一发送给F2812。
是否进行远程加载flash则是通过F2812的XBIO引脚进行控制。XBIO引脚没有内部上拉电阻,因此为了可靠性,在外部增加上拉电阻。当需要执行远程加载flash时,只需要将S1合上;在加载完成后打开S1重新上电或者复位F2812,F2812即会按照新程序执行。
4.2 软件实现
硬件电路搭建完毕后,即需要开始软件调试。首先调试了429通信,在确保429正常通信的前提下,将Flash281x_API融入429程序,即构成了boot loader。Flash281x_API使用TI提供的库函数[2],非常方便,其流程图如图3所示。
图3 boot loader流程图
为了日后调用方便,我们将boot loader编译生成库函数,这样在日后使用过程中只需调用库函数即可实现。Boot loader程序空间分配的.cmd文件如下所示,将启动代码固化在.ftext中,执行时不需要搬移至片内RAM,而关于Flash的编程算法则需要搬移至片内RAM运行。Boot loader程序的入口地址位于0x3f7ff6处,用户代码程序入口位于0x3f5ff6处。用户代码程序入口地址可根据用户需要随意调整,但是Boot loader程序入口地址不能随意调整,必须是0x3f7ff6,这与F2812的Flash启动操作流程相关,如图4所示。
图4 F2812 Flash启动流程
F2812 Flash的启动遵循从1到5这个步骤,当使用自己编写的boot loader时,第4步操作将发生变化,不再是调至_c_int00处,而是先跳转至用户启动代码处,如图5所示,执行用户boot loader代码后再跳转_c_int00处。
图5 F2812基于429总线的Flash启动流程
因此,在用户需要使用429总线加载程序时,每个程序中都必须带有基于429加载的函数库,这将占据一个sector段,对用户代码受到一定的影响,并且用户代码需要做出适当调整,主要表现为code_start段的位置,主要是.cmd中的以下这句:
BEGIN : origin = 0x3f5ff6, length = 0x000002
整个429总线加载Flash的算法库将占据sector A段,将用户可使用的flash大小进行了压缩,只有120 k,适用于用户代码不超过120 k的系统。
5 结论
本文从实际应用需求角度出发,提出了一种基于429总线远程加载F2812 Flash的方法,并详细阐述了软件设计开发的流程,有效解决了军用领域整机的需求,对其他类似系统的程序远程加载具有借鉴意义。
[1] 苏奎峰,吕强,等. TMS320F281x DSP原理及C程序开发[M]. 北京: 电子工业出版社,2008.
[2] TI. TMS320F281x Flash Programming API Revision Change[EB/OL]. www.ti.com.cn, 2005.