单片机OTA升级:高效无线更新的秘密
目录
一、概念与意义
二、工作原理
1.服务器端:
2.设备端:
三、流程步骤
1.OTA 升级过程概述
2.APP 阶段
(一)下载固件到A区域
(二)计算校验和与配置 Flag
3.Bootloader 阶段
(一)检查Flag值
(二)解密与转移固件
(三)备份当前 APP
(四)搬移固件到片上 Flash
(五)跳转与确认
四、总结
五、应用场景
六、优势与局限性
1.优势:
2.局限性:
七、注意事项
一、概念与意义
基于单片机的OTA(Over-the-Air)升级是指通过无线通信的方式,对单片机中的程序或数据进行更新,而无需将单片机从设备中拆卸下来进行有线连接的升级方式。
其意义在于:
1.方便快捷:可以在不接触硬件的情况下实现程序更新,大大提高了升级的效率。
2.降低本:减少了因人工拆卸和重新安装单片机所带来的时间和人力成本。
3.实时更新:可以及时修复程序中的漏洞、添加新功能,提高设备的性能和稳定性。
二、工作原理
1.服务器端:
-开发人员在服务器上准备好新的程序固件。
-服务器将固件进行打包,并通过无线通信网络(如Wi-Fi、蓝牙、GPRS等)推送给设备。
2.设备端:
-单片机通过无线模块接收服务器推送的固件更新信息。
-对接收的固件进行校验,确保其完整性和正确性。
-将新固件写入到特定的存储区域。
-完成写入后,重新启动单片机,使新的程序生效。
三、流程步骤
以下是对上述OTA升级过程的详细分析:
1.OTA 升级过程概述
OTA 升级在带有外挂flash(W25Q64)和EEPROM的系统中进行,利用两个512KB区域(A区域和B区域)实
现安全可靠的固件升级。整个升级过程分为APP阶段和Bootloader阶段,确保在不影响设备正常使用的情况下完
成升级,并提供备份和恢复机制。
2.APP 阶段
(一)下载固件到A区域
1.在APP中的一个线程进行OTA操作,用户可以在手表等设备正常使用的同时进行后台升级,提高了用户体验的
便利性。
2.首先将固件下载到外挂flash的A区域。这个过程需要确保下载的稳定性和完整性,可以采用断点续传等技术来
应对网络不稳定的情况。
(二)计算校验和与配置 Flag
1.下载完成后,计算固件的校验和,以确认固件的完整性。校验和算法可以选择常见的CRC(循环冗余校验)等,
确保固件在传输过程中没有被损坏或篡改。
2.如果校验和正确,表明固件完整,将升级的Flag(存储在EEPROM上)进行配置,以通知 Bootloader 阶段有完
整的固件可供升级。
结果就是:外挂Flash的A区域暂存了最新接受的固件包,注意此时的固件包是被加密的。此时如果通过了固件的完
整性验证,则会对标志位进行置位
3.Bootloader 阶段
(一)检查Flag值
1.在Bootloader 启动过程中,首先检查EEPROM上的Flag值。如果Flag 值表示固件已经完整地存放在外部
Flash的A区域,那么Bootloader 开始执行升级操作。
2.这个检查过程确保了只有在有合法的升级请求时才进行后续的复杂操作,提高了系统的稳定性和安全性。
(二)解密与转移固件
1.Bootloader将A区域的固件一部分一部分地解密并放到B区域。由于SRAM一般很小,不可能装下一整个固
件,所以采用每次处理1K的方式,与Flash的擦除单位相匹配,提高了操作的效率和灵活性。
2.这个过程需要确保解密算法的正确性和安全性,防止固件被恶意篡改或窃取。
(三)备份当前 APP
1.将当前内部正常运行的APP存入A区域,覆盖掉原来的A区域,作为备份区域。这样在升级出现问题时,可以
恢复到之前的版本,提高了系统的可靠性和可恢复性。
2.备份过程需要确保数据的完整性和准确性,避免备份数据损坏导致无法恢复。
(四)搬移固件到片上 Flash
1.接着将B区域的已解密固件搬移到STM32的片上Flash的APP区域。这个过程需要确保数据的正确传输和存
储,避免出现数据丢失或错误。
2.搬移完成后,将Flag修改,表明可升级的固件已经迁移到内部Flash,防止下次重启再次进行不必要的迁移操
作。
(五)跳转与确认
1.最后,进行跳转至片上flash的APP区域,进入APP后,再次修改Flag,确认已经启动成功。这个过程确保了
系统能够正常启动并运行新的固件版本。
2.跳转和确认过程需要确保系统的稳定性和正确性,避免出现启动失败或异常情况。
复位后程序首先执行的是BootLoader程序,所以想要实现app切换需要进行一次复位。
在BootLoader中会检查外挂Flash中的标志位,若标志位表明当前有可更新的固件则BootLoader会执行固件升级的
逻辑。此时首要的任务是将外挂Flash中A区域的加密固件解密,将解密后的固件转存到外挂Flash的B区域中。
需要注意两点:
-
1.固件较大、SRAM内存受限,所以是分段取出A区域中的固件放入SRAM中进行解密的,每次处理1K正好和Flash
的擦除单位匹配。
2.这些逻辑都是BootLoader程序的逻辑,也就是说当前运行的是BootLoader程序,并非片上Flash中的app
结果为:
现在就可以将解密后的最新固件加载到片上Flash中了。另外,为了防止最新固件无法正常运行,还需要做一个版本
回溯机制,即将当前片上Flash中的可正常运行的app暂存起来,存储到已完成使命的外挂Flash中A区域。
四、总结
整个OTA升级过程设计合理,充分考虑了系统的稳定性、安全性、可靠性和可恢复性。通过利用外挂Flash的两
个区域、EEPROM和Bootloader的协同工作,实现了在不影响设备正常使用的情况下进行安全可靠的固件升级。
同时,采用分块处理和备份机制,提高了升级过程的灵活性和可恢复性,为设备的持续优化和改进提供了有力支
持。
五、应用场景
1.智能家居设备:如智能插座、智能灯泡、智能门锁等,可以通过OTA升级不断添加新功能,提高用户体验。
2.工业自动化设备:可以远程更新程序,提高设备的稳定性和可靠性,减少维护成本。
3.医疗设备:可以及时修复程序中的漏洞,确保设备的安全性和准确性。
4.物联网设备:可以实现大规模设备的远程升级,提高管理效率。
六、优势与局限性
1.优势:
-灵活性高:可以随时进行升级,不受时间和地点的限制。
-可扩展性强:可以方便地添加新功能和修复漏洞。
-提高设备的使用寿命:通过不断升级,可以使设备始终保持最新的性能和功能。
2.局限性:
-依赖无线通信:如果无线通信不稳定,可能会导致升级失败。
-安全风险:如果固件被篡改或恶意攻击,可能会导致设备故障或安全问题。
-对存储容量要求高:需要一定的存储容量来存储新固件和备份旧固件。
七、注意事项
1.确保无线通信的稳定性:在进行OTA升级时,要确保设备与服务器之间的无线通信稳定,避免因通信中断导致
升级失败。
2.校验固件的完整性和正确性:在下载和写入固件之前,要对固件进行严格的校验,确保其完整性和正确性,防止
因固件损坏导致设备故障。
3.备份旧固件:在写入新固件之前,最好备份旧固件,以便在升级失败时可以恢复到旧版本。
4.注意安全问题:要采取一定的安全措施,如加密通信、验证数字签名等,防止固件被篡改或恶意攻击。
5.测试升级过程:在实际应用中,要对OTA升级过程进行充分的测试,确保升级的稳定性和可靠性。