[ZA]TMS3222LASH的应用和远程更新029_第1页
[ZA]TMS3222LASH的应用和远程更新029_第2页
[ZA]TMS3222LASH的应用和远程更新029_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CTGS-资料文件TMS320F2812FLASH的应用和远程更新1、概述由于电力系统自动化设备大多安装在野外,给程序维护工作带来了极大的困难。已安装的设备若出现程序缺陷,或者用户提出新的需求,需要对程序进行更新。传统的维护方法均是到实地取下设备,通过仿真器进行烧写维护,此方法效率低,作业危险性大。考虑到多数设备具有通信信道,远程通信更新程序是智能设备的必然趋势和要求。TMS320F281片内有18k*16RAM以及128k*16Flash资源,可以用来存放程序代码、数据表格以及用户信息,可多次擦除和写入数据,并且片内带有电荷泵,使其可在正常工作电压下对FLASH的逐段擦写。TMS320F28

2、1具备开发IAP系统的硬件条件,通过在Flash自定义的段中放置升级代码:擦写Flash、读取存储器和通信程序。升级时运行这段代码擦写Flash,更新应用程序,实现在线编程。2、实现原理和步骤第一步将需要更新的程序,经过CCS编译环境生成.out文件,然后利用TI提供的转换工具将.out文件转换为16进制数据流文件,再通过上位机程序将数据流文件通过串口发送,然后经过各种传输通道如GPR删络,最后通过TMS320F2812勺串口,把需要升级的新代码数据流文件先存到外部扩展RAM芯片或FLASH芯片中,经过校验无误,才启动下位机升级程序,将外部RAM或FLASH中代码数据搬移到相应的片内FLASH

3、段中,实现程序的更新。3、更新程序数据流文件的创建由于在CCS3.1开发环境中最后生成的文件是.out格式,此文件只能在CCS环境下通过JATG口下载到DSP中。为了实现程序的串口更新,还要将.out格式的文件转化成能被DSPBootloader程序所能识别的引导表数据流格式。我们可以通过TI提供的数据转换工具Hex2000将.out文件转化成数据流文件。为此,需要编写批处理文件,此文件的作用就是指定引导表的格式。例如创建批处理文件build2812hex,内容是:RemoteUpdate.out/输入文件名-a/输出文件格式为txt-mapRemoteUpdate.map生成地址映射文件-o

4、RemoteUpdate.txt/输出文件名-boot/以TMS320F2812勺Bootloader标准格式生成数据流-sci8/8位模式,与电力规约中传输数据的字符宽度相符接着在cmd命令行内输入命令:即可生成RemoteUpdate.txt文件4、引导表数据流文件的下载上位机程序中最主要的功能就是分析解包数据流文件并将处理后的数据信息传给下位机,并控制程序更新的制作。CTGS-资料文件在分析解包数据流文件时,需要将RemoteUpdate.txt中的数据流文件内的每块程序块的大小和烧入FLASH的首地址等信息从RemoteUpdate.txt中提取出来,同时计算出暂时存入外扩存储器的相应

5、地址,存放在结构体中。上位机与设备终端的通讯采用电力规约(如05国电规约或IEC60870-5-101协议)的帧格式通讯规约的基础设计的。在读取数据流文件的相关信息并处理过之后,进入传输数据流文件的数据段部分,在此过程中PC通讯程序将数据段部分分段添加到通讯报文的数据部分,分成多帧的形式,通过串口发送。每帧都自带校验和,并且设备终端在收到数据并且确认正确后,将发送确认帧到上位机。上位机只有在收到确认帧后,才会继续发送下一帧数据,否则将重新传送该帧的数据,直到收到确认帧为止。待全部数据发送完后,通过将发送数据的总长度通过特定帧下传给终端设备,并与终端设备所接收到的数据总长度相互比较,若两者不等,

6、将全部重传,以此实现了总校验,提高了数据传输的正确性。5、下位机文件数据的接收终端设备接收到PC通过串口传输的数据流的地址和大小等信息时,同时将占据外扩存储资源(RAM或FLASH的相关的应用程序关闭,保证了下传的数据流不被破坏,并且覆盖了程序正常运行时存放在该资源上的数据。在接收到PC的第一帧的更新信息时,除了外部串口通讯的中断,会关闭其他外部的可屏蔽中断,保证了接收的数据段的正确性、完整性。由于将所有的需更新的数据均存放在外扩的RAM中,保证若在传输更新数据的过程中,终端设备断电或者是传输丢帧的情况发生,原运行系统将完全正常工作,不会受到任何影响。此时上位机会发现不对,只需再次发出更新信号

7、,并且重传所需更新的数据即可。这部分的功能的实现即是实现写外部RAM或FLASH的过程,下位机将收到的数据流根据其地址和大小信息,将数据写入外部RAM或FLASH。例如假设系统现在外扩了一片FLASH芯片SST39VF3202,需要将数据流信息保存在外部FLASH中,需要编写如下的函数,相关参数和制作请具体查阅SST39VF3202使用手册:intWriteSstflash(farUint16*pdata,Uint32wordadd,Uint16length);/writewordsintodeviceintEraseSstflashSector(Uint16sectornum);/Erase

8、onesector(2Kwords)intEraseSstFlashBlock(Uint16blocknum);/Eraseoneblock(32Kword)intEraseSstFlashChip(void);/ErasethewholechipvoidSuspendErase(void);/Temporarilysuspendonesector-eraseorblock-eraseintResumeErase(void);/Resumesuspendedsector-eraseorblock-eraseint16CheckToggleReady(Uint32wordadd,Uint32ti

9、meout);/WaituntilDQ6stopstoggling/写入SSTFLASH*pdata-数据缓存wordadd-字地址length-长度intWriteSstflash(farUint16*pdata,Uint32wordadd,Uint16length)Uint16sector,area;volatileUint16*pflash=(volatileUint16*)EXFLASH_ADD;2/6CTGS-资料文件if(wordadd+length>=CHIP_SIZE)returnFALSE;if(CheckToggleReady(0,SECTOR_ERASE_TIME)

10、=FALSE)/FLASHBUSY检测等待returnFALSE;sector=wordadd>>11;if(wordadd=(Uint32)sector*SECTOR_SIZE)/段首擦除EraseSstflashSector(sector);if(wordadd+length>=(Uint32)(sector+1)*SECTOR_SIZE)/数据跨段EraseSstflashSector(sector+1);area=wordadd>>19;/FLASH区域选择A0-A18wordadd&=(AERA_SIZE-1);while(length-)SET

11、_FLASH_AERA(0);*(volatileUint16*)(EXFLASH_ADD+0x5555)=0x00AA;/擦写控制字*(volatileUint16*)(EXFLASH_ADD+0x2AAA)=0x0055;*(volatileUint16*)(EXFLASH_ADD+0x5555)=0x00A0;SET_FLASH_AERA(area);*(pflash+wordadd+)=*pdata+;if(wordadd=AERA_SIZE)SET_FLASH_AERA(area+);wordadd=0;if(CheckToggleReady(wordadd,WORD_PROGRAM

12、E_TIME)=FALSE)/FLASHBUSY检测等待returnFALSE;returnTRUE;6、程序的更新实现CTGS-资料文件当下位机收到PC发来的程序更新命令以后,下位机开始执行程序更新,即将系统外部存储器中程序数据流写入到TMS320F2812的片内FLASH中。由于TMS320F2812片内FLASH不支持在其中一个扇区运行程序去擦出烧写其他扇区的制作,所以将外部存储器中的程序数据流写入TMS320F2812片内FLASH的制作必须在TMS320F2812片内RAM或外部RAM中运行。例如在*cmd文件中的SECTIONS段内添加如下代码,即可实现代码运行从FLASHJ段中转

13、移到RAMH02中运行。Flash28_API:-lFlash2812_API_V210.lib(.econst)-lFlash2812_API_V210.lib(.text)LOAD=FLASHJ,RUN=RAMH02,LOAD_START(_Flash28_API_LoadStart),LOAD_END(_Flash28_API_LoadEnd),RUN_START(_Flash28_API_RunStart),PAGE=0ramfuncs:LOAD=FLASHJ,RUN=RAMH02,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoa

14、dEnd),RUN_START(_RamfuncsRunStart),PAGE=07、片内FLASH的制作片内Flash烧写程序是boot程序的主要部分,程序可分为3部分:擦除Flash、向已擦除的Flash段写入代码、校验代码写入的正确性。Ti公司提供了专门用于制作TMS320F281片内Flash的API。要求了对TMS320F281片内Flash擦除的最小单位是页,不能单独擦除Flash的1个字或位。调用API函数库中的擦除函数Flash_Erase()可完成对Flash的擦除制作。调用API函数库中的编程函数Flash_Program()可完成对Flash的写制作。与此同时Ti所提供的

15、API函数能检测所擦除的Flash段是否越界等等,并且根据相应的不对返回不对状态信息。在对Flash写入代码段之后,可调用API中的Flash_Verify()函数对已经写入Flash的代码段和原始数据进行校验。通过调用TI的FLASHAPI库,编写了如下FLASH制作函数:函数名称功能描述voidCallFlashAPI();FLASH制作的核心函数,主要调用APIvoidError(Uint16Status);鉴别不对类型,并停止运行CTGS-资料文件voidMemCopy(Uint16*SourceAddr,Uint16*SourceEndAddr,Uint16*DestAddr);vo

16、idInitUpdate(void)初始化FLASH制作函数voidDataHexFunc(void)。FLASH制作主程序值得注意的是FLASH制作的相关函数在系统的应用中需要从FLASH中搬移到RAM中来运行,所以需要进行如下定义:#pragmaCODE_SECTION(Error,"ramfuncs");#pragmaCODE_SECTION(CallFlashAPI,"ramfuncs");利用#pragma定义将函数的入口地址定义在固定的位置ramfuncs,有利于系统的制作。应用中,系统需要将某些参数存入片内FLASH的某个段中,编写如下的C

17、allFlashAPI函数。voidCallFlashAPI(Param*Address)Uint16Status;Uint16*Flash_ptr;/PointertoalocationinflashUint16*Origin_ptr;/PointertoalocationinramUint32Length;intSector;Sector=SECTORJ;/将参数保存在J段Status=Flash_Erase(Sector,&EraseStatus);if(Status!=STATUS_SUCCESS)F2812_Error(Status);Origin_ptr=(Uint16*)Address;/参数所在的地址Length=sizeof(Param);/Flash_ptr=(Uint16*)0x3D8000;最后保存的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论