admin管理员组文章数量:1608904
一、OTA技术
空中编程(英语:Over-the-air programming,缩写OTA)是一种为设备分发新软件、配置,乃至更新加密密钥(为例如移动电话、数字视频转换盒或安全语音通信设备——加密的双向无线电)的方法。OTA的一项重要特征是,一个中心位置可以向所有用户发送更新,其不能拒绝、破坏或改变该更新,并且该更新为立即应用到频道上的每个人。用户有可能“拒绝”OTA更新,但频道管理者也可以将其踢出频道。
OTA:Over-the-Air Technology,即空中下载技术。
OTA升级:通过OTA方式实现固件或软件的升级。
只要是通过无线通信方式实现升级的,都可以叫OTA升级,比如网络/蓝牙---OTA升级
通过有线方式进行升级,叫本地升级,比如通过UART,USB或者SPI通信接口来升级设备固件--IAP升级
IAP升级---通过有线的方式进行升级
1、OTA升级核心:
首先管理者可以通过无线通信技术(wifi 4G 5G NBIOT......)
客户端:
客户端的设备在每次上电之后,都需要请求服务器对比当前正在运行的程序版本,和服务器中的程序版本对比是否一致,如果不一致,服务器下发新的程序(bin文件),用户选择是否需要升级。
也就是说,使用OTA升级的设备,每一次使用的代码都有一个版本号
2、协议制定:
服务器和用户之间定义好的进行OTA升级的协议:
例如:
zigbee协调器和STM32网关之间的数据传输---协议
请求:帧头+指令+数据类型+数据长度+校验+帧尾 (不是每一次指定协议都要写这些,根据自己的实际情况)
请求服务器更新:CMD--0X61(请求更新程序) 0110 0001
0xF1+0X61+0xc1(char)+len+CRC+0XF0
len=256
服务器接收到之后给应答
1.校验客户发送的数据包书否正确(crc)
2.校验正确,解析数据
3.根据请求的数据类型和长度去做出合适的的应答
应答格式:正确应答--CMD+0X80
0xF1+0XE1+0xc1(char)+len+有效数据+CRC+0XF0
当数据量很大的时候,协议也需要随之优化
帧头:0xaa+0xbb+0xcc
帧尾:0xa0+0xb0+0xc0
客户端接收数据--串口(接收中断 空闲中断)
1.校验
2.解析数据
如果数据量太大怎么办????
首先,添加DMA进行数据传输
其次,在DMA数据传输之上添加队列,作为缓存区保存数据
最后,优化收发协议.
3、OTA 升级优势:
1.通过OTA方式,可以对分布在各地的设备进行软件升级,而不必让运维人员各地奔波。
2.物联网平台支持通过OTA方式进行设备固件升级,是智能设备修复系统漏洞、实现系统升级的手段。
3.在迅速变化和发展的物联网市场,新的产品需求不断涌现,因此对于智能硬件设备的更新需求就变得空前高涨,设备不再像传统设备一样一经出售就不再变更。通过固件升级用户提供更好的服务。
4、OTA升级流程:
1.制作升级包,上传服务器
2.下载升级包
3.验签升级包
4.更新程序
5、下载方式:
后台下载
在升级的时候,新固件在后台悄悄下载,即新固件下载属于应用程序功能的一部分,在新固件下载过程中,应用可以正常使用,也就是说整个下载过程对用户来说是无感的,下载完成后,系统再跳到BootLoader程序,由BootLoader完成新固件覆盖老固件的操作。比如智能手机升级Android或者iOS系统都是采用后台式方式,新系统下载过程中,手机可以正常使用。
非后台下载:
在升级的时候,系统需要先从应用程序跳入到BootLoader程序,由BootLoader进行新固件下载工作,下载完成后BootLoader继续完成新固件覆盖老固件的操作,至此升级结束。早先的功能机就是采用非后台来升级操作系统的,即用户需要先长按某些按键进入bootloader模式,然后再进行升级,整个升级过程中手机正常功能都无法使用。
6、新旧固件覆盖模式
新固件替换老固件覆盖的两种方式:双区模式和单区模式。
1)双区模式
双区模式中老固件和新固件在flash中各占一块bank(存储区)。假设老固件放在bank0(运行区)中,新固件放在bank1(下载区)中,升级的时候,应用程序先把新固件下载到bank1中,只有当新固件下载完成并校验成功后,系统才会跳入BootLoader程序,然后擦除老固件所在的bank0区,并把bank1的新固件拷贝到bank0中。
后台式下载必须采用双区模式进行升级。
优点:
升级过程中出现问题或者新固件有问题,它还可以选择之前的老固件老系统继续执行而不受其影响。
缺点:
多占用flash空间的一个存储区,在系统资源比较紧张的时候较为困难。
2)单区模式
单区模式的非后台式下载只有一个bank0(运行区),老固件和新固件共享这一个bank0。升级的时候,进入bootloader程序后先擦除老固件,然后直接把新固件下载到同一个bank中,下载完成后校验新固件的有效性,新固件有效升级完成,否则要求重来。
优点:
跟双区模式相比,单区模式节省了Flash空间的一个bank,在系统资源比较紧张的时候,单区模式是一个不错的选择。
缺点:
如果升级过程中出现问题或者新固件有问题,单区模式碰到这种情况就只能一直待在bootloader中,然后等待再次升级尝试,此时设备的正常功能已无法使用,从用户使用这个角度来说,可以说此时设备已经“变砖”了。
相比较,双区模式虽然牺牲了很多存储空间,但是换来了更好的升级体验。
7、MCU OTA升级
数字签名
签名:
A给B发送消息,A先计算出消息的消息摘要,然后使用自己的私钥加密消息摘要,被加密的消息摘要就是签名。
验签:
B收到消息后,也会使用和A相同的方法计算消息摘要,然后用A的公钥解密签名,并与自己计算出来的消息
摘要进行比较,如果相同则说明消息是A发送给B的,同时,A也无法否认自己发送消息给B的事实。
(B使用A的公钥解密签名文件的过程,叫做"验签")
密码学基础概念:
1.什么是消息摘要?
2.什么是非对称加解密?私钥与公钥?
3.什么是数字签名?
数字签名的作用:
保证数据完整性,机密性和发送方角色的不可抵赖性。
消息摘要函数:
MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512
数字签名算法:
RSA、Rabin方式、ElGamal方式、DSA
2.1 制作升级包
通过签名工具使用签名算法对固件进行数字签名,签名后的文件即为升级包。
升级包的内容一般包括firmware、header和signature value。
Firmware:固件
Header:头部信息。存放配置信息,如版本号、产品类型等。
Signature value:签名值。对firmware和header签名后的值。
签名工具:
上位机软件,能计算固件的签名值,并将固件打包为升级包的格式。
固件签名:
上位机软件先计算整个固件的消息摘要,使用非对称密码的私钥对摘要进行加密.
被加密后的消息摘要数据就是签名值。
固件签名的意义:
计算hash值可以识别固件是否被篡改和伪装,确保固件的完整性。
使用非对称秘钥签名方便后续验证升级包身份的合法性。
二、OTA操作部分
1、准备工作:
本地设备--正在使用的硬件模块(开发板)
服务器--我们使用的是阿里云服务器
下载器连接方式:
2、安装PACK包:
否则无法识别到单片机
接下来需要使用的代码说明:
3、bootload代码的更改
1.bootload代码的保存位置
2.bin文件设置
以下路径必须是真是存在的
D:\appaddr\keil529\ARM\ARMCC\bin\fromelf.exe --bin -o Objects\工程文件.bin Objects\工程文件.axf
注意没有换行,以上设置中
以下是用于生成Bin文件
3.输入'w'进入bootload
如果我们大家需要去连接自己的阿里云平台的设备,需要将bootload中的三元组进行更改:
4.三元组的修改
我们需要首先去获取我们设备的三元组信息
{
"ProductKey": "grfdYViGNwS",
"DeviceName": "zz2301_test",
"DeviceSecret": "43e992a58ce66c1a855c68f13c9a9ae4"
}
整合三元组的格式:
/"ProductKey"/"DeviceName"/"DeviceSecret"/"代码的版本(自己定义,长度必须是23个字节)"/
/grfdYViGNwS/zz2301_test/43e992a58ce66c1a855c68f13c9a9ae4/app_dht11_2023112855511/
设置三元组:
如果需要去更改版本号长度,如下宏定义中修改即可
查看设备是否在线:
4、设置我们目前正在运行的代码:
目前这个代码也需要像bootload中一样进行修改:
生成bin文件:
已经连接上阿里云
设备状态:
5、配置升级代码部分:
bin文件修改:
在bin文件最后先添加上cdefcdef分隔标记(4个字节),再加bin文件长度(4字节),再加bin文件的MD5校验(16字节),在加ffffffff结尾(4个字节),共计28字节。
注意:bin文件长度不包含后添加的28字节,就是keil编译过后的bin文件原始长度,同理bin文件的MD5校验也是用原始bin文件。
CertUtil -hashfile 工程文件.bin MD5
在终端模式下使用哈希算法对bin文件进行校验
一定要在bin文件的路径下,打开哈希算法工具
校验整合:
bin文件大小:14460 十六进制 387c 由低到高字节存储--7c38 cdefcdef7c384aa4125e4e48678001cff144f2d3a2acffffffff
通过相关工具对Bin文件进行优化:
导入我们的bin文件,进行修改:
最后选择ASCII HEX格式保存
一定要保存!!!
6、进行OTA升级:
点击验证:
升级成功:
本文标签: OTA
版权声明:本文标题:OTA升级讲解 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728560159a1163799.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论