基于TMS320F2812的远程在线升级设计与实现

时间:2022-09-02 03:38:01

基于TMS320F2812的远程在线升级设计与实现

【摘要】TMS320F2812已在控制领域得到广泛应用,但还没有详细具有可操作性的在线升级资料可查。本文在工程实践的基础上提出了一种基于SCI串口的远程在线升级方法,大大提高了产品的可维护性与扩展性,对于工程人员有很强的指导意义。

【关键词】在线升级;上位机软件;底层软件;API

1.引言

TMS320F2812(以下简称F2812)是美国德州仪器公司(TI)的32位定点数字信号处理器(DSP),主要应用于逆变器控制、电机控制等领域。F2812片内拥有高达128 KBx16位的F1ash程序存储器,可以满足大多数程序存储需要,将程序烧写到片内Flash的最简便方法就是利用TI的烧写插件通过JTAG进行。但在实际工程应用中,产品交付后往往需要在不拆盖的情况下对软件进行升级,所以远程在线升级功能是对产品设计的基本要求。F2812虽然已在控制领域得到广泛应用,但关于其在线升级的具有可操作性的详细设计还没有相关资料可查。远程在线升级不能通过JTAG口实现,因为JTAG的线引到外面后容易受到干扰而使程序跑飞。本文提出一种通过SCI的远程在线升级方法,详细介绍了其设计方法与操作步骤,并已在工程项目中验证了该方法的可实施性。本文针对具有一定DSP2812开发经验的工程人员设计编写,所以对于一些DSP基础知识不涉及。

2.总体思路

TI代码产生工具所产生的目标文件是一种COFF文件格式,即out文件。数据在COFF格式文件中以段形式形成,不同的段存放不同类型的内容。应用中通过编写连接器命令文件(.cmd)将这些段正确地分配到DSP的地址空间,DSP集成开发环境CCS经编译链接之后。生成out文件和map文件,map文件详细描述了cmd文件中定义的各段起始地址以及使用长度。COFF文件格式DSP能够识别,但不能直接烧写到Flash,必须将out文件转换为Flash能识别的数据格式,即hex的数据文件。所以实现远程在线升级的软件分为上位机软件和DSP底层软件。上位机软件主要用于out文件的格式转换和数据传输等;而底层软件主要将串口发送的数据烧写至Flash。F2812每次上电复位,先运行DSP底层软件,判断是否需要重新烧写Flash。若需要,则将串口发送的目标代码烧写至F2812片内Flash指定扇区;否则将继续执行原有的用户目标代码。

3.上位机软件设计

上位机软件主要实现人机界面转换,完成用户程序解析等工作,可使用VC++或者LabView设计编写。本设计中上位机软件实现以下功能:启动在线升级功能,转换out文件,传输hex格式数据。启动在线升级和传输数据的命令,用户可根据实际应用制定相应的通讯协议,比如同步字的设置、命令字的设置及每次传送字节的个数等。下面主要介绍一下out文件的转换方法。

3.1 out文件转换

利用TI公司提供的生成工具hex2000可以将out文件转换为可以直接烧写到FLASH的hex文件格式,hex文件格式包括ASCII-Hex、Intel、TI-Txt等格式,详细介绍见TI的SPRU513C参考文献。hex2000工具在CCS中附带,路径为CCS安装根目录/CCStudio_3.3/c2000/cgtools/bin/hex2000,要正确使用hex2000需要调用相应的转换命令,为方便起见一般用到的命令行编写成一个命令批处理文件,在转换时直接调用。假如批处理文件名为zample.cmd,内容为:

dspprog.out//要转换的out文件;

-map dspprog.map//生成的map文件名;

-o dspprog.hex//生成的16进制文件名;

-memwidth 16//DSP存储器的数据宽度;

-romwidth 16//外接flash的数据宽度;

-a//要转换的hex格式。

3.2 Hex2000使用步骤

1)将out文件、hex2000与命令批处理文件zample.cmd放在同一个目录下,假如在E:YY目录下;

2)点击“程序-附件-命令提示符”进入DOS环境;

3)进入E:YY目录;

4)输入hex2000 zample.cmd按回车确认键,即生成.hex文件和.map文件。

生成的文件内容格式如下:

其中3d8000为该段代码存放的起始地址,例如FE 02应存放在3d8000地址中,96 41应存放在3d8001地址中。

4.DSP底层软件

DSP底层软件主要是根据上位机传来的命令进行相应操作,若启动在线升级则进行擦除flash、写flash或进行校验操作;否则就执行原目标代码。远程在线升级可以将代码烧写到外部或内部Flash,但由于代码在外部空间运行容易受到干扰,内部空间够用的情况下,考虑直接将代码写在内部运行。本节主要介绍烧写F2812内部flash的方法与步骤。

烧写F2812内部flash可以使用TI提供的API函数库烧写技术,API函数库烧写技术是利用TI公司的编程算法。该算法定义良好,操作简单,可以脱离烧写插件运行。要使用API函数,需要找到C:tidcs:c28:F2812:Flash28_API:Flash2812_API_V210文件夹,此文件夹里有API需要的头文件和库文件。使用SPI函数烧写内部flash的具体操作步骤如下:

1)设置头文件Flash281x_API_Config.h中时钟参数,并将其添加在工程中。根据实际使用选择CPU时钟频率,若时钟频率为150MHz,则使用如下定义。

#define CPU_RATE 6.667L//for a 150MHz CPU clock speed

2)将头文件Flash281x_API_Library.h添加在工程中。

3)将库文件Flash2812_API_V210.lib添加在工程中。

4)擦除flash函数为:Flash_Erase((SECTORB|SECTORC),&EraseStatus),其中SECTORB| SECTORC为擦除扇区,EraseStatus为返回状态,若为0则擦除成功。

5)烧写函数为:Flash_Program(Flash_ptr,Buffer,Length,&ProgStatus),其中Flash_ptr为烧写的内部flash起始地址,Buffer代码接收后暂时存放的起始地址,Length为代码长度,ProgStatus为返回状态,若为0则烧写成功。

6)校验函数为Flash_Verify(Flash_ptr,Buffer,Length,&VerifyStatus),其中Flash_ptr为烧写的内部flash起始地址,Buffer代码接收后暂时存放的起始地址,Length为代码长度,ProgStatus为返回状态,若为0则校验正确。

5.将API函数从FLASH中搬运到RAM中

由于F2812不能用flash的一个扇区去操作另一个扇区,不仅要把初始化flash寄存器的函数搬运到RAM中,API有关函数及文件也要搬运到RAM中运行。

具体操作步骤如下:

1)在命令文件中定义Flash28_API段和ramfuncs段。

6.结论

利用Flash远程在线烧写技术开发的试验程序,可以根据需求及时更新,提高了产品的可维护性和扩展性。为帮助工程技术人员在实际项目开发中尽快掌握此烧写方法,文中给出了关键部分程序。最后再强调一下注意事项:1)由于API烧写函数Flash_Program()格式要求,通过串口接收的代码要先存放在RAM地址中,调用函数时再写到内部flash中;2)代码尽量不要在外部DSP外部空间运行,程序容易受干扰跑飞;3)API相关代码必须搬运到RAM中运行,否则会对片内flash造成损坏。

参考文献

[1]陶维青,任谦.通过串口通讯实现TMS320F2812的软件更新[J].合肥工业大学学报,2008,4.

[2]TI.TMS320F2810,TMS320F2811 and TMS320F2812 Flash APIS.2005,8.

[3]TI.Hex Conversion Utility Description.2007,11.

作者简介:姚秀娟,西南技术物理研究所工程师,研究方向:图像导引头伺服控制系统研究与设计。

上一篇:数据融合技术在船舶中的应用 下一篇:TMS320C64x系列DSP的16bit Flash的启动设计