一文快速了解OTA——线MCU空中升级
本帖最后由 种菜娃娃 于 2024-9-19 17:49 编辑何为OTA?
OTA(Over the Air),一种通过蓝牙等无线连接对MCU固件进行升级和更新的技术,也称OTA DFU(Device Firmware Update)或FOTA(Firmware OTA)。相比UART、USB、SPI等有线升级方式,OTA摆脱了接线的束缚,支持手机等便携工具。对于已在现场部署的设备,OTA是实现固件升级的理想途径。
市面上OTA升级的叫法五花八门、细节不尽相同,但总归离不开新固件的下载和旧固件的覆盖,这就涉及到APP(Application)和IAP(In Application Programming)两个基本概念:APP指用户程序;IAP是将新固件写入APP区覆盖旧固件的程序。有了APP和IAP,就可以介绍OTA的两大派别了:
[*]后台式升级
主打一个两步走:
Step1. APP接收新固件,存放在Flash的空白区域。
Step2. MCU复位,IAP程序先执行,IAP发现新固件,将新固件写到APP区覆盖旧固件,升级完成。
上述操作中,新固件的下载由用户程序APP执行,新固件接收过程中用户程序可以正常运行,对使用者来说无感,因此常称作后台升级或静默升级。后台升级使用空白的Flash空间暂存新固件,新旧固件各占用一块Flash区域,因此也属于双区升级或备份升级。
后台式OTA在新固件下载、校验完成后才执行旧固件的覆盖,因此固件下载、校验异常不影响设备正常工作。但暂存新固件占用Flash空间,用户程序APP的可用空间打对折,Flash利用率较低,适于容量较大的MCU。
[*]非后台式升级
一些小容量MCU可能装不下新旧两个固件,那么可以省去新固件的暂存环节,同时新固件的接收交由IAP执行。IAP接收新固件直接覆盖APP区域的旧固件,升级过程中,APP区域的用户程序无法运行,因此属于非后台式升级,由于Flash中不再预留新固件暂存空间,因此称作单区升级。非后台式OTA的IAP接收新固件前会擦除旧固件,因此固件下载、校验异常时Flash中已没有旧固件可用,只能停留在IAP中再次尝试直到升级成功。
无论后台式OTA还是非后台式OTA,都追求更快的升级速度。将用户代码调用的库,如蓝牙协议栈等,从APP中分离出来,在Flash中开辟LIB区域单独存放,这样OTA升级文件可以不包含LIB部分,数据量的减少就大幅提升了升级速度。此类处理方式便叫做固定库模式。
下图为非后台式升级的单区+固定库模式。
在部分应用场景中,上述常见模式会使用增强的校验和额外的加密机制,以确保固件的完整性并增强安全性。在一些文章中,IAP有时会放到Bootloader中,或以用户Bootloader等名称出现,虽然名称不同,核心功能是一样的。
后台/非后台OTA-双/单区的对应关系
上文图示的两种常用OTA方式在CH585、CH592等青稞RISC-V无线MCU的SDK中配有参考例程和详细文档。提供WCH_AssemblingFileTool工具,用于APP、IAP、LIB等hex文件的合并,供ISP工具下载。提供安卓和iOS端的OTA APP,支持基于hex和BIN文件的OTA升级。
页:
[1]