本文提出一种基于低频唤醒和IAP技术的无线升级程序的方法,实现了嵌入式设备不拆卸、不硬件破坏的情况下实现应用程序的升级,具有很大的应用前景。
一、无线升级模型及原理
嵌入式设备的无线升级系统主要由服务器设备、终端设备两部分组成。设备之间通过无线通信技术进行装载程序代码的传输。通过IAP技术进行程序的更新与升级,由此实现嵌入式设备的无线升级,程序结构如下图所示。
嵌入式软件无线升级主要用到的技术是低频唤醒技术和IAP技术。
低频原理
低频唤醒技术由谐振电路发展而来。低频产生电路是由电感和电容组成的LC串联谐振电路,它的固有频率为125kHz。当终端中的低频电感接收到这个低频信号时会使电路发生谐振而产生感应电压,再由LF模块处理后交给MCU,MCU解析、判断后执行相应任务。
低频唤醒原理技术参数和通信帧结构如下所示:
|
Value |
Carrier Center Frequency |
125 kHz |
Carrier Frequency Tolerance |
±12.5 kHz |
Modulation |
Amplitude Shift Keying (ASK) |
Modulation Depth |
90% - 100% (Min = 0.10Max @ 90%) |
Data Encoding |
Manchester |
Baud Rate |
3.906 kbps ±5% |
LF帧结构(结合MCU设计):
Preamble + Synchronization + WakeUpID + header + Data + checksum + EOM.
Preamble:The Preamble is a sequence of Manchester coded “zeros”allowing the LF Interface to settle its analog circuitry. The Preamble is32bits Manchester 0.
Synchronization:To initialize the on-chip Manchester decoder and to detect the startof the WakeUp-ID frame, a distinct synchronization pattern need to bereceived by the device. The Synchronization frame features a fixedlength.
Checksum:Cheksum=~(Data)+1.
IAP(应用编程)技术
IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
在IAP编程模式中,嵌入式设备内部在结构上有两块存储区,一块被称为BootLoader区;另外一块被称为用户装载程序区。设备上电运行在Boot Loader区,如果满足外部改写程序的条件,则对用户装载程序区的程序进行改写操作,程序指针跳到用户装载程序区完成程序切换。
二、软件设计及通信协议流程
嵌入式软件无线升级方法的软件设计包括用户程序和软件更新引导程序设计,软件更新引导程序的目的就是完成用户程序的软件通过无线的方式升级更新。所以为了保证系统的可靠运行,需要将终端设备Flash内存分为BootLoader代码区和用户程序代码区。
服务器设备和终端设备之间无线通信流程:服务器首先发送终端重启命令,并发送程序更新命令,在收到终端反馈其接收配置好的指令后,读取升级应用程序的Hex格式的文件,将读取的文件进行转换,分成多个数据包依次发送给终端,终端接收完一个数据包并校验正确后,立即写入用户代码区,然后继续接收下一个数据包,直到程序发送结束。
对程序更新,必须保证数据通信的可靠性,所以考虑了数据包丢失、数据包重复、数据包传输出错三种错误。对于数据包重复,解决方法是在数据包中设置指令编码。指令编码是一个8 bit的无符号整数,由数据发送方将其放在数据包中,每发送一包数据,将指令编码加1,当为255时,再从0开始。数据包传到接收方时,如果与接收方存的指令编码重复,则认为是重复的数据包,从而丢弃。利用指令编码也可以检测有无丢包。
在程序更新时,要检测写入的Flash区必须在用户软件代码区或中断向量区中,如果超出,则不能再进行写入,并设置更新出错,以保护其他代码区的数据。在程序更新完毕后,设置中断向量区,使终端再重启后,将首先运行软件更新引导程序,在没有软件更新命令时自动跳转到用户软件代码区。为了保证传输代码的可靠性和有效性,在通信协议中采用应答机制和错误重传机制,详细内容可见通信协议流程。
通信协议流程
说明:
1、协议帧定义:由命令和数据构成,协议帧第一字节为命令字节,后面其余字节为数据字节。
例:协议帧A:0x01 + Random[1]
其中:0x01为命令字节,
其前4bit对应终端的Reset终端设备函数入口
后4bit表示该帧数据字节个数为1
Random为数据字节,其中[1]表示为1字节。
服务器发出指令 终端发出指令
A: 0x01 + Random[1]:
命令:0x01中命令bit为0,包含1个字节数据。
数据:Random为随机码。
功能:Reset终端
30ms内没有肯定回复则再发送一帧信息
发送100次后提示失败
——>
<——
A’: 0x85 + ID[4] + Random[1]:
命令:0x85中命令bit为8,包含5个字节数据
数据:ID[4]为终端ID号,Random为随机码
功能:应答反馈
B: 0x14 + ID[4]:
命令:0x14中命令bit为1,包含4个字节数据。
数据:ID[4]为终端ID号
功能:擦除终端用户区flash
30ms内没有肯定回复则再发送一帧信息
发送10次后提示失败
——>
<——
B’: 0x84 + ID[4] :
命令:0x84中命令bit为8,包含4个字节数据
数据:ID[4]为终端ID号
功能:应答反馈
C: 0x22 + ID[4] + address[2] :
命令:0x22中命令bit为2,包含2个字节数据
数据:address[2] 为写入地址
功能:向终端发送写入flash地址
30ms内没有肯定回复则再发送一帧信息
发送10次后提示失败
——>
<——
C’:0x82 + address[2] :
命令:0x82中命令bit为8,包含2个字节数据
数据:address[2]为写入地址
功能:应答反馈
D: 0x36 + ID[4] + byteNumber[1]+ packetNumber[1] :
命令:0x36中命令bit为3,包含6个字节数据
数据:packetNumber为数据包计数,byteNumber
为待发送字节数,Data[4]为程序数据数组
功能:发送数据包字节信息
30ms内没有肯定回复则再发送一帧信息
发送10次后提示失败
——>
<——
D’:0x81 + packetNumber[1] :
命令:0x81中命令bit为8,包含1个字节数据
数据:packetNumber[1]为数据包计数
功能:应答反馈
E: (0x40| dataNumber) + ID[4] + packetNum[1] + Data[dataNumber]:
命令:(0x40| dataNumber)中命令bit为4,包含dataNumber个字节数据
数据:Data[dataNumber] 为程序数据,packetNum表示
帧计数,满十清零,Data[dataNumber]为程序数据
功能:实现程序数据发射
80ms内无回复则再发送一帧信息
发送10次后提示失败
——>
<——
E’:0x84+ check[4]:
命令:0x84中命令bit为8,包含4个字节数据
数据:check[4]为校验值数组
功能:应答反馈
F: 终端连续下载,循环执行D、E过程,直到程序数据结束。
G: 0x54 + ID[4]:
命令:0x54中命令bit为5,包含4个字节数据
数据:ID[4]为终端ID号
功能:下载成功确认
30ms内没有肯定回复则再发送一帧信息
发送10次后提示失败
——>
<——
G’:0x84+ID[4] :
命令:0x84中命令bit为8,包含4个字节数据
数据:ID[4]为终端ID号
功能:应答反馈
综上,嵌入式设备载波频率采用125KHz,通过简单可靠的无线通信协议进行程序代码的传输,终端设备接收到代码数据后,采用lAP技术进行程序的无缝切换。该方法需要的硬件资源较少,协议简单可靠,能够有效减少来自同频电波和障碍物的干扰,装载延时可在人们的容忍限度之内,能量消耗较少。另外,该方法通用性较强,适用于任何具有无线通信功能含有Flash单片机及嵌入式设备。