CN105278998A - 一种单片机固件升级方法 - Google Patents
一种单片机固件升级方法 Download PDFInfo
- Publication number
- CN105278998A CN105278998A CN201510789251.7A CN201510789251A CN105278998A CN 105278998 A CN105278998 A CN 105278998A CN 201510789251 A CN201510789251 A CN 201510789251A CN 105278998 A CN105278998 A CN 105278998A
- Authority
- CN
- China
- Prior art keywords
- upgrading
- chip microcomputer
- district
- variable
- firmware
- 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.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
一种单片机固件升级法,通过将单片机的Flash进行分区,对升级前固件和升级新固件分区存储,防止了升级过程烧写Flash对升级前固件造成影响,使升级前固件不受破坏;同时,通过变量设置,用户可根据实际情况选择所需的固件,升级前固件和升级新固件切换灵活。本发明方法实现过程中,只要Flash本身不存在问题,就不存在固件升级失败,即使出现中断,上电恢复后升级也将会继续即具有断点续传功能,同时,本升级程序不会造成设备崩溃。
Description
技术领域
本发明属于单片机设备固件升级技术领域,涉及一种单片机固件升级方法。
背景技术
无操作系统单片机设备的内存资源很有限,致使这类设备的固件升级过程无法像智能设备的升级方式一样,将新版本的程序接收完毕后再写入到Flash中,如何保证这类设备升级过程的稳定性和可靠性成了单片机程序开发一大问题。
目前对单片机进行固件升级的方式主要有两种,一种是由维护人员亲自到达设备现场使用仿真器或者烧写工具进行固件升级,如果设备分布范围广泛,那么这种升级方式将浪费大量的人力资源,目前这种升级方式仍然在许多单片机设备中被采用。另外一种目前使用的较多的升级方式是在升级过程中不断地用接收到的新程序覆盖旧程序,这种升级方式的不足之处在于:
(1)一旦升级过程出现异常(如断电、设备无故重启)情况将造成设备崩溃;
(2)无法在新旧程序之间自由切换,当然也不支持软件回滚;
(3)升级完成后必须重新启动,否则无法继续处理当前的业务;
(4)可能造成设备崩溃的危险时间较长;
(5)不支持断点续传。
因此提高单片机固件升级的可靠性和稳定性,从根本上杜绝升级本身造成设备崩溃的现象发生,已成为亟待解决的问题。
发明内容
本发明的目的是为了克服已有技术的缺陷,为了解决单片机设备进行固件升级时存在的可靠性差、稳定性低的问题,提出了一种单片机固件升级方法。
本发明方法是通过以下技术方案实现的:
一种单片机固件升级的方法,步骤包括:
步骤一、将单片机的Flash分为Boot区、Flag区、APP1区、APP2区,Boot区用于存储单片机上电程序;Flag区用于存储升级辅助变量;APP1区和APP2区用于存储升级前固件或升级新固件;所述升级辅助变量包括bootflag变量和breakaddr变量,其中当bootflag变量的值为0时,APP1区为主程序区、APP2区为备用升级区,当bootflag变量的值为非0时,APP2区为主程序区、APP1区为备用升级区;所述breakaddr变量的值表示固件升级时Flash的位置;
步骤二、单片机上电启动,检查bootflag变量的值,根据bootflag变量的值判断单片机的主程序区和备用升级区,并且跳转至主程序区执行程序;
步骤三、单片机接收到升级指令后,检查breakaddr变量的值,将breakaddr变量的值填写到响应报文对应字节上,响应报文打包完毕,单片机向升级服务器发送响应报文并等待应答;
步骤四、升级服务器接收到单片机发来的响应报文后,根据响应报文对应字节上的内容决定固件升级开始位置,当响应报文中对应字节内容为0时,升级服务器从升级新固件的起始位置发送升级新固件报文给单片机;当响应报文中对应字节内容为非0时,升级服务器从升级新固件的上次升级中断位置发送升级新固件报文给单片机;
步骤五、单片机接收到升级新固件报文后进行差错检验,若检验结果为正确,则将接收到的固件升级报文写入到备用升级区,同时更新breakaddr变量的值,然后发送检验正确的响应报文给升级服务器;若检验结果为错误,则发送请求数据重传响应报文到升级服务器;
步骤六、当升级服务器收到检验正确的响应报文时,则发送下一包升级新固件报文给单片机;当升级服务器收到请求数据重传响应报文时,则发送当前升级新固件报文给单片机;
步骤七、重复步骤五和步骤六的过程,直至单片机接收到最后一包升级新固件报文并成功写入到备用升级区;此时breakaddr变量将被置0,并更新bootflag变量的值;
步骤八、单片机重新启动,运行升级新固件,升级完成。
有益效果
(1)本发明方法将单片机的Flash进行分区,将新旧固件分区存储,避免了升级过程烧写Flash对原固件造成的影响,使原固件不受破坏;同时,通过变量设置,用户可根据实际情况选择所需的固件,新旧版本固件切换灵活。
(2)本发明方法实现过程中,只要Flash本身不存在问题,就不存在固件升级失败,即使出现中断,上电恢复后升级也将会继续即具有断点续传功能,同时,本升级程序不会造成设备崩溃。
附图说明
图1单片机Flash分区
图2本发明单片机固件升级流程图
具体实施方式
下面结合附图和具体实施例对本发明作进一步的说明。
如图2所示,本发明单片机固件升级方法,其具体实施步骤为:
步骤一、如图1所示,将单片机的Flash按功能分为Boot区、Flag区、APP1区、APP2区。Boot区用于存储单片机上电程序。Flag区用于存储一些升级辅助变量,如bootflag变量决定单片机的主程序区和备用升级区,breakaddr变量存放固件升级时Flash的位置。APP1区和APP2区用于存储升级前固件(即升级时单片机运行的固件)或升级新固件,当bootflag变量的值为0时,APP1区存储升级前固件,此时称APP1区为主程序区,APP2区等待存储升级新固件,此时称APP2区为备用升级区;当bootflag变量的值为非0时,APP2区存储升级前固件,此时称APP2区为主程序区,APP1区等待存储升级新固件,此时称APP1区为备用升级区;一般情况下,APP1区和APP2区大小一致。
步骤二、单片机上电启动,运行上电程序,检查bootflag变量的值,根据bootflag变量的值判断单片机的主程序区和备用升级区,并且跳转至主程序区执行程序,备用升级区用于等待存放升级新固件。当Bootflag变量的值为0时,APP1为主程序区、APP2为备用升级区;Bootflag变量的值为非0时,APP2为主程序区、APP1为备用升级区,主程序区用于存放升级前固件即单片升级时运行的程序。
步骤三、升级服务器通过串口向单片机发送升级指令,单片机接收到升级服务器发送的升级指令后,检查Flag分区中breakaddr变量的值,根据breakaddr变量的值生成响应报文中对应字节的内容(即生成包含breakaddr变量的值的响应报文),响应报文打包完毕,单片机向升级服务器发送响应报文并等待升级服务器的应答。
步骤四、升级服务器接收到单片机发来的响应报文后,检测响应报文内容,根据响应报文内容决定固件升级开始位置,当响应报文内容中对应breakaddr变量的字节内容为0时,说明本次升级为新的升级即上次升级成功,升级服务器从升级新固件的起始位置(0位置)开始发送升级新固件报文给单片机;当响应报文内容中对应breakaddr变量的字节内容为非0时,说明上次升级出现中断,本次升级将继续执行上次升级即为断点续传,升级服务器从升级新固件的上次升级中断位置即breakaddr位置开始发送升级新固件报文给单片机。
步骤五、单片机接收到升级服务器发送的升级新固件报文后进行差错检验,如果检验升级新固件报文正确,则将接收到的升级新固件写入到备用升级区,同时更新breakaddr变量的值,具体为breakaddr+写入到备用升级区中的数据字节数,然后发送检验正确的响应报文给升级服务器;如果检验错误则发送请求数据重传响应报文到升级服务器。
步骤六、升级服务器接收到响应报文进行判断,如果接收到检验正确的响应报文则发送下一包升级新固件报文给单片机;如果接收到请求数据重传响应报文则发送当前升级新固件报文给单片机;
步骤七、重复步骤五和步骤六的过程,直至单片机接收到最后一包升级新固件报文。当单片机接收到最后一包固件升级报文并成功写入到备用升级区后,breakaddr变量将被置0;同时,bootflag变量根据当前数值设定新值,若当前bootflag变量的值为0则将其置为非0,若当前bootflag变量的值为非0则将其置为0,其目的是使APP1区和APP2区在单片机升级时交替存储升级前固件和升级新固件,如本次升级时,存储升级前固件下次将作为备用升级区等待存储升级新固件。最后,单片机发送升级成功响应报文到升级服务器,升级新固件在备用升级区存储完毕。
步骤八、单片机重新启动,运行升级新固件,升级完成。
本发明将单片机Flash划分成区,实现了升级前固件和升级新固件的同时存储,用户可通过设置bootflag变量选用所需固件,本发明方法具有非常高的升级成功率,且操作简单易于实现。
Claims (1)
1.一种单片机固件升级方法,其特征在于,步骤包括:
步骤一、将单片机的Flash分为Boot区、Flag区、APP1区、APP2区,Boot区用于存储单片机上电程序;Flag区用于存储升级辅助变量;APP1区和APP2区用于存储升级前固件或升级新固件;所述升级辅助变量包括bootflag变量和breakaddr变量,其中当bootflag变量的值为0时,APP1区为主程序区、APP2区为备用升级区,当bootflag变量的值为非0时,APP2区为主程序区、APP1区为备用升级区;所述breakaddr变量的值表示固件升级时Flash的位置;
步骤二、单片机上电启动,检查bootflag变量的值,根据bootflag变量的值判断单片机的主程序区和备用升级区,并且跳转至主程序区执行程序;
步骤三、单片机接收到升级指令后,检查breakaddr变量的值,将breakaddr变量的值填写到响应报文对应字节上,响应报文打包完毕,单片机向升级服务器发送响应报文并等待应答;
步骤四、升级服务器接收到单片机发来的响应报文后,根据响应报文对应字节上的内容决定固件升级开始位置,当响应报文中对应字节内容为0时,升级服务器从升级新固件的起始位置发送升级新固件报文给单片机;当响应报文中对应字节内容为非0时,升级服务器从升级新固件的上次升级中断位置发送升级新固件报文给单片机;
步骤五、单片机接收到升级新固件报文后进行差错检验,若检验结果为正确,则将接收到的固件升级报文写入到备用升级区,同时更新breakaddr变量的值,然后发送检验正确的响应报文给升级服务器;若检验结果为错误,则发送请求数据重传响应报文到升级服务器;
步骤六、当升级服务器收到检验正确的响应报文时,则发送下一包升级新固件报文给单片机;当升级服务器收到请求数据重传响应报文时,则发送当前升级新固件报文给单片机;
步骤七、重复步骤五和步骤六的过程,直至单片机接收到最后一包升级新固件报文并成功写入到备用升级区;此时breakaddr变量将被置0,并更新bootflag变量的值;
步骤八、单片机重新启动,运行升级新固件,升级完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510789251.7A CN105278998A (zh) | 2015-11-17 | 2015-11-17 | 一种单片机固件升级方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510789251.7A CN105278998A (zh) | 2015-11-17 | 2015-11-17 | 一种单片机固件升级方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105278998A true CN105278998A (zh) | 2016-01-27 |
Family
ID=55148053
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510789251.7A Pending CN105278998A (zh) | 2015-11-17 | 2015-11-17 | 一种单片机固件升级方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105278998A (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786510A (zh) * | 2016-02-29 | 2016-07-20 | 深圳市美贝壳科技有限公司 | 一种单片机的升级分区系统和安全升级方法 |
CN106406935A (zh) * | 2016-08-29 | 2017-02-15 | 青岛海信电器股份有限公司 | 一种蓝牙芯片ota升级的方法和蓝牙芯片 |
CN107733674A (zh) * | 2016-08-12 | 2018-02-23 | 北京小米移动软件有限公司 | 组件升级方法及终端 |
CN108418707A (zh) * | 2018-01-31 | 2018-08-17 | 武汉虹信通信技术有限责任公司 | 通信系统中双cpld互相在线备份升级方法及业务单板 |
CN109002310A (zh) * | 2018-08-07 | 2018-12-14 | 北京云迹科技有限公司 | 固件升级方法 |
CN109245953A (zh) * | 2018-11-22 | 2019-01-18 | 新华三技术有限公司 | 一种网络配置方法和装置 |
CN109783121A (zh) * | 2019-01-25 | 2019-05-21 | 廊坊新奥燃气设备有限公司 | 一种ota程序升级方法和gprs燃气表 |
CN110633097A (zh) * | 2018-06-21 | 2019-12-31 | 新智数字科技有限公司 | 一种单片机的ota升级方法及装置 |
CN111258600A (zh) * | 2019-11-21 | 2020-06-09 | 华立科技股份有限公司 | 镜像式嵌入式程序固件升级方法 |
CN111475194A (zh) * | 2020-03-20 | 2020-07-31 | 创驱(上海)新能源科技有限公司 | 一种用于新能源汽车控制器的软件升级方法 |
CN111722856A (zh) * | 2019-03-19 | 2020-09-29 | 上海汽车集团股份有限公司 | 车载微控制器中固件的升级方法和装置 |
CN111913727A (zh) * | 2020-08-14 | 2020-11-10 | 电子科技大学中山学院 | 一种采用STM32单片机内部Flash实现AISG-V3协议固件存储的方法 |
CN113918202A (zh) * | 2021-09-16 | 2022-01-11 | 海南云智联科技有限公司 | 一种支持iap功能的单片机远程升级固件的方法与设备 |
CN116560696A (zh) * | 2023-06-20 | 2023-08-08 | 广东保伦电子股份有限公司 | 一种应用数据高占比的单片机分区以及固件升级方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040098427A1 (en) * | 2002-11-18 | 2004-05-20 | Luosheng Peng | Device memory management during electronic file updating |
CN101184055A (zh) * | 2007-12-11 | 2008-05-21 | 腾讯科技(深圳)有限公司 | 一种离线文件的发送、接收、传输方法及装置 |
CN101610501A (zh) * | 2009-07-16 | 2009-12-23 | 中兴通讯股份有限公司 | 设备固件升级系统及方法、设备管理服务器及移动终端 |
CN102129375A (zh) * | 2010-01-12 | 2011-07-20 | 中国移动通信集团公司 | 一种移动终端系统升级的方法和设备 |
CN103885806A (zh) * | 2014-04-02 | 2014-06-25 | 深圳市兰丁科技有限公司 | 机顶盒的系统软件在线升级的实现方法和装置 |
-
2015
- 2015-11-17 CN CN201510789251.7A patent/CN105278998A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040098427A1 (en) * | 2002-11-18 | 2004-05-20 | Luosheng Peng | Device memory management during electronic file updating |
CN101184055A (zh) * | 2007-12-11 | 2008-05-21 | 腾讯科技(深圳)有限公司 | 一种离线文件的发送、接收、传输方法及装置 |
CN101610501A (zh) * | 2009-07-16 | 2009-12-23 | 中兴通讯股份有限公司 | 设备固件升级系统及方法、设备管理服务器及移动终端 |
CN102129375A (zh) * | 2010-01-12 | 2011-07-20 | 中国移动通信集团公司 | 一种移动终端系统升级的方法和设备 |
CN103885806A (zh) * | 2014-04-02 | 2014-06-25 | 深圳市兰丁科技有限公司 | 机顶盒的系统软件在线升级的实现方法和装置 |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786510A (zh) * | 2016-02-29 | 2016-07-20 | 深圳市美贝壳科技有限公司 | 一种单片机的升级分区系统和安全升级方法 |
CN107733674A (zh) * | 2016-08-12 | 2018-02-23 | 北京小米移动软件有限公司 | 组件升级方法及终端 |
CN107733674B (zh) * | 2016-08-12 | 2021-03-09 | 北京小米移动软件有限公司 | 组件升级方法及终端 |
CN106406935A (zh) * | 2016-08-29 | 2017-02-15 | 青岛海信电器股份有限公司 | 一种蓝牙芯片ota升级的方法和蓝牙芯片 |
CN106406935B (zh) * | 2016-08-29 | 2019-10-15 | 青岛海信电器股份有限公司 | 一种蓝牙芯片ota升级的方法和蓝牙芯片 |
CN108418707A (zh) * | 2018-01-31 | 2018-08-17 | 武汉虹信通信技术有限责任公司 | 通信系统中双cpld互相在线备份升级方法及业务单板 |
CN108418707B (zh) * | 2018-01-31 | 2020-12-01 | 武汉虹信科技发展有限责任公司 | 通信系统中双cpld互相在线备份升级方法及业务单板 |
CN110633097A (zh) * | 2018-06-21 | 2019-12-31 | 新智数字科技有限公司 | 一种单片机的ota升级方法及装置 |
CN109002310A (zh) * | 2018-08-07 | 2018-12-14 | 北京云迹科技有限公司 | 固件升级方法 |
CN109245953A (zh) * | 2018-11-22 | 2019-01-18 | 新华三技术有限公司 | 一种网络配置方法和装置 |
CN109783121A (zh) * | 2019-01-25 | 2019-05-21 | 廊坊新奥燃气设备有限公司 | 一种ota程序升级方法和gprs燃气表 |
CN111722856A (zh) * | 2019-03-19 | 2020-09-29 | 上海汽车集团股份有限公司 | 车载微控制器中固件的升级方法和装置 |
CN111722856B (zh) * | 2019-03-19 | 2024-04-09 | 上海汽车集团股份有限公司 | 车载微控制器中固件的升级方法和装置 |
CN111258600A (zh) * | 2019-11-21 | 2020-06-09 | 华立科技股份有限公司 | 镜像式嵌入式程序固件升级方法 |
CN111475194A (zh) * | 2020-03-20 | 2020-07-31 | 创驱(上海)新能源科技有限公司 | 一种用于新能源汽车控制器的软件升级方法 |
CN111913727A (zh) * | 2020-08-14 | 2020-11-10 | 电子科技大学中山学院 | 一种采用STM32单片机内部Flash实现AISG-V3协议固件存储的方法 |
CN113918202A (zh) * | 2021-09-16 | 2022-01-11 | 海南云智联科技有限公司 | 一种支持iap功能的单片机远程升级固件的方法与设备 |
CN116560696A (zh) * | 2023-06-20 | 2023-08-08 | 广东保伦电子股份有限公司 | 一种应用数据高占比的单片机分区以及固件升级方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105278998A (zh) | 一种单片机固件升级方法 | |
CN106569847B (zh) | 一种用于车载系统基于移动网络实现iap远程升级的方法 | |
CN105912356B (zh) | 一种支持版本回退的光模块固件程序在线升级方法 | |
CN102023908B (zh) | 一种引导程序备份方法及装置 | |
US10303459B2 (en) | Electronic system with update control mechanism and method of operation thereof | |
CN105700901B (zh) | 一种启动方法、装置和计算机系统 | |
US20140123121A1 (en) | Rack and method thereof for simultaneously updating basic input output systems | |
CN102238093B (zh) | 防止业务中断的方法和装置 | |
CN110347414A (zh) | 固件更新方法、装置、设备及计算机可读存储介质 | |
CN104007996A (zh) | 一种分布式控制系统的可靠固件升级实现方法 | |
CN105740034A (zh) | Mcu在线升级固件的系统及方法 | |
KR20120052406A (ko) | 펌웨어 이미지 갱신 및 관리 | |
CN102073517A (zh) | 一种嵌入式系统的升级、备份方法和装置 | |
CN102184111B (zh) | 操作系统在线升级方法及带操作系统的设备 | |
CN108509215B (zh) | 一种系统软件的更换方法、装置、终端设备及存储介质 | |
WO2021103745A1 (zh) | 一种引导程序的保护设计方法 | |
CN112947977A (zh) | 一种软件在线升级方法及系统 | |
CN103713925A (zh) | 避免存储阵列在升级过程的业务中断方法和装置 | |
CN108874582A (zh) | 一种系统恢复方法、装置及终端 | |
TWI786871B (zh) | 電腦和系統啓動方法 | |
CN102722408B (zh) | 一种通讯设备软件更新的方法及装置 | |
CN110580167A (zh) | 一种系统升级方法、智能设备及服务器 | |
WO2015154578A1 (zh) | 单板的boot程序远程升级方法、装置及系统 | |
CN110532014A (zh) | 程序升级方法、装置、终端设备及计算机可读存储介质 | |
CN105279011A (zh) | 一种虚拟机可根据镜像进行系统还原的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160127 |
|
WD01 | Invention patent application deemed withdrawn after publication |