付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式设备程序远程升级的设计与实现
0dsp的远程升级系统随着数字技术和电子技术的发展,嵌入式设备被广泛应用于多个领域。新技术的繁荣以及系统功能、性能和规模的客观现实的不断提高,以及系统的维护和更新要求。传统的升级方式是派技术人员到现场,用代码烧写工具在设备使用现场完成代码的升级工作,这样做的缺点是成本高昂,效率低下,给软件的更新和维护带来了难度。能进行远程升级和维护对未来嵌入式遥测遥控系统显得越来越重要。与上位机传统的通信媒介是RS232,RS485,USB,CAN总线,因为它们传输距离和成本的限制,使得这些方式在实际应用中略显不足;虽然网络技术为嵌入式设备的更新提供了长距离的传输能力,但是在网络无法到达的复杂环境应用时又暴露了它的局限性。通用无线分组业务(generalpacketradioserver,GPRS)的方便廉价使其成为首选通信方案。本文在研究DSP程序引导启动原理和FLASH烧写原理的基础上,结合GPRS通信技术,设计了一套DSP程序远程升级系统。该方法成功应用到了基于TMS320F2812DSP的航标灯遥控遥测系统上。1ccs2.2实现程序的远程升级在进行嵌入式系统开发时,系统调试完成后,一般都需要利用代码烧写工具,将经过开发工具生成的目标文件烧写到目标平台上。对于TI的DSP来说,开发工具是TI公司提供的CCS2.2开发平台,用户代码经过编译链接生成最终的目标文件(.out格式)。使用CCS2.2的烧写插件C2000-2.00-SA-to-UA-TI-FLASH2X.EXE,通过JTAG仿真器可以将代码烧写到目标DSP中。为了实现程序的远程升级,需要调整上面步骤中的代码生成和烧写两个步骤,同时需要增加代码数据的传输这一步骤。升级流程如图1所示。从流程图中可以看出,该远程升级系统涉及到了烧写代码生成、在线烧写、无线传输、复位自举等几项关键技术,下面逐一进行详细说明。2具体来说,该项目的实施2.1代码格式转换,输入程序代码格式2.1.1coff格式编写COFF(commonobjectfileformat)的全称是通用对象文件格式,它是一种很流行的对象文件格式。TI公司的编译工具CCS编译链接生成的代码就是以out为后缀的COFF格式文件,它有着复杂的结构,程序中的代码和数据是以段的形式组织的,为管理代码段和目标系统存储器提供更加有力和灵活的方法。基于COFF格式编写汇编程序或C语言程序时,不必为程序代码和变量指定目标地址,为程序编写和程序移植提供了极大的方便。但是这种格式的代码不能直接用于FLASH烧写,需要先将其转换成HEX文件。2.1.2ti-to-tgeHex文件是指十六进制文件,也就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示。具体格式有一下几种:ACII-hex,ExtenedTektronix,IntelMCS-86(Intel),MotorolaExorciser(Motorola-S),TI-Tagged,其中TI-Tagged格式只支持16位地址,对于寻址空间高达4M(22bit)空间的TMS320F2812来说是不太适用的,这里对其不予讨论。仅以Motorola-S为例给出具体格式,如图2所示。2.1.3hex文件到系统文件转换BIN文件是最纯粹的二进制机器代码,没有格式,或者说是“顺序格式”,按assemblycode顺序翻译成binarymachinecode。由于分析出来HEX文件中,数据域ASCII码表示的十六进制与二进制是一一对应的,这些二进制数据应该串行地保存在程序空间。本例中选用的平台是TI公司F2812DSP,使用片内自带的FLASH作为程序存储器,因为F2812的字长是16bit,所以4个ASCII码合在一起代表一条机器指令单位或者地址。根据各种HEX文件的协议格式,在VC++6.0平台上开发了HEX文件到BIN文件转换程序,原理是将每两位AS-CII码计算成一个十六进制数,然后将计算所得十六进制数重新以ASCII码形式保存。这时生成的代码数据是机器可以识别的可执行代码,可以通过FLASH读写函数写到FLASH中,从而实现在线升级。2.2系统的t史录文设计TI公司的TMS320F2812DSP有2种启动模式:微处理器模式和微控制器模式。当DSP处于微控制器模式时,外部接口Zone7被使能,用户可以从外部存储芯片上取得程序代码;微处理器模式时,使用片内Flash作为运行程序的存储和运行介质。当DSP上电或复位时,根据引脚XMPNMC电平的高低来决定启动模式是微处理器模式还是微控制器模式,高电平是微控制器模式,低电平是微处理器模式。本设计中选取微控制器模式,将XMPNMC引脚接地,启动时DSP开始调用片内的启动代码,这段被称为bootloader的程序是DSP出厂前固化好的启动代码和一些三角函数等表格和数据,位于地址空间0x3FF000—0x3FFFC0。启动代码首先跳转到复位向量(位于0x3FFFC0),这里指向了InitBoot函数(位于0x3FFC00),在完成器件初始化之后,调用SelectBootMode()函数检查GPIO管脚的状态,然后再决定选用的引导模式。引导模式有4种:跳转到Flash,跳转到H0SARAM,跳转到OTP或者调用Bootloader从外部接口引导代码,如表1所示。本设计中,采用的是内部Flash引导模式。对于C语言程序,需要运行前建立C语言运行环境,通常做法是在Flash起点(0x3F7FF6)处放置一条跳转指令,跳转到codestart代码,这段代码可以在TI提供的源文件DSP28_CodeStartBranch.asm中找到,在源码中有这样一条指令:LB_c_int00,执行完这条指令程序将转到_c_init00函数,这个函数是运行支持库(runtimesupportlibrary)提供的C语言启动程序,是由链接器从库文件中提取出并与用户程序相链接,它完成C语言运行环境的初始化,包括:(1)分配堆栈空间,初始化堆栈指针;(2)复制运行时初始表,即将全局和静态变量的初值表从.cinit段复制到.bss段;(3)调用main函数开始运行C程序。至此,控制由Bootloader转交到了用户手上,从main函数的第一条指令开始一次执行下去。从这个过程不难看出,除了要将可执行代码烧写到Flash中外,更为关键的一步是要在0x3F7FF6处烧写_c_int00函数的入口地址,这样复位时DSP才能实现自举运行。2.3c语言程序的地址定位2.3.1sectpb块TI公司新的汇编器和编译器创建的目标文件采用COFF(commonobjectfileformat)的目标文件格式。COFF格式的基本思想是:鼓励程序员在用汇编语言或C语言编程时运用代码块和数据块的概念。这种块称为SECTION,是目标文件中的最小单位。所有的块分为两大类:已初始化块和未初始化块。已初始化块包含程序代码和数据,未初始化块是为未初始化的数据在存储器中的保留块,预留的存储器中空间,一般是在RAM里。未初始化段在目标文件中没有实际的内容,它们仅仅是用来预分配空间用的,程序在运行的时候可以用这些空间来创建和存储变量。C编译器对C程序编译后产生已初始化块和未初始化块,已初始化块如:.text块、.const块、.cinit块;未初始化块如:.bss块、.stack块。表2是各个块的具体内容。F2812将存储器分为两种:程序空间(page0)和数据空间(page1),其中程序空间包括可执行代码、初始化表、switch表;数据空间包括全局、静态变量和堆栈。2.3.2cmd文件的分析由于DSP的编译器的编译结果是未定位的,DSP没有操作系统来定位执行代码,所以需要一种机制来定位程序,这个机制就是Linker的CMD文件,用于将COFF格式的代码定位到DSP的存储空间。CMD文件的专业名称叫链接器配置文件,是存放链接器的配置信息的,简称为链接器的命令文件,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用。MEMORY是用来对芯片的ROM和RAM按区间进行划分并指定每个区间的大小。SECTION用来指定代码段和数据段在存储器的某个区间的分配。下面给出CMD文件的示意写法:3远程更新3.1hex文件格式的转换经编译生成的用户程序是COFF格式的文件,这种文件不能直接烧写到FALSH中,需要将COFF文件转换成HEX文件,再将HEX文件中的地址信息剔除,将ASCII码形式的数据转换成二进制代码保存。这时生成的二进制代码才是升级要用到的代码数据。这一系列转换过程如图3所示,其中Hex2000.exe是TI公司提供的转换工具,Hex2bin.exe是在分析了所有HEX文件格式后,使用C语言开发的转换程序,该程序支持ASCII-hex,ExtenedTektronix,IntelMCS-86(Intel),MotorolaExorciser(Motorola-S)4种格式。经hex2bin.exe程序生成的BIN格式文件,根据无线传输的需要分成多个数据包,通过GPRS方式发送到远端嵌入式终端上。3.2u2009tpp/ip协议本系统中,无线传输选用的是GPRS方式,选用西门子公司的MC55模块作为通信芯片。MC55支持900MHz,1800MHz和1900MHz这3种频段,内嵌TCP/IP协议,这大大减少了系统的开发成本。DSP通过AT指令控制MC55模块实现GPRS的链接,数据收发等操作。3.3在线烧写代码代码数据由上位机按规定的数据格式通过GPRS方式发送到嵌入式终端,已运行在终端的接收程序按协议约定接收数据包,接收结束后,将所有的数据包组合成不同的程序段这些程序段包括.text、.bss等以初始化段和一条烧写至0X3F7FF6处的跳转指令。数据包接收结束后,启动运行在RAM上的烧写函数,将程序段和跳转指令烧写各个扇区。烧写结束启动看门狗使系统复位开始执行新的程序。F2812片内自带了128KFLASH,分为4个8KBxl6位和6个16KBxl6位的扇区,用户可以单独擦除、编程和验证Flash的任意一个扇区而不会影响其他扇区,但不能通过运行在F1ash上的程序对Flash的扇区进行擦除或编程等操作。基于此,进行烧写的代码需要搬移到RAM上去运行,具体实现由配置CMD文件来完成。Flash2812_API_V210函数库是TI公司的编程算法。该算法定义良好,操作简单,而且可以脱离烧写插件,真正实现在线烧写。编程算法中函数定义如下:(1)擦除扇区的函数为Uintl6F1ash2812Erase(SectorMask,&FStatus),其中,SectorMask为擦除指定扇区;&Fstatus为状态值,判断操作是否成功。(2)烧写程序到F1ash函数为Uintl6Flash2812_Program(&FlashAddr,&BuffAddr,Length,&FStatus),其中&FlashAddr为程序在Flash中烧写的起始地址;&BuffAddr为程序当前存放在内存空间的首地址:Length为程序长度;&Fstatus为状态值,判断操作是否成功。(3)校验烧写到Flash中的程序为Uintl6Flash2812_Verifv(&FlashAddr,&BuffAddr,Length,&FStatus)。4实验过程及效率为了验证该方案的可行性,在硬件上使用F320F2812DSP为工作平台。软件上,使用VC++6.0开发环境编写上位机软件,该软件作为更新系统的服务器端,远端的嵌入式终端通过GPRS模块和服务器端通信。打包程序将经格式转换后得到的代码组装成升级包,逐帧发送到远端终端。终端接收解析后,执行烧写程序,然后重启实现自举启动。实验证明,1K大小的程序代码,只需5s就可以发送到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年河南周口市郸城县八年级下册月考语文试题 含答案
- 材料专业就业方向选择
- (正式版)DB15∕T 4371-2026 羊肉产地判别 矿物质和稳定同位素指纹法
- 2026陕西汉中镇巴县人民医院招聘15人笔试备考试题及答案解析
- 钢结构屋面梁施工技术方案
- 2026年无为市公安局专职人民调解员招聘2人笔试备考试题及答案解析
- 2026清华附中学院路学校招聘考试备考题库及答案解析
- 工艺卡片(空白)模板
- 2026四川省骨科医院招聘50人笔试备考题库及答案解析
- 2026浙江金华市公安局婺城分局社会招聘警务辅助人员58人考试参考题库及答案解析
- 渣土公司运输车辆管理制度(3篇)
- 剑桥少儿英语预备级下册B-Unit16复习进程课件
- 全国基本风压雪压数值表
- 小蚂蚁搬家绘本故事
- 电网调度自动化系统调试报告模板
- 针刀手法治疗脊柱侧弯专家讲座
- GA 1808-2022军工单位反恐怖防范要求
- 污水处理厂电气设备运行与维护操作规程
- LY/T 3186-2020极小种群野生植物苗木繁育技术规程
- GB/T 3181-2008漆膜颜色标准
- 建设工程施工合同纠纷解释二解读课件
评论
0/150
提交评论