OTA入门(基于ESP-IDF)

主要参考资料:
OTA介绍: https://mp.weixin.qq.com/s/6rxt3_bwilvGvVlIfRdKQQ
ESP-IDF文档 ESP HTTPS 空中升级 (OTA)链接: https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/system/ota.html
ESP-IDF文档 ESP HTTPS OTA 升级: https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/system/esp_https_ota.html
B站视频《【乐鑫学院】| ESP32:OTA升级介绍「开发者自制」》

OTA简介

OTA:Over-the-Air Technology,即空中下载技术。
OTA升级:通过OTA方式实现固件或软件的升级。

只要是通过无线通信方式实现升级的,都可以叫OTA升级,比如网络/蓝牙。
通过有线方式进行升级,叫本地升级,比如通过UART,USB或者SPI通信接口来升级设备固件。
在这里插入图片描述

优点

1.通过OTA方式,可以对分布在各地的设备进行软件升级,而不必让运维人员各地奔波。
2.物联网平台支持通过OTA方式进行设备固件升级,是智能设备修复系统漏洞、实现系统升级的手段。
3.在迅速变化和发展的物联网市场,新的产品需求不断涌现,因此对于智能硬件设备的更新需求就
变得空前高涨,设备不再像传统设备一样一经出售就不再变更。通过固件升级用户提供更好的服务。

实现原理

核心流程:
1.制作升级包
2.下载升级包
3.验签升级包
4.更新程序
在这里插入图片描述

下载方式

不管采用OTA方式还是有线通信方式升级,下载升级包的方式包括后台式下载和非后台式下载两种模式。

后台式下载

在升级的时候,新固件在后台悄悄下载,即新固件下载属于应用程序功能的一部分,在新固件下载过程中,应用可以正常使用,也就是说整个下载过程对用户来说是无感的,下载完成后,系统再跳到BootLoader程序,由BootLoader完成新固件覆盖老固件的操作。比如智能手机升级Android或者iOS系统都是采用后台式方式,新系统下载过程中,手机可以正常使用。
在这里插入图片描述

非后台式下载

在升级的时候,系统需要先从应用程序跳入到BootLoader程序,由BootLoader进行新固件下载工作,下载完成后BootLoader继续完成新固件覆盖老固件的操作,至此升级结束。早先的功能机就是采用非后台来升级操作系统的,即用户需要先长按某些按键进入bootloader模式,然后再进行升级,整个升级过程中手机正常功能都无法使用。
在这里插入图片描述

新旧固件覆盖模式

新固件替换老固件覆盖的两种方式:双区模式和单区模式。

双区模式

双区模式中老固件和新固件在flash中各占一块bank(存储区)。假设老固件放在bank0(运行区)中,新固件放在bank1(下载区)中,升级的时候,应用程序先把新固件下载到bank1中,只有当新固件下载完成并校验成功后,系统才会跳入BootLoader程序,然后擦除老固件所在的bank0区,并把bank1的新固件拷贝到bank0中。

后台式下载必须采用双区模式进行升级。

优点:升级过程中出现问题或者新固件有问题,它还可以选择之前的老固件老系统继续执行而不受其影响。
缺点:多占用flash空间的一个存储区,在系统资源比较紧张的时候较为困难。
在这里插入图片描述

单区模式

单区模式的非后台式下载只有一个bank0(运行区),老固件和新固件共享这一个bank0。升级的时候,进bootloader程序后先擦除老固件,然后直接把新固件下载到同一个bank中,下载完成后校验新固件的有效性,新固件有效升级完成,否则要求重来。

优点:跟双区模式相比,单区模式节省了Flash空间的一个bank,在系统资源比较紧张的时候,单区模式是一个不错的选择。
缺点:如果升级过程中出现问题或者新固件有问题,单区模式碰到这种情况就只能一直待在bootloader中,然后等待再次升级尝试,此时设备的正常功能已无法使用,从用户使用这个角度来说,可以说此时设备已经“变砖”了。

在这里插入图片描述

相比较,双区模式虽然牺牲了很多存储空间,但是换来了更好的升级体验。

数字签名

签名
服务器给设备发送消息,服务器先计算出消息的消息摘要,然后使用自己的私钥加密消息摘要,被加密的消息摘要就是签名。

验签
设备收到消息后,也会使用和服务器相同的方法计算消息摘要,然后用服务器的公钥解密签名,并与自己计算出来的消息摘要进行比较,如果相同则说明消息是服务器发送给设备的,同时,服务器也无法否认自己发送消息给设备的事实。

(设备使用服务器的公钥解密签名文件的过程,叫做"验签")
在这里插入图片描述

数字签名的作用
保证数据完整性,机密性和发送方角色的不可抵赖性。

消息摘要函数
MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512

数字签名算法
RSA、Rabin方式、ElGamal方式、DSA

MCU OTA升级

1.制作升级包

通过签名工具使用签名算法对固件进行数字签名,签名后的文件即为升级包。

升级包的内容一般包括firmware、header和signature value。
Firmware:固件
Header:头部信息。存放配置信息,如版本号、产品类型等。
Signature value:签名值。对firmware和header签名后的值。

在这里插入图片描述
签名工具
上位机软件,能计算固件的签名值,并将固件打包为升级包的格式。

固件签名
上位机软件先计算整个固件的消息摘要,使用非对称密码的私钥对摘要进行加密,被加密后的消息摘要数据就是签名值。

固件签名的意义
计算hash值可以识别固件是否被篡改和伪装,确保固件的完整性。使用非对称秘钥签名方便后续验证升级包身份的合法性。

2.下载升级包

根据上位机软件和MCU设备约定的通信协议,上位机软件将升级包通过OTA方式发送给MCU设备,MCU设备收到数据后,根据通信协议解析出升级包的数据,并将升级包的数据保存到存储器中。

通信协议的作用:通讯双方约定俗成地用于数据交流的格式。

下载的方式:
1.在应用程序中下载:后台式
2.在BootLoader中下载:非后台式

3.验签升级包

MCU设备接收完所有的升级包后,先计算升级包中固件的摘要,然后使用非对称秘钥的公钥解密升级包的签名值,如果解密出来的固件摘要与自己计算的摘要相同,则验签成功。

4.更新固件

验签成功保证了固件的完整性和合法性后,MCU设备从应用程序进入BootLoader程序,在BootLoader程序中将flash中的新固件数据搬运到旧固件的存储区,将其覆盖。然后BootLoader程序启动固件运行,此时固件为新固件。

flash固件数据更新:擦除flash,写flash。

ESP32的OTA

升级过程

ESP32中属于非后台式、双分区模式。下面是OTA升级的整个过程。
在这里插入图片描述
在这里插入图片描述

应用程序回滚

下面是有可能出现的三种情况。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值