基于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的地址空间,DSPapi设计集成开发环境CCS经编译链接之后。生成out文件和map文件,map文件详细描述了cmd文件中定义的各段起始地址以及使用长度。COFF文件格式DSP能够识别,但不能直接烧写到Flash,必须将out文件转换为Flash能识别的数据格式,即hex的数据文件。所以实现远程在线升级的软件分为上位机软件和DSP底层软件。上位机软件主要用于out文件的格式转换和数据传输等;而底层软件主要将串口发送的数据烧写至FlashF2812每次上电复位,先运行DSP底层软件,判断是否需要重新烧写Flash。若需要,则将串口发送的目标代码烧写至F2812片内Flash指定扇区;否则将继续执行原有的用户目标代码。
3.上位机软件设计
上位机软件主要实现人机界面转换,完成用户程序解析等工作,可使用VC++或者LabView设计编写。本设计中上位机软件实现以下功能:启动在线升级功能,转换out文件,传输hex格式数据。启动在线升级和传输数据的命令,用户可根据实际应用制定相应的通讯协议,比如同步字的设置、命令字的设置及每次传送字节的个数等。下面主要介绍一下out文件的转换方法。
3.1 out文件转换
利用TI公司提供的生成工具hex2000可以将out文件转换为可以直接烧写到FLASHhex文件格式,hex文件格式包括ASCII-HexIntelTI-Txt等格式,详细介绍见TISPRU513C参考文献。hex2000工具在CCS中附带,路径为CCS安装根目录/CCStudio_3.3/c2000/cgtools/bin/hex2000,要正确使用hex2000需要调用相应的转换命令,为方便起见一般用到的命令行编写成一个命令批处理文件,在转换时直接调用。假如批处理文件名为d,内容为:
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与命令批处理文件d放在同一个目录下,假如在EYY目录下;
2)点击程序-附件-命令提示符进入DOS环境;
3)进入EYY目录;
4)输入d按回车确认键,即生成.hex文件和.map文件。
生成的文件内容格式如下:
其中3d8000为该段代码存放的起始地址,例如FE 02应存放在3d8000地址中,96 41应存放在3d8001地址中。
4.DSP底层软件
DSP底层软件主要是根据上位机传来的命令进行相应操作,若启动在线升级则进行擦除flash、写flash或进行校验操作;否则就执行原目标代码。远程在线升级可以将代码烧写到外部或内部Flash,但由于代码在外部空间运行容易受到干扰,内部空间够用的情况下,考虑直接将代码写在内部运行。本节主要介绍烧写F2812内部flash的方法与步骤。
烧写F2812内部flash可以使用TI提供的API函数库烧写技术,API函数库烧写技术是利用TI公司的编程算法。该算法定义良好,操作简单,可以脱离烧写插件运行。要使用API函数,需要到Ctidcsc28F2812Flash28_APIFlash2812_API_V210文件夹,此文件夹里有API需要的头文件和库文件。使用SPI函数烧写内部flash的具体操作步骤如下:
1)设置头文件Flash281x_API_Config.h中时钟参数,并将其添加在工程中。根据实际使用
选择CPU时钟频率,若时钟频率为150MHz,则使用如下定义。
#define CPU_RATE 6.667L//for a 150MHz CPU clock speed2)将头文件Flash281x_API_Library.h添加在工程中。
3)将库文件Flash2812_API_V210.lib添加在工程中。
4)擦除flash函数为:Flash_Erase((SECTORB|SECTORC),&EraseStatus),其中SECTORB| SECTORC为擦除扇区,EraseStatus为返回状态,若为0则擦除成功。
5)烧写函数为:Flash_ProgramFlash_ptrBufferLength&ProgStatus),其中Flash_ptr为烧写的内部flash起始地址,Buffer代码接收后暂时存放的起始地址,Length为代码长度,ProgStatus为返回状态,若为0则烧写成功。
6)校验函数为Flash_VerifyFlash_ptrBufferLength&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外部空间运行,程序容易受干扰跑飞;3API相关代码必须搬运到RAM中运行,否则会对片内flash造成损坏。
参考文献
[1]陶维青,任谦.通过串口通讯实现TMS320F2812的软件更新[J].合肥工业大学学报,20084.
[2]TI.TMS320F2810TMS320F2811 and TMS320F2812 Flash APIS.20058.
[3]TI.Hex Conversion Utility Description.200711.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。