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种类型的协议帧:服务器恳求晋级帧、晋级代码数据帧和终端回应帧。
协议帧公共数据段:
通讯帧部分数据段阐明:
① 数据长度。表明数据域的字节数(由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模块,提出了一种处理无线监控体系终端软件晋级和保护困难问题的计划。信任在未来通讯方法愈加先进、微操控器功能愈加优胜的基础上,软件无线晋级技能的运用会越来越广泛。