一种基于串口通信静默升级单片机固件的方法与流程

文档序号:14008093阅读:472来源:国知局
一种基于串口通信静默升级单片机固件的方法与流程

本发明涉及一种升级单片机固件的方法,更具体的涉及一种基于串口通信静默升级单片机固件的方法。



背景技术:

当今社会,智能设备普及,物联网火爆全球。为了得到高收益、低成本,选择一款合适的控制芯片是重中之重。因此微型单片机使用越来越广,但是由于单片机flash等硬件限制,造成很难对单片机固件更新。目前,对单片机固件的升级通常基于iap(inapplicationprogramming)技术,从结构上将单片机的flash存储器映射为两个存储体,两个存储体内分别编写两个项目代码,通过运行第一个存储体上的特定程序来对另一存储体进行编程操作,编程完成后跳转到新用户程序开始运行,如果iap程序被破坏,产品必须返厂才能重新烧写程序,这是很麻烦并且非常耗费时间和金钱的,而且,在单片机固件升级过程中,采用串口通信,串口间是采用bit传输的,数据帧长度为10bit,传输的数据就只能是小数据,因为升级数据包较大,传输困难,很多频率低、容量小的单片机无法适应这种升级方式。



技术实现要素:

发明目的:本发明目的在于针对现有技术的不足,提供一种基于串口通信静默升级单片机固件的方法,可以有效解决低成本、容量小的单片机静默升级问题。

技术方案:本发明所述一种基于串口通信静默升级单片机固件的方法,具体为:上位机从服务器下载最新版本固件并传输至对应单片机进行静默升级,所述上位机与所述单片机之间采用串口通信,

串口通信中的数据编码组成为:atcommand,head,index,length,data,check,end;其中,atcommand是用来识别数据指令,head是数据编码的固定头标志,index是数据包的序号,length当前数据包的数据长度,data是数据包有效数据,check是数据包校验,end是数据编码的结束标志。

本发明技术方案的进一步限定为,所述上位机与所述单片机之间采用的串口通信为全双工模式,波特率为115200,无校验位,无停止位。

进一步地,所述上位机与所述单片机之间的数据通信方式为:

s1、所述上位机发送大数据包总长度的数据编码,即atcommand为数据长度指令,所述单片机收到数据长度指令数据编码后,回复收到ack指令;

s2、所述上位机对大数据进行分片,从第一个分片包index=0开始分片发送;

s3、所述单片机收到分片数据包,确认无误后保存数据,并回复预期index分片包的indexack指令,所述预期index为当前index+1;

s4、所述上位机收到预期indexack指令后,根据预期index发送下一个分片包;

s5、重复执行步骤s3和s4,直至所有的分片包全部发送完成。

进一步地,所述上位机与所述单片机之间的数据通信还包括数据重传机制,具体为:步骤s3中,所述单片机收到分片数据包后,校验此分片包时发现误码,回复的预期index分片包的indexack指令时,所述预期index为当前index。

进一步地,所述单片机的flash分为imagea和imageb两个区域,所述imagea区域用来存放串口驱动和用来搬运数据的逻辑固件,占整个flash存储容量的1~2%;imageb区域用来存放单片机固件以及用户数据,占整个flash存储容量的98%~99%。

进一步地,所述单片机接收到最新版本固件后进行升级的方法为:执行imagea区域中的用来搬运数据的逻辑固件,将最新版本的固件通过串口通信传输至imageb区域将imageb区域中的单片机版本进行升级。

有益效果:本发明提出一种基于串口通信静默升级单片机固件的方法,建立在串口协议上层,在串口间进行数据传输时,对数据包采用特殊的数据编码,数据编码具有易扩展性,根据需要命令可以随意扩展;数据传输具有可靠性,编码中含有数据长度、校验位,确保数据的正确;同时支持大数据传输,编码中含有序号等,可以通过这种编码规则传输大数据。本发明可以有效解决低成本、容量小的单片机升级问题,本申请升级方案,安全、可靠,不需要人为参与,占用单片机容量小,降低成本、且大大提升了flash的使用空间,避免浪费。

附图说明

图1为本发明提供的一种基于串口通信静默升级单片机固件的方法的流程图;

图2为本发明提供的一种基于串口通信静默升级单片机固件的方法中单片机的flash的区域划分示意图;

图3为本发明提供的一种基于串口通信静默升级单片机固件的方法中串口通信连接示意图;

图4为本发明提供的一种基于串口通信静默升级单片机固件的方法中通信的数据编码结构图;

图5为本发明提供的一种基于串口通信静默升级单片机固件的方法中可靠传输的流程图;

图6为本发明提供的一种基于串口通信静默升级单片机固件的方法中数据重传机制流程图。

具体实施方式

下面通过附图对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。

实施例1:本发明提出单片机静默升级固件,是在发现有升级的固件更新时,静默自助升级固件,不需要人为参与,且保证了当前固件是最新的,本实施例提供一种基于串口通信静默升级单片机固件的方法,具体为:上位机从服务器下载最新版本固件并传输至对应单片机进行静默升级。

上位机做为服务器和单片机之间的桥梁,与单片机之间的接口标准采用串口通信,其串口通信连接示意图如图3所示,串口物理引脚有rx,tx,gnd.将单片机rx连接主控芯片或上位机tx,单片机tx连接主控芯片或上位机rx,gnd互连。单片机串口驱动加载,主控芯片或上位机配置相同的通信参数。这时候单片机和主控芯片或上位机就可以通过串口通信了。

串口是一种接口标准。串口通信是一个字符一个字符的传输,每个字符一位一位的传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。本实施例中,上位机与所述单片机之间采用的串口通信为全双工模式,波特率为115200,无校验位,无停止位。

受到单片机硬件限制,每个数据包传输都不得超过256字节限制(单片机硬件规定),使得它不能满足有大量数据需要传输的应用场景,本实施例在串口通信协议的基础上,采用如下数据编码解决此问题。上位机与单片机建立连接之后进行数据通信时采用的数据编码结构图如图4所示,具体组成为:atcommand,head,index,length,data,check,end;其中,atcommand是用来识别数据指令,最小占3byte,最大占15byte;head是数据编码的固定头标志,占2byte;index是数据包的序号,占2byte;length当前数据包的数据长度,占1字节;data是数据包有效数据,最小占0byte,最大占232byte;check是数据包校验,占1byte;end是数据编码的结束标志,占2byte。因此,atcommand和data的长度是可变的,因此扩展性强。算法运行时,首先根据atcommand来识别当前需要执行的指令,然后验证head固定头是否匹配,其次根据length连续接收数据,接受完毕之后,判断end是否匹配,然后根据checksum校验判断数据是否正确,最后处理当前指令内容。

基于上述数据编码和全双工通信模式,上位机与所述单片机之间实现一个具有分片和重组的传输层。传输层将数据包按照每255字节划分为一个有效载荷分片,在每个分片包上加入数据编码,这样就达到在串口间传输大数据的目的。

由于是全双工通信方式,单片机rx为接收通道,tx为发送通道。在上述数据编码中,的上位机和单片机之间的数据传输其流程图如图5所示,具体为:

s1、所述上位机发送大数据包总长度的数据编码,即atcommand为数据长度指令,所述单片机收到数据长度指令数据编码后,回复收到ack指令;

s2、所述上位机对大数据进行分片,从第一个分片包index=0开始分片发送;

s3、所述单片机收到分片数据包,确认无误后保存数据,并回复预期index分片包的indexack指令,所述预期index为当前index+1;

s4、所述上位机收到预期indexack指令后,根据预期index发送下一个分片包;

s5、重复执行步骤s3和s4,直至所有的分片包全部发送完成。

静默升级过程中的数据编码和数据传输方式解决之后,还需要对单片机的flash进行最优分区。对单片机固件升级,必须对单片机flash进行分区。就升级而言,至少对flash分两块区域,一块用来存放当前固件的区域,另一块用来存放更新的固件。常规分区方式是将flash进行对等分区,但是,由于单片机flash空间小,对等分区造成用户层使用的空间极少或严重不足,本实施例对单片机的flash的区域划分示意图如图2所示,将单片机分为imagea和imageb两个区域,所述imagea区域占整个flash存储容量的1~2%,用来存放串口驱动和用来搬运数据的逻辑固件;imageb区域占整个flash存储容量的98%~99%,用来存放单片机固件以及用户数据。由于imagea区域只用来存放串口驱动和用来搬运数据的逻辑固件,因此只需要极少的一部分空间。所述单片机接收到最新版本固件后进行升级的方法为:执行imagea区域中的用来搬运数据的逻辑固件,将最新版本的固件通过串口通信传输至imageb区域将imageb区域中的单片机版本进行升级。

解决了上述问题后,基于串口通信静默升级单片机固件的方法的流程图如图1所示,具体步骤如下:

1、主控芯片或上位机定期轮循获取单片机的当前固件版本;

2、主控芯片或上位机定期轮循从服务器获取单片机的最新固件版本;

3、主控芯片或上位机定期对比单片机当前固件版本和最新版本。如果发现当前版本和最新版本相同或比最新版本更高,不做任何处理。如果发现当前版本比最新版本低,则表示有新版本更新。此时查看当前工作队列中是否有任务执行,等待当前工作队列中无任务时,执行升级任务。

4、从服务器获取最新版本固件,将单片机重置到imagea中执行,通过串口通信、固件数据编码、串口大数据传输、串口可靠传输,将固件通过串口传输到单片机存放固件的imageb区域。传输完成,校验,重置单片机从imageb中执行,升级完成。

升级时,单片机中执行的具体步骤为:主控芯片或上位机从服务器下载单片机最新固件到本地后,通过串口通信,告知单片机固件需要更新。单片机接受到固件更新通知后,写入imageabootcrc,擦除imagebbootcrc,重启,根据bootcrc判断,进入到imagea执行,imagea告知主控芯片或上位机当前状态为imagea,主控芯片或上位机开始发送更新固件,发送过程中,依赖数据编码格式、大数据传输、串口可靠传输,将更新固件通过串口发送到单片机上,imagea接受到更新固件,校验通过后,写入到imageb区域。传输完成后,写入imagebbootcrc,擦除imageabootcrc,重启,根据bootcrc判断,进入到imageb执行。至此升级完成。

考虑到电器特性、干扰等因素,可能存在串口间传输数据出现丢失或误码,将存在三种不可靠数据传输的情况:

(1)发送方给接收方发送的数据丢失,即接收方没有收到数据。

(2)接收方给发送方的ack数据丢失,即发送方没有收到ack数据,当然大数据传输中期望分片index序号也没有被接收到;

(3)数据在传输过程中被某些因素篡改。

为了避免上述三种情况,本发明提出了在传输过程中加入超时重传机制:其流程图如图6所示,具体为:

(1)某分片包在发送到接收方过程中丢失。发送方再发送完成后进入发送阻塞等待状态,等待一段时间过程中,如果收到发送ack回复,继续进行下一步;如果超时仍未收到ack回复,将进行重传上一分片包。

(2)某分片包的ack在回复过程中丢失。发送方同样在发送阻塞等待状态中超时,将进行重传上一分片包。

(3)某分片包在发送到接收方过程中误码。接收方在收到有效数据后,校验此分片包发现误码,回复当前分片包的序号indexack,接收方对比收到的分片序号index并不是期望的index+1,故重传上一index分片包。

(4)如果某个分片包重传次数达到上限,说明数据链路层出现故障,此时重置串口驱动并重新初始化串口,重新开始传输。

如上所述,尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制。在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在形式上和细节上作出各种变化。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1