当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]1 软件无线升级系统方案基于无线通信的远程监控系统(如远程电网质量监控系统、水情测报系统和城市路灯监控系统等)应用越来越广泛,而在实际使用过程中,由于需求的变化,经

1 软件无线升级系统方案

基于无线通信的远程监控系统(如远程电网质量监控系统、水情测报系统和城市路灯监控系统等)应用越来越广泛,而在实际使用过程中,由于需求的变化,经常要对其终端设备软件进行修改或升级。一般情况下,无线监控系统与终端距离较远,终端分散且工作环境较差。如果维护人员到现场进行软件升级,不但维护费用很高,而且还可能使终端设备长时间不能正常工作。

为解决这一难题,本文提出一种利用ST公司的STR710FZ2T6作为终端微控制器,融合IAP(In Application Programming,在应用编程)技术和GPRS无线网络通信技术的软件升级系统方案。软件无线升级系统整体框图如图1所示。

 

图1 软件无线升级系统整体框图

2 系统硬件和软件设计

2.1 硬件设计

本文选用的是ST公司的一款工业级微控制器STR710FZ2T6。它是基于arm7TDMI 的32位RISC CPU,拥有丰富的外设和增强的I/O功能,并提供高达33 MHz的直接存取速度以及50 MHz零等待状态的序列闪存;具有(256 KB+16 KB) Flash 和64 KB SRAM,内部Flash可重复擦写10万次,数据保持20年,支持自编程;外部存储器接口(EMI)可支持4个SRAM、Flash、ROM等存储类型;芯片有多种boot方式。另外,STR710FZ2T6能够通过运行在Flash中的程序来对自身的Flash进行更新。这个功能使其能够通过CAN、UART、USB、无线通信等接口将程序下载到自身的Flash中。

系统结构如图2所示。根据微控制器STR710FZ2T6的特点以及无线监控终端的功能要求,硬件设计包括由电源电路、复位电路、JTAG接口电路、晶振电路组成的芯片工作最小系统,以及在最小系统上扩展的串行接口模块、外存储器模块、数据显示模块、数据采集模块和SIM300 GSM/GPRS通信模块。其中,扩展的外存储器包括SST公司的具有16位数据宽度的Flash存储器SST39VF1601和ISSI公司的SRAM 存储器IS61LV25616AL。

 

图2 软件无线升级系统结构框图

2.2 终端软件设计

系统终端软件的设计包括终端引导程序设计和终端应用程序的设计。引导程序和应用程序在STR710FZ2T6中所存放的位置不同。将启动模式配置为从片内Flash引导之后,系统终端微控制器将复位,启动之后先执行引导程序。引导程序在执行过程中决定是否启动IAP升级程序;应用程序实现终端的各种功能,如命令和数据的接收、发送,以及新版本应用程序升级包的下载。

2.2.1 终端引导程序设计

系统设计时,终端引导程序通过JTAG接口烧写到STR710FZ2T6的Flash扇区起始位置(0x40000000)处。整个引导程序占用Flash的前两个扇区,通过启动模式的选择,将这块Flash映射到0x00000000,保证系统上电后自动运行引导程序。终端重新启动时,STR710FZ2T6从0x40000000地址开始读取指令并执行。

经过实验证明:将IAP升级程序存放在用户引导部分是非常合理的,能够避免由于应用程序升级失败而造成的系统崩溃。由于终端引导程序在产品出厂前固化,若Flash编程失败,微控制器将重新启动,IAP程序利用存储器SST39VF1601中保存的最新版本的应用程序,重新对Flash进行编程。由于引导程序有多次编程Flash扇区的能力,系统应用程序代码的完整性以及应用程序升级的可靠性才得以保证。引导程序流程如图3所示。

 

图3 终端引导程序流程

终端引导程序的主要函数说明:

① main()主函数。用于初始化UART接口,PLL设定等,根据升级标志和新版本号判断是否继续执行IAP。若升级标志置位,且新版本号大于当前的版本号,则启动IAP升级程序,否则运行终端应用程序。

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空间。终端应用程序不但完成日常各项工作任务,而且还负责接收监控中心服务器发送的应用程序升级命令。当收到升级命令后,终端回应服务器此时若接收升级代码,则应用程序将升级包按照帧的方式通过GPRS模块从服务器下载到终端,通过校验后保存到终端外部Flash存储器SST39VF1601中,下载成功后置位升级标志和记录升级包版本号以备引导程序升级。由于升级包的下载过程可看成是数据传输过程,应用程序可在下载升级包的同时进行其他任务,且不影响终端的正常工作。当终端应用程序下载完升级包之后,应用程序对必要的现场进行保存然后主动复位,微控制器启动之后直接执行引导程序,并进行Flash编程。由于很多系统终端日常任务繁多,可通过程序中相应的设置,使新代码下载和Flash编程尽量选择在终端可能空闲的时间段,从而尽可能地减少升级应用程序对终端正常工作的影响。

3 通信协议的设计

参照通信规约和已存在的无线配电监控系统的协议,本文定义了3种类型的协议帧:服务器请求升级帧、升级代码数据帧和终端回应帧。

协议帧公共数据段:

 

[!--empirenews.page--]

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

 

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

 

终端回应帧帧格式如下:

 

通信帧部分数据段说明:

① 数据长度。表示数据域的字节数(由2字节构成),为0时表示无数据,其值为此数据段到校验和之前的数据字节数之和。

② 升级软件版本号。无线监控系统终端收到升级请求帧之后,将此数据段和其本身的软件版本进行比较。如果版本号小于将要升级的软件版本,终端将回应服务器同意升级,否则放弃升级。

③ 升级文件长度。用来判断存储空间够不够存放将要升级的文件,以及升级代码是否传输完毕[4]。

4 终端编程注意事项

(1) 编程代码大小。IAP编程是用户的IAP代码对片内Flash存储器进行擦除/编程的过程。由于片内Flash存储空间的限制以及代码存储空间的限定,编程时不但需要控制IAP自身代码量的大小,而且还要控制终端应用程序代码的大小,绝对不能够超出所指定的存储范围。

(2) 提高远程升级速度的措施。为了提高系统远程升级的速度,在代码传输过程本文采取3种措施:

① 数据压缩。数据压缩是解决由于数据大而导致整个下载过程时间长问题的最有效的办法,本系统中服务器将升级代码进行压缩,终端设备接收到之后进行解压、存储。由于应用程序的代码满足arm指令集的特征,所以压缩效率较高。

② 应用程序分块加载。在日常系统维护中,无论对系统进行升级或是修改程序中的“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]。

结语

本文利用arm微控制器和GPRS模块,提出了一种解决无线监控系统终端软件升级和维护困难问题的方案。相信在未来通信方式更加先进、微控制器性能更加优越的基础上,软件无线升级技术的应用会越来越广泛。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭