OTA升级讲解

一、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升级:

点击验证:

升级成功:

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值