CN115220758B - 一种单片机固件在线升级的方法 - Google Patents

一种单片机固件在线升级的方法 Download PDF

Info

Publication number
CN115220758B
CN115220758B CN202210730604.6A CN202210730604A CN115220758B CN 115220758 B CN115220758 B CN 115220758B CN 202210730604 A CN202210730604 A CN 202210730604A CN 115220758 B CN115220758 B CN 115220758B
Authority
CN
China
Prior art keywords
area
program
image
array
backup
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210730604.6A
Other languages
English (en)
Other versions
CN115220758A (zh
Inventor
周延
李林科
吴天书
杨现文
张健
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Linktel Technologies Co Ltd
Original Assignee
Wuhan Linktel Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Linktel Technologies Co Ltd filed Critical Wuhan Linktel Technologies Co Ltd
Priority to CN202210730604.6A priority Critical patent/CN115220758B/zh
Publication of CN115220758A publication Critical patent/CN115220758A/zh
Application granted granted Critical
Publication of CN115220758B publication Critical patent/CN115220758B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1433Saving, restoring, recovering or retrying at system level during software upgrading
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

一种单片机固件在线升级的方法,包括:获取单片机主程序运行区域的ImageA程序,备份程序存储区域存放未激活的Image B程序;主机发送固件待升级固件首帧,主程序运行区域的ImageA程序对待升级固件首帧进行校验;当握手信号校验成功后,将ImageA和Image B程序块按单片机最小可擦除单元2KB分块,并对存放ImageA和Image B程序的主程序运行区域和备份程序存储区域分别分配96KB空间,对缓存区域分配2KB空间,对ImageA程序和ImageA程序索引数组进行赋值并储存;按预设规则,将主程序运行区域和备份程序存储区域中的ImageA和Image B程序的96kB数据进行交换;本发明解决了现有技术固件在线升级需要主机判定当前运行程序是运行区域还是备份区域,且不能升级当前运行区域的程序的问题。

Description

一种单片机固件在线升级的方法
技术领域
本发明涉及的是单片机领域,特别涉及一种单片机固件在线升级的方法。
背景技术
目前单片机几乎渗透到我们生活各个领域,广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域。随着产品功能迭代和用户需求多样性的增加,单片机支持固件在线升级功能成为一项极为重要的必备功能。
单片机固件在线升级可以解决以下几个方面的问题:解决产品本身由于软件功能产生的缺陷或漏洞;优化产品性能,提高产品的延续性和用户体验;升级新功能,较少过渡硬件升级导致频繁更新换代,节约成本,合理利用资源。除了以上几个方面,还有其他诸多方面的便利,可以支持不间断业务在线升级,可以支持远程在线升级等多种应用场景。随着生活越来越智能化,AI自动管理升级等,可以与更多智能应用对接。
目前单片机固件在线升级常见问题如下:
1.待升级固件与待升级单片机是否匹配;
2.固件在线升级过程中需要中断业务;
3.固件在线升级失败,导致设备宕机;
4.固件在线升级过程中掉电,导致设备宕机;
5.固件在线升级后,无法软件版本回滚;
6.固件程序本身带有地址信息,只能在指定区域运行;
7.固件本身存在问题,导致升级后无法恢复原来固件;
鉴于现状,通过升级技术手段和优化软件算法解决上述所面临的问题迫在眉睫。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种单片机固件在线升级的方法。
为了解决上述技术问题,本申请实施例公开了如下技术方案:
一种单片机固件在线升级的方法,包括:
S100.获取单片机主程序运行区域Run Area的Image A程序,备份程序存储区域Backup Area存放未激活的Image B程序;
S200.主机发送固件待升级固件首帧,主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验;
S300.当握手信号校验成功后,将Image A和Image B程序块按单片机最小可擦除单元2KB分块,并对存放ImageA和Image B程序的主程序运行区域Run Area和备份程序存储区域Backup Area分别分配96KB空间,对缓存区域Cache Area分配2KB空间,对Image A程序索引数组和Image A程序索引数组进行赋值并储存;
S400.当主机发送试运行Image B程序命令,Image A程序将跳转至BootLoader程序,在BootLoader程序中,首先关闭所有中断,然后利用缓存区域Cache Area,按预设规则,将主程序运行区域Run Area和备份程序存储区域Backup Area中的ImageA和Image B程序的96kB数据进行交换;
S500.当交换完成所有Image数据,BootLoader程序将跳转至主程序运行区域RunArea,当前主程序运行区域Run Area区域存放的是Image B程序,如果程序运行正常,主机可发送确认命令,Image B程序将修改复位运行标志为0x0B,则下次复位或者上电后BootLoader跳转运行的Image程序是ImageB。
进一步地,S200中,主机发送固件在线升级握手信号,包括:握手信息、Image长度、Image校验和和Image版本信息。
进一步地,S200中,主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验,包括:Image A程序校验握手信息是否匹配,如果不能匹配则反馈错误信息,如果通过握手校验,则反馈成功握手,Image A程序将擦除备份程序存储区域Backup Area数据,将Image B程序标注为不可运行,并将接收到的Image长度、Image校验和以及Image版本信息存储至备份程序存储区域Backup Area,然后等待后续升级数据。
进一步地,主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验,还包括:单片机继续接收Image数据,直至Image数据接收完成;然后Image程序通过Image长度和Image校验和进行数据校验,如果检验失败,则反馈错误信息,如果校验通过则将ImageB标注为可运行且反馈主机成功。
进一步地,对Image A程序索引数组和Image A程序索引数组进行赋值并储存,具体为:当前Image A程序存放在主程序运行区域Run Area,则其索引数组ImageA_Array[48]={0,0,0,…,0},而Image B程序存放在备份程序存储区域Backup Area,则其索引数组为ImageB_Array[48]={1,1,1,…,1};当前的索引ImageA_Array[48]和ImageB_Array[48]存放在Index Area A,且Index Area B区域为可写入状态,其中,Index Area A和Index AreaB为索引区域Index Area两块独立的最小可擦除FLASH空间。
进一步地,索引区域Index Area可存放下主程序运行区域Run Area索引N和备份程序存储区域Backup Area索引N以及一个8字节有效标号,即空间大于等于(2N+8)字节大小;如果最小可擦除FLASH空间小于(2N+8),则可用多个最小可擦除FLASH区域拼接使用。
进一步地,S400中,按预设规则,将主程序运行区域Run Area和备份程序存储区域Backup Area中的ImageA和Image B程序的96kB数据进行交换,具体预设规则包括:
S401.首先将ImageA程序中的第n个2kB数据写入到缓存区域Cache Area中;
S402.将ImageA_Array[48]数组中第一个数据由0变成2,即ImageA_Array[48]={2,0,0,…,0},然后将索引ImageA_Array[48]和ImageB_Array[48]的最新数据写入到Index Area B,同时将8字节标号在FlagA标号的基础上加1保存在Index Area B中,即FlagB等于2,擦除Index Area A以供后续写入;
S403.将主程序运行区域Run Area中的第一块2kB的FLASH区域擦除;
S404.将ImageB程序中的第1个2kB数据写入主程序运行区域Run Area第一个2kB区域;
S405.ImageB_Array[48]数组中第一个数据由1变成0,即ImageB_Array[48]={0,1,1,…,1},然后将索引ImageA_Array[48]和ImageB_Array[48]的最新数据写入到IndexArea A,同时将8字节标号在FlagB标号的基础上加1保存在Index Area A中,即FlagA等于3,擦除Index Area B以供后续写入;
S406.将备份程序存储区域Backup Area中的第一块2kB的FLASH区域擦除;
S407.将缓存区域Cache Area中的数据写入到备份程序存储区域Backup Area第一块2kB FLASH区域;
S408.ImageA_Array[48]数组中第一个数据由2变成1,即ImageA_Array[48]={1,0,0,…,0},然后将索引ImageA_Array[48]和ImageB_Array[48]的最新数据写入到IndexAreaB,同时将8字节标号在FlagA标号的基础上加1保存在Index AreaB中,即FlagB等于4,擦除Index Area A以供后续写入;
S409,擦除缓存区域Cache Area,以供后续交换使用;
S410.重复上述步骤401-S409,重复48次可将主程序运行区域Run Area和备份程序存储区域Backup Area的96kB数据进行交换。
进一步地,当主程序运行区域Run Area和备份程序存储区域Backup Area过程中突然掉电时,主程序运行区域Run Area和备份程序存储区域Backup Area各自存放部分ImageA和ImageB,缓存区域Cache Area中可能存放其中某一块Image的数据;此时,预设规则还包括:
通电复位后,首先检查Index Area A和Index AreaB中对应的8字节标号,如果Index Area A中的标号大于Index AreaB中标号,表示Index Area A为有效Index数组页,从而将其中的数据取出赋值给ImageA_Array[48]和ImageB_Array[48];
BootLoader检查ImageA_Array[48]和ImageB_Array[48]中的数组中的参数,检查如果发现其中有参数为2,如果参数是2则代表ImageA的第n块有效数据存放在缓存区域Cache Area中,此时需要将该数据搬运回主程序运行区域Run Area或者备份程序存储区域Backup Area;
假设ImageA_Array[48]的第n个数据为2,检查ImageB_Array[48]数组中第n个参数是否为0,如果是0,此时ImageA的第n块有效数据存放在缓存区域Cache Area中,ImageB的第n块有效数据存放在主程序运行区域Run Area中,备份程序存储区域Backup Area中的数据为无效数据;首先将备份程序存储区域Backup Area中第n块区域擦除,然后将缓存区域Cache Area数据搬运回备份程序存储区域Backup Area中的第n块区域;
检查试运行标志是否为0x0A或者0x0B,如果是0x0A,则判定当前Run Area需要运行ImageA;反之运行ImageB;如果不是0x0A或者0x0B,则检查复位运行标志是否为0x0A或者0x0B,如果是0x0A,则判定当前Run Area需要运行ImageA,反之运行ImageB;
如果当前在Run Area区域需要运行的是ImageA,则需要将ImageA数据完整搬运至Run Area中;检查ImageA_Array[48]数组中的所有参数是否为0,如果其中某些参数为1,则需要参照S401-409交换Run Area和Backup Area对应数据块,直至所有ImageA数据处于主程序运行程序Run Area中;然后跳转至主程序运行程序Run Area运行Image程序。
本发明实施例提供的上述技术方案的有益效果至少包括:
本发明公开的一种单片机固件在线升级的方法,包括:获取单片机主程序运行区域Run Area的Image A程序,备份程序存储区域Backup Area存放未激活的Image B程序;主机发送固件待升级固件首帧,主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验;当握手信号校验成功后,将Image A和Image B程序块按单片机最小可擦除单元2KB分块,并对存放ImageA和Image B程序的主程序运行区域Run Area和备份程序存储区域Backup Area分别分配96KB空间,对缓存区域Cache Area分配2KB空间,对Image A程序索引数组和Image A程序索引数组进行赋值并储存;当主机发送试运行Image B程序命令,ImageA程序将跳转至BootLoader程序,在BootLoader程序中,首先关闭所有中断,然后利用缓存区域Cache Area,按预设规则,将主程序运行区域Run Area和备份程序存储区域BackupArea中的ImageA和Image B程序的96kB数据进行交换;当交换完成所有Image数据,BootLoader程序将跳转至主程序运行区域Run Area,当前主程序运行区域Run Area区域存放的是Image B程序,如果程序运行正常,主机可发送确认命令,Image B程序将修改复位运行标志为0x0B,则下次复位或者上电后BootLoader跳转运行的Image程序是ImageB。
本发明解决了现有技术中,固件在线升级需要主机判定当前运行程序是运行区域还是备份区域,且不能升级当前运行区域的程序,同时还需要提供两份地址编译后的固件给主机,主机需要判定固件地址信息才能进行固件在线升级的问题,并且适用于单片机固件升级过程中突然断电的情况。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例1中,一种单片机固件在线升级的方法的流程图;
图2为本发明实施例1中,单片机FLASH空间分配示意图;
图3为本发明实施例2中,Image程序组成部分示意图;
图4为本发明实施例2中,Run Area和Backup Area数据交换示意图;
图5为本发明实施例2中,交换Run Area和Backup Area第10个2kB区域流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了解决现有技术中存在的问题,本发明实施例提供一种单片机固件在线升级的方法。
实施例1
一种单片机固件在线升级的方法,如图1,包括:
S100.获取单片机主程序运行区域Run Area的Image A程序,备份程序存储区域Backup Area存放未激活的Image B程序;
S200.主机发送固件待升级固件首帧,主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验;
S300.当握手信号校验成功后,将Image A和Image B程序块按单片机最小可擦除单元2KB分块,并对存放ImageA和Image B程序的主程序运行区域Run Area和备份程序存储区域Backup Area分别分配96KB空间,对缓存区域Cache Area分配2KB空间,对Image A程序索引数组和Image A程序索引数组进行赋值并储存;
S400.当主机发送试运行Image B程序命令,Image A程序将跳转至BootLoader程序,在BootLoader程序中,首先关闭所有中断,然后利用缓存区域Cache Area,按预设规则,将主程序运行区域Run Area和备份程序存储区域Backup Area中的ImageA和Image B程序的96kB数据进行交换;
S500.当交换完成所有Image数据,BootLoader程序将跳转至主程序运行区域RunArea,当前主程序运行区域Run Area区域存放的是Image B程序,如果程序运行正常,主机可发送确认命令,Image B程序将修改复位运行标志为0x0B,则下次复位或者上电后BootLoader跳转运行的Image程序是ImageB。
为了更好地理解本实施例,如图2,为支持本方法进行单片机固件在线升级,首先单片机内部FLASH区域划分以下几部分:①BootLoader区域Boot Area;②主程序运行区域Run Area;③备份程序存储区域Backup Area;④缓存区域Cache Area;⑤索引区域IndexArea;⑥其他数据区域OtherArea。
BootArea位于单片机上电后默认启动区域,该区域用于存放BootLoader程序,其空间占用根据具体项目而定,本方案BootLoader基本功能占用空间推荐为5kB;
Run Area为一整块连续FLASH空间,该区域用于存放当前运行程序,其空间大小根据具体功能而定。为了方便FLASH区域擦除,建议该区域起始地址为单片机可擦除单元的起始地址,总大小为整数N倍的单片机可擦除FLASH最小单元;
Backup Area为另外一整块连续FLASH空间,该区域用于存放备用程序或下载待升级程序,其大小与Run Area一致,且空间起始地址同为单片机可擦除单元的起始地址;
Cache Area为除上述区域外的一块可擦除最小单元FLASH空间,用于存放RunArea和Backup Area数据交换时临时存放的数据区域,该区域主要功能防止掉电后无法恢复正在交换的数据区域;
Index Area为两块独立的最小可擦除FLASH空间Index Area A和Index AreaB,该区域要求可存放下Run Area索引N和Backup Area索引N以及一个8字节有效标号,及大于等于(2N+8)字节大小。如果最小可擦除FLASH空间小于(2N+8),则可用多个最小可擦除FLASH区域拼接使用;
OtherArea为项目中用于存放其他数据的区域。
在本实施例S200中,如图3,待升级Image程序由以下几部分组成:①握手信息,该信息长度为8字节;②Image总字节长度,该信息长度为4字节;③Image校验和,该信息长度为2字节;④Image版本信息;⑤Image执行代码。以上部分信息根据描述规则合成最终的待升级Image程序。
主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验,包括:ImageA程序校验握手信息是否匹配,如果不能匹配则反馈错误信息,如果通过握手校验,则反馈成功握手,Image A程序将擦除备份程序存储区域Backup Area数据,将Image B程序标注为不可运行,并将接收到的Image长度、Image校验和以及Image版本信息存储至备份程序存储区域Backup Area,然后等待后续升级数据。
在本实施例S200中,单片机继续接收Image数据,直至Image数据接收完成。然后Image程序通过Image长度和Image校验和进行数据校验,如果检验失败,则反馈错误信息,如果校验通过则将Image B标注为可运行且反馈主机成功。
在本实施例的S300中,对Image A程序索引数组和Image A程序索引数组进行赋值并储存,具体为:当前Image A程序存放在主程序运行区域Run Area,则其索引数组ImageA_Array[48]={0,0,0,…,0},而Image B程序存放在备份程序存储区域Backup Area,则其索引数组为ImageB_Array[48]={1,1,1,…,1};当前的索引ImageA_Array[48]和ImageB_Array[48]存放在Index Area A,且Index AreaB区域为可写入状态,其中,Index Area A和Index Area B为索引区域Index Area两块独立的最小可擦除FLASH空间。
其中,索引区域Index Area可存放下主程序运行区域Run Area索引N和备份程序存储区域Backup Area索引N以及一个8字节有效标号,即空间大于等于(2N+8)字节大小;如果最小可擦除FLASH空间小于(2N+8),则可用多个最小可擦除FLASH区域拼接使用。
在本实施例的S400中,如图4和5,按预设规则,将主程序运行区域Run Area和备份程序存储区域Backup Area中的ImageA和Image B程序的96kB数据进行交换,具体预设规则包括:
S401.首先将ImageA程序中的第n个2kB数据写入到缓存区域Cache Area中;
S402.将ImageA_Array[48]数组中第一个数据由0变成2,即ImageA_Array[48]={2,0,0,…,0},然后将索引ImageA_Array[48]和ImageB_Array[48]的最新数据写入到Index Area B,同时将8字节标号在FlagA标号的基础上加1保存在Index Area B中,即FlagB等于2,擦除Index Area A以供后续写入;
S403.将主程序运行区域Run Area中的第一块2kB的FLASH区域擦除;
S404.将ImageB程序中的第1个2kB数据写入主程序运行区域Run Area第一个2kB区域;
S405.ImageB_Array[48]数组中第一个数据由1变成0,即ImageB_Array[48]={0,1,1,…,1},然后将索引ImageA_Array[48]和ImageB_Array[48]的最新数据写入到IndexArea A,同时将8字节标号在FlagB标号的基础上加1保存在Index Area A中,即FlagA等于3,擦除Index Area B以供后续写入;
S406.将备份程序存储区域Backup Area中的第一块2kB的FLASH区域擦除;
S407.将缓存区域Cache Area中的数据写入到备份程序存储区域Backup Area第一块2kB FLASH区域;
S408.ImageA_Array[48]数组中第一个数据由2变成1,即ImageA_Array[48]={1,0,0,…,0},然后将索引ImageA_Array[48]和ImageB_Array[48]的最新数据写入到IndexAreaB,同时将8字节标号在FlagA标号的基础上加1保存在Index AreaB中,即FlagB等于4,擦除Index Area A以供后续写入;
S409,擦除缓存区域Cache Area,以供后续交换使用;
S410.重复上述步骤401-S409,重复48次可将主程序运行区域Run Area和备份程序存储区域Backup Area的96kB数据进行交换。
本实施例公开的一种单片机固件在线升级的方法,包括:获取单片机主程序运行区域Run Area的Image A程序,备份程序存储区域Backup Area存放未激活的Image B程序;主机发送固件待升级固件首帧,主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验;当握手信号校验成功后,将Image A和Image B程序块按单片机最小可擦除单元2KB分块,并对存放ImageA和Image B程序的主程序运行区域Run Area和备份程序存储区域Backup Area分别分配96KB空间,对缓存区域Cache Area分配2KB空间,对Image A程序索引数组和Image A程序索引数组进行赋值并储存;当主机发送试运行Image B程序命令,ImageA程序将跳转至BootLoader程序,在BootLoader程序中,首先关闭所有中断,然后利用缓存区域Cache Area,按预设规则,将主程序运行区域Run Area和备份程序存储区域BackupArea中的ImageA和Image B程序的96kB数据进行交换;当交换完成所有Image数据,BootLoader程序将跳转至主程序运行区域Run Area,当前主程序运行区域Run Area区域存放的是Image B程序,如果程序运行正常,主机可发送确认命令,Image B程序将修改复位运行标志为0x0B,则下次复位或者上电后BootLoader跳转运行的Image程序是ImageB。
本发明解决了现有技术中,固件在线升级需要主机判定当前运行程序是运行区域还是备份区域,且不能升级当前运行区域的程序,同时还需要提供两份地址编译后的固件给主机,主机需要判定固件地址信息才能进行固件在线升级的问题。
实施例2
基于实施例1的基础上,如果在交换Run Area和Backup Area过程中突然掉电,此时,Run Area和Backup Area区域各自存放部分ImageA和ImageB,以及Cache中可能存放其中某一块Image的数据。
具体的,此时单片机固件在线升级的方法,还包括:
通电复位后,首先检查Index Area A和Index AreaB中对应的8字节标号,如果Index Area A中的标号大于Index AreaB中标号,表示Index Area A为有效Index数组页,从而将其中的数据取出赋值给ImageA_Array[48]和ImageB_Array[48];
BootLoader检查ImageA_Array[48]和ImageB_Array[48]中的数组中的参数,检查如果发现其中有参数为2,如果参数是2则代表ImageA的第n块有效数据存放在缓存区域Cache Area中,此时需要将该数据搬运回主程序运行区域Run Area或者备份程序存储区域Backup Area;
假设ImageA_Array[48]的第n个数据为2,检查ImageB_Array[48]数组中第n个参数是否为0,如果是0,此时ImageA的第n块有效数据存放在缓存区域Cache Area中,ImageB的第n块有效数据存放在主程序运行区域Run Area中,备份程序存储区域Backup Area中的数据为无效数据;首先将备份程序存储区域Backup Area中第n块区域擦除,然后将缓存区域Cache Area数据搬运回备份程序存储区域Backup Area中的第n块区域;
检查试运行标志是否为0x0A或者0x0B,如果是0x0A,则判定当前Run Area需要运行ImageA;反之运行ImageB;如果不是0x0A或者0x0B,则检查复位运行标志是否为0x0A或者0x0B,如果是0x0A,则判定当前Run Area需要运行ImageA,反之运行ImageB;
如果当前在Run Area区域需要运行的是ImageA,则需要将ImageA数据完整搬运至Run Area中;检查ImageA_Array[48]数组中的所有参数是否为0,如果其中某些参数为1,则需要参照S401-410交换Run Area和Backup Area对应数据块,直至所有ImageA数据处于主程序运行程序Run Area中;然后跳转至主程序运行程序Run Area运行Image程序。
本实施公开的一种单片机固件在线升级的方法,是对实施1的一种补充,适用于实施例1中如果在交换Run Area和Backup Area过程中突然掉电的情况。
应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。
在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。
本领域技术人员还应当理解,结合本文的实施例描述的各种说明性的逻辑框、模块、电路和算法步骤均可以实现成电子硬件、计算机软件或其组合。为了清楚地说明硬件和软件之间的可交换性,上面对各种说明性的部件、框、模块、电路和步骤均围绕其功能进行了一般地描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本公开的保护范围。
结合本文的实施例所描述的方法或者算法的步骤可直接体现为硬件、由处理器执行的软件模块或其组合。软件模块可以位于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动磁盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质连接至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。该ASIC可以位于用户终端中。当然,处理器和存储介质也可以作为分立组件存在于用户终端中。
对于软件实现,本申请中描述的技术可用执行本申请所述功能的模块(例如,过程、函数等)来实现。这些软件代码可以存储在存储器单元并由处理器执行。存储器单元可以实现在处理器内,也可以实现在处理器外,在后一种情况下,它经由各种手段以通信方式耦合到处理器,这些都是本领域中所公知的。
上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。

Claims (5)

1.一种单片机固件在线升级的方法,其特征在于,包括:
S100.获取单片机主程序运行区域Run Area的Image A程序,备份程序存储区域BackupArea存放未激活的Image B程序;
S200.主机发送固件待升级固件首帧,主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验;
S300.当握手信号校验成功后,将Image A和Image B程序块按单片机最小可擦除单元2KB分块,并对存放ImageA和Image B程序的主程序运行区域Run Area和备份程序存储区域Backup Area分别分配96KB空间,对缓存区域Cache Area分配2KB空间,对Image A程序索引数组和Image B程序索引数组进行赋值并储存;
S300中,对Image A程序索引数组和ImageB程序索引数组进行赋值并储存,具体为:当前Image A程序存放在主程序运行区域Run Area,则其索引数组ImageA_Array[48]={0,0,0,…,0},而Image B程序存放在备份程序存储区域Backup Area,则其索引数组为ImageB_Array[48]={1,1,1,…,1};当前的索引ImageA_Array[48]和ImageB_Array[48]存放在Index Area A,且Index Area B区域为可写入状态,其中,Index Area A和Index Area B为索引区域Index Area两块独立的最小可擦除FLASH空间;索引区域Index Area存放下主程序运行区域Run Area索引N字节大小和备份程序存储区域Backup Area索引N字节大小以及一个8字节大小有效标号,即索引区域Index Area空间大于等于2N+8字节大小;如果最小可擦除FLASH空间小于2N+8,则可用多个最小可擦除FLASH区域拼接使用;
S400.当主机发送试运行Image B程序命令,Image A程序将跳转至BootLoader程序,在BootLoader程序中,首先关闭所有中断,然后利用缓存区域Cache Area,按预设规则,将主程序运行区域Run Area和备份程序存储区域Backup Area中的ImageA和Image B程序的96kB数据进行交换;
S400中,按预设规则,将主程序运行区域Run Area和备份程序存储区域Backup Area中的ImageA和Image B程序的96kB数据进行交换,具体预设规则包括:
S401.首先将ImageA程序中的第n个2kB数据写入到缓存区域Cache Area中;
S402.将ImageA_Array[48]数组中第n个数据由0变成2,然后将索引ImageA_Array[48]和ImageB_Array[48]的最新数据写入到Index Area B,同时将8字节标号在FlagA标号的基础上加1保存在Index Area B中,即FlagB等于2,擦除Index Area A以供后续写入;其中,FlagA和FlagB分别为ImageA和Image B程序的标志位;
S403.将主程序运行区域Run Area中的第n块2kB的FLASH区域擦除;
S404.将ImageB程序中的第n个2kB数据写入主程序运行区域Run Area第一个2kB区域;
S405.ImageB_Array[48]数组中第n个数据由1变成0,然后将索引ImageA_Array[48]和ImageB_Array[48]的最新数据写入到Index Area A,同时将8字节标号在FlagB标号的基础上加1保存在Index Area A中,即FlagA等于3,擦除Index Area B以供后续写入;
S406.将备份程序存储区域Backup Area中的第n块2kB的FLASH区域擦除;
S407.将缓存区域Cache Area中的数据写入到备份程序存储区域Backup Area第n块2kB FLASH区域;
S408.ImageA_Array[48]数组中第n个数据由2变成1,然后将索引ImageA_Array[48]和ImageB_Array[48]的最新数据写入到Index Area B,同时将8字节标号在FlagA标号的基础上加1保存在Index Area B中,即FlagB等于4,擦除Index Area A以供后续写入;
S409,擦除缓存区域Cache Area,以供后续交换使用;
S410.n依次取1到48,重复上述步骤S401-S409,将主程序运行区域Run Area和备份程序存储区域Backup Area的96kB数据进行交换;
S500.当交换完成所有Image数据,BootLoader程序将跳转至主程序运行区域RunArea,当前主程序运行区域Run Area区域存放的是Image B程序,如果程序运行正常,主机可发送确认命令,Image B程序将修改复位运行标志为0x0B,则下次复位或者上电后BootLoader跳转运行的Image程序是ImageB。
2.如权利要求1所述的一种单片机固件在线升级的方法,其特征在于,S200中,主机发送固件在线升级握手信号,包括:握手信息、Image长度、Image校验和和Image版本信息。
3.如权利要求1所述的一种单片机固件在线升级的方法,其特征在于,S200中,主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验,包括:Image A程序校验握手信息是否匹配,如果不能匹配则反馈错误信息,如果通过握手校验,则反馈成功握手,ImageA程序将擦除备份程序存储区域Backup Area数据,将Image B程序标注为不可运行,并将接收到的Image 长度、Image校验和以及Image版本信息存储至备份程序存储区域BackupArea,然后等待后续升级数据。
4.如权利要求3所述的一种单片机固件在线升级的方法,其特征在于,主程序运行区域Run Area的ImageA程序对待升级固件首帧进行校验,还包括:单片机继续接收Image数据,直至Image数据接收完成;然后Image程序通过Image长度和Image校验和进行数据校验,如果检验失败,则反馈错误信息,如果校验通过则将Image B标注为可运行且反馈主机成功。
5.如权利要求1所述的一种单片机固件在线升级的方法,其特征在于,当主程序运行区域Run Area和备份程序存储区域Backup Area过程中突然掉电时,主程序运行区域RunArea和备份程序存储区域Backup Area各自存放部分ImageA和ImageB,缓存区域CacheArea中可能存放其中某一块Image的数据;此时,预设规则还包括:
通电复位后,首先检查Index Area A和Index Area B中对应的8字节标号,如果IndexAreaA中的标号大于Index Area B中标号,表示Index Area A为有效Index数组页,从而将其中的数据取出赋值给ImageA_Array[48]和ImageB_Array[48];
BootLoader检查ImageA_Array[48]和ImageB_Array[48]中的数组中的参数,检查如果发现其中有参数为2,如果参数是2则代表ImageA的当前块有效数据存放在缓存区域CacheArea中,此时需要将该数据搬运回主程序运行区域Run Area或者备份程序存储区域BackupArea;
假设ImageA_Array[48]的第n个数据为2,检查ImageB_Array[48]数组中第n个参数是否为0,如果是0,此时ImageA的第n块有效数据存放在缓存区域Cache Area中,ImageB的第n块有效数据存放在主程序运行区域Run Area中,备份程序存储区域Backup Area中的数据为无效数据;首先将备份程序存储区域Backup Area中第n块区域擦除,然后将缓存区域Cache Area数据搬运回备份程序存储区域Backup Area中的第n块区域;
检查试运行标志是否为0x0A或者0x0B,如果是0x0A,则判定当前Run Area需要运行ImageA;反之运行ImageB;如果不是0x0A或者0x0B,则检查复位运行标志是否为0x0A或者0x0B,如果是0x0A,则判定当前Run Area需要运行ImageA,反之运行ImageB;
如果当前在Run Area区域需要运行的是ImageA,则需要将ImageA数据完整搬运至RunArea中;检查ImageA_Array[48]数组中的所有参数是否为0,如果其中某些参数为1,则需要参照S401-S410交换Run Area和Backup Area对应数据块,直至所有ImageA数据处于主程序运行程序Run Area中;然后跳转至主程序运行程序Run Area运行Image程序。
CN202210730604.6A 2022-06-24 2022-06-24 一种单片机固件在线升级的方法 Active CN115220758B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210730604.6A CN115220758B (zh) 2022-06-24 2022-06-24 一种单片机固件在线升级的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210730604.6A CN115220758B (zh) 2022-06-24 2022-06-24 一种单片机固件在线升级的方法

Publications (2)

Publication Number Publication Date
CN115220758A CN115220758A (zh) 2022-10-21
CN115220758B true CN115220758B (zh) 2023-06-02

Family

ID=83609307

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210730604.6A Active CN115220758B (zh) 2022-06-24 2022-06-24 一种单片机固件在线升级的方法

Country Status (1)

Country Link
CN (1) CN115220758B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116541042B (zh) * 2023-05-25 2024-01-16 深圳市航顺芯片技术研发有限公司 一种固件升级方法、控制芯片和智能家电
CN116795297B (zh) * 2023-08-18 2023-11-17 江苏云途半导体有限公司 一种存储设备、存储方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111176702A (zh) * 2019-12-16 2020-05-19 京信通信系统(中国)有限公司 固件升级方法、装置、计算机设备和存储介质
CN113254048A (zh) * 2021-06-21 2021-08-13 深之蓝(天津)水下智能科技有限公司 引导程序更新方法、装置、设备及计算机可读介质
WO2022093197A1 (en) * 2020-10-27 2022-05-05 Hewlett-Packard Development Company, L.P. Firmware overwrites using queues and pointers
CN114489732A (zh) * 2022-01-27 2022-05-13 深圳市深视智能科技有限公司 一种更新设备的fpga固件的方法、装置及电子设备

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105912356B (zh) * 2016-03-31 2019-04-09 武汉光迅科技股份有限公司 一种支持版本回退的光模块固件程序在线升级方法
CN107608705A (zh) * 2017-09-29 2018-01-19 深圳市瑞科慧联科技有限公司 一种无线wifi视频设备及其固件升级方法
CN107908496A (zh) * 2017-11-21 2018-04-13 东峡大通(北京)管理咨询有限公司 用于在mcu固件出错后自动恢复的方法和mcu
CN109117168A (zh) * 2018-08-29 2019-01-01 拓攻(南京)机器人有限公司 无人机固件更新方法、装置、无人机及存储介质
CN109189451A (zh) * 2018-10-25 2019-01-11 京信通信系统(中国)有限公司 一种固件升级方法及装置
CN113377392B (zh) * 2020-03-09 2024-03-29 瑞昱半导体股份有限公司 可后台升级固件的系统及后台升级固件方法
CN214376406U (zh) * 2021-04-08 2021-10-08 北京车和家信息技术有限公司 集成电路、车载控制器以及车辆

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111176702A (zh) * 2019-12-16 2020-05-19 京信通信系统(中国)有限公司 固件升级方法、装置、计算机设备和存储介质
WO2022093197A1 (en) * 2020-10-27 2022-05-05 Hewlett-Packard Development Company, L.P. Firmware overwrites using queues and pointers
CN113254048A (zh) * 2021-06-21 2021-08-13 深之蓝(天津)水下智能科技有限公司 引导程序更新方法、装置、设备及计算机可读介质
CN114489732A (zh) * 2022-01-27 2022-05-13 深圳市深视智能科技有限公司 一种更新设备的fpga固件的方法、装置及电子设备

Also Published As

Publication number Publication date
CN115220758A (zh) 2022-10-21

Similar Documents

Publication Publication Date Title
CN115220758B (zh) 一种单片机固件在线升级的方法
US7089549B2 (en) Updating flash memory
US6477616B1 (en) Storage device, storage system, memory management method, recording medium, and computer data signal
US6317827B1 (en) Method and apparatus for fault tolerant flash upgrading
CN101313287B (zh) 经由嵌入式控制器初始化快闪存储设备
US7197613B2 (en) Nonvolatile memory
US5406529A (en) Flash non-volatile memory
US9335953B2 (en) Memory system in which extended function can easily be set
EP1591893A1 (en) Method and system for fail-safe updating of boot code
JPH07210395A (ja) ファームウェアメンテナンス方式
CN101727401B (zh) 连接表的回复方法
WO2006107086A1 (en) Storage device, memory managing apparatus, memory managing method, and program
JP3576625B2 (ja) フラッシュメモリカードのデータ管理方法およびそのデータ管理方法を使用したデータ処理装置
US8667242B2 (en) Data access method and system, storage medium controller and storage system
JPH0830515A (ja) フラッシュeepromを用いたデータ処理装置
JP3472008B2 (ja) フラッシュメモリ管理方法
CN103092659A (zh) 脱离仿真器支持环境的dsp软件升级系统及其升级方法
US6745324B1 (en) Dynamic firmware image creation from an object file stored in a reserved area of a data storage device of a redundant array of independent disks (RAID) system
US20030005212A1 (en) Method and apparatus for dynamically modifying a stored program
CN110609695A (zh) 一种光模块的固件升级方法,系统及光模块
CN102650971B (zh) 存储器管理方法、存储器控制器与存储器储存装置
JPH07141479A (ja) Icメモリカードおよびそのicメモリカードを使用したファイル管理システム
CN116795297B (zh) 一种存储设备、存储方法及装置
CN116594661B (zh) 一种编译阶段确保固件与工程匹配的单片机升级方法
JP4575112B2 (ja) ファームウェアの書換方法、ディスクドライブ装置、及び情報処理システム

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant