新闻中心

EEPW首页>嵌入式系统>设计应用> ARM和GPRS相配合的软件无线升级系统

ARM和GPRS相配合的软件无线升级系统

作者: 时间:2013-11-12 来源:网络 收藏

int __main(void)
  ② 对片内Flash进行初始化操作。
void FLASH_Init(void)
  ③ 从第二扇区算起,计算代码需要的扇区数。
u32 FLASH_SectorMask(vu32 Size)
  ④ 将新代码需要的扇区去掉写保护,为扇区擦除做准备。
void FLASH_WritePrConfig(u32 Xsectors,FunctionalState NewState)
  ⑤ 将新代码需要的扇区进行擦除,为写做准备。
void FLASH_SectorErase(u32 Xsectors)
  ⑥ 将新代码写入Flash扇区中。
void FLASH_WordWrite(u32 XtargetAdd,u32 Xdata)

2.2.2 终端应用程序设计
  终端应用程序设定的起始地址是STR710Z2T6的0x40004000处,并可占用之后的整个Flash空间。终端应用程序不但完成日常各项工作任务,而且还负责接收监控中心服务器发送的应用程序升级命令。当收到升级命令后,终端回应服务器此时若接收升级代码,则应用程序将升级包按照帧的方式通过模块从服务器下载到终端,通过校验后保存到终端外部Flash存储器SST39VF1601中,下载成功后置位升级标志和记录升级包版本号以备引导程序升级。由于升级包的下载过程可看成是数据传输过程,应用程序可在下载升级包的同时进行其他任务,且不影响终端的正常工作。当终端应用程序下载完升级包之后,应用程序对必要的现场进行保存然后主动复位,微控制器启动之后直接执行引导程序,并进行Flash编程。由于很多系统终端日常任务繁多,可通过程序中相应的设置,使新代码下载和Flash编程尽量选择在终端可能空闲的时间段,从而尽可能地减少升级应用程序对终端正常工作的影响。
3 通信协议的设计
  参照通信规约和已存在的无线配电监控系统的协议,本文定义了3种类型的协议帧:服务器请求升级帧、升级代码数据帧和终端回应帧。
  协议帧公共数据段:

ARM和GPRS相配合的软件无线升级系统

服务器请求升级帧帧格式如下:

ARM和GPRS相配合的软件无线升级系统

升级代码数据帧帧格式如下:

ARM和GPRS相配合的软件无线升级系统

终端回应帧帧格式如下:

ARM和GPRS相配合的软件无线升级系统

通信帧部分数据段说明:
  ① 数据长度。表示数据域的字节数(由2字节构成),为0时表示无数据,其值为此数据段到校验和之前的数据字节数之和。
  ② 升级软件版本号。无线监控系统终端收到升级请求帧之后,将此数据段和其本身的软件版本进行比较。如果版本号小于将要升级的软件版本,终端将回应服务器同意升级,否则放弃升级。
  ③ 升级文件长度。用来判断存储空间够不够存放将要升级的文件,以及升级代码是否传输完毕[4]。
4 终端编程注意事项
  (1) 编程代码大小。IAP编程是用户的IAP代码对片内Flash存储器进行擦除/编程的过程。由于片内Flash存储空间的限制以及代码存储空间的限定,编程时不但需要控制IAP自身代码量的大小,而且还要控制终端应用程序代码的大小,绝对不能够超出所指定的存储范围。
  (2) 提高远程升级速度的措施。为了提高系统远程升级的速度,在代码传输过程本文采取3种措施:
  ① 数据压缩。数据压缩是解决由于数据大而导致整个下载过程时间长问题的最有效的办法,本系统中服务器将升级代码进行压缩,终端设备接收到之后进行解压、存储。由于应用程序的代码满足指令集的特征,所以压缩效率较高。
  ② 应用程序分块加载。在日常系统维护中,无论对系统进行升级或是修改程序中的“bug”,其实修改的只是程序中的一小部分,而大部分程序还保持原样。因此,合理的方法是只把修改的代码,而不是把整个二进制文件下载到远程终端。具体的实现办法是,建立分散文件,在其中按功能将应用程序划分为多个装载区,并为每个装载区留有足够大的空间,为以后的升级、修改做准备。这种做法大大减小了数据传输量,提高了软件升级速度。
  ③ 小数据块传输。由于系统采用错误重传机制,根据实际应用经验,数据块越大出现错误的机率就越大;同时,由于数据块大,传输一帧的速率较低,虽然接收到的数据帧较大,但由于错误的机率和传输的速率,反而造成效率低下。采用小数据块传输,虽然一帧数据块小,但弥补了上述不足。
  (3) 远程通信的误码处理。程序代码传输过程中,终端校验数据正确后存入SST39VF1601,检验错误时向服务器返回错误的编码和帧序号并请求重发,直到检测到结束帧为止。服务器发送最后一帧时,如果该帧的数据长度不够,用00填充直到满足协议中规定的长度。对于数据传输过程中产生的误码,系统采用最有效的解决办法是CRC循环冗余效验和重传机制。
  (4) 相同的存储区,不同的运行区域。由于需要对Flash进行编程,但是对Flash操作的代码不能在Flash本身运行,因此这部分代码必须在内部RAM中运行。可以通过分散加载文件设置函数的运行空间。
  (5) 用户中断。在系统中IAP程序烧写在从0x00000000开始的两个Flash扇区内,而用户程序则是存储在从0x40004000开始的Flash空间中。如果用户程序产生中断,那么内核会读取到IAP的向量表,导致程序跑飞。解决办法是,在跳转到用户程序之前,IAP程序把用户程序的向量表拷贝到片内RAM中,然后将RAM重映射到0x00000000地址,最后进行跳转,这样就可以保证0x00000000地址有用户程序的向量表。
  由于RAM的起始地址用来存放用户程序的中断向表,往其中写入数据时,需保证这些向量表不被覆盖,故IAP程序、用户程序的RW base使用的是0x20000100[5]。
结语
  本文利用微控制器和模块,提出了一种解决无线监控系统终端软件升级和维护困难问题的方案。相信在未来通信方式更加先进、微控制器性能更加优越的基础上,软件无线升级技术的应用会越来越广泛。

存储器相关文章:存储器原理


晶振相关文章:晶振原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭