1前言
TMS320F281x处理器(以下简称F281x)是美国德州仪器公司(TI)的32位定点数字信号处理器(DSP),主要应用于伺服电机控制等领域。随着近年来电动舵系统在众多领域的使用,F281x处理器在数字控制领域得到广泛应用,但还没有详细具有可实施性的程序在线升级资料可供参考。F281x片内拥有128 KBx16位的F1ash存储器数据区,可以满足绝大多数程序及数据的存储需求,将程序烧写到片内Flash的最简便方法可利用TI的烧写插件通过JTAG进行,但在实际工程应用中,产品交付后往往需要在不拆盖的情况下对软件进行升级,且JTAG的线引到外面后容易受到干扰而使程序跑飞,所以远程在线升级功能是对电动舵系统研制生产的重要内容。
本文根据电动舵系统的工作特点,提出一种通过RS-485、1553B等总线接口的远程在线升级方法,详细介绍了其设计方法与操作步骤,并已在工程项目中验证了该方法的可实施性。
2设计思路
通过TI公司CCS3.3编译的代码产生工具所产生的目标文件是一种COFF文件格式,即.out文件。数据在COFF格式文件中以段形式形成,不同的段存放不同类型的内容。应用中通过编写连接器命令文件(.cmd)将这些段正确地分配到DSP的地址空间,DSP集成开发环境CCS经编译链接之后。生成.out文件和.map文件,.map文件详细描述了.cmd文件中定义的各段起始地址以及使用长度。COFF文件格式DSP能够识别,但不能直接烧写到Flash存储器,必须将.out文件转换为DSP能识别的数据格式,即hex的数据文件。
实现远程在线升级的软件分为上位机软件、DSP底层软件和DSP内部升级模块。上位机软件主要用于.out文件的格式转换和数据传输等,而底层软件主要将串口发送的数据烧写至Flash。F281x每次上电复位,先运行DSP底层软件,判断是否需要重新烧写Flash。若需要,则将串口发送的目标代码或舵系统参数烧写至F281x片内Flash指定扇区,否则将继续执行原有的用户目标代码。DSP内部升级模块主要用于接收在线升级数据,控制在线更新配置开关状态和完成Flash存储器的擦除与写入操作。
3设计与实现
3.1可执行文件转换方法
上位机软件主要实现人机界面转换,完成用户程序解析等工作,可使用VC++或者Labwindows设计编写。上位机软件实现以下功能:通信状态检查,转换.out文件,传输hex格式数据。
可利用TI公司提供的hex2000生成工具将.out文件转换为可以直接烧写到FLASH的hex文件格式,hex文件格式包括ASCII-Hex、Intel、TI-Txt等格式。hex2000生成工具在CCS 3.3安装包中附带。
3.2DSP底层软件实现
F281x底层软件主要是根据上位机传来的命令进行相应操作,若启动在线升级则进行擦除flash、写flash或进行校验操作;否则就执行原目标代码。远程在线升级可以将代码烧写到F281X内部Flash,烧写F281x内部flash可以使用TI提供的API函数库烧写技术,API函数库烧写技术是利用TI公司的编程算法。该算法定义良好,操作简单,可以脱离烧写插件运行。API烧写算法包含:
a)擦除flash函数:Flash_Erase(SectorMask, FEraseStat),其中SectorMask为擦除扇区,FEraseStat为返回状态,若为0则擦除成功,若为1则擦除失败。
b)烧写函数:Flash_Program(Flash_ptr,Buffer,Length,&ProgStatus),其中Flash_ptr为烧写的内部flash起始地址,Buffer代码接收后暂时存放的起始地址,Length为代码长度,ProgStatus为返回状态,若为0则烧写成功,若为1则烧写失败。
c)校验函数:Flash_Verify(Flash_ptr,Buffer,Length,&VerifyStatus) ,其中Flash_ptr为烧写的内部flash起始地址,Buffer代码接收后暂时存放的起始地址,Length为代码长度,ProgStatus为返回状态,若为0则校验正确,若为1则校验错误。
3.3将API函数从FLASH中搬运到RAM中
由于F281x不能用flash的一个扇区去操作另一个扇区,不仅要把初始化flash寄存器的函数搬运到RAM中,API有关函数及文件也要搬运到RAM中运行。
3.4程序上传更新
a)在进行程序上传更新前应先擦除DSP内部Flash存储器单元的ABCD区,但不能擦除DSP内部Flash存储器单元的其它数据存储区。
擦除Flash存储区具体流程见图1中(a)图所示。
图1工作流程
b)按3.1节方法将可执行文件转换为hex格式数据,转换后的数据较大,需将代码段分多次写入到Flash存储器的ABCD数据区内,完成程序代码的更新。
程序数据写入Flash存储区具体流程图1中(b)图所示。
3.5 舵系统参数上传更新
通常,舵系统的参数包括舵系统的控制参数、电位计的线性度参数以及电气零位参数等,相比电液舵机和模拟式控制的电动舵机利用电路调整方式,采用数字式控制器的电动舵机可以通过软件设置电位计的线性度、控制参数和电气零位等参数,舵机研制生产中可以采用参数上传更新,简化舵系统调试流程,大大提高了产品调试效率。
在进行舵系统参数上传更新前应先擦除DSP内部Flash存储器单元的E区(以E区为例),但不能擦除DSP内部Flash存储器单元ABCD数据存储区,在Flash存储器单元的E区擦除完成后,将上传参数写入Flash存储器单元的E区,完成舵系统参数上传更新操作。
舵系统参数上传更新具体流程图1中(c)图所示
4结论
本文根据电动舵系统的研制工作实践基础,提出了一种基于F281x的远程在线升级方法,利用Flash远程在线升级技术,可以根据产品实际需求及时更新,提高了产品的可维护性和扩展性,该技术能在一定程度上提高我厂电动舵系统的研制生产效率,同时,使我厂掌握了电动舵系统研制中的一项重要技术,提升了我厂在电动舵系统领域的竞争力。
为便于我厂设计人员在项目研发中尽快掌握应用此更新技术,本文给出了关键部分程序及流程。在实际应用中应注意事项:
a)上传的代码尽量不要在DSP空间运行,程序容易受干扰跑飞;
b)调用F281x的API相关代码必须搬运到RAM中运行,否则会对片内Flash造成损坏;
c)在线升级过程中确保应DSP供电正常,否则可能会对片内Flash造成损坏。
参考文献:
[1] TMS320F281x Control and Interrupts Reference Guide (Rev.A).Texas Instruments. 12 Oct 2012.
[2] TMS320F281x Boot ROM Reference Guide (Rev.B).Texas Instruments. 05 Nov 2004.
[3] 《TMS320X281x DSP原理及C程序开发》.苏奎峰,吕强,等.北京:北京航空航天大学出版社,2011.