手把手教你STM32的远程升级 ota升级详细流程

上次发过SD卡的Bootloader离线升级后,应大家的要求,这次就讲一下STM32的OTA远程升级 。
OTA又叫空中下载技术,是通过移动通信的空中接口实现对移动终端设备数据进行远程管理的技术,还能提供移动化的新业务下载功能 。
要实现OTA功能,至少需要两块设备,分别是服务器与客户端 。服务器只有一个,客户端可有多个 。服务器通过串口与PC机连接,需要下载的镜像文件存放于PC机,命令执行器给服务器发命令及镜像文件 。首先命令执行器控制服务器广播当前可用的镜像文件信息,客户端收到信息后进行对比,若有与自身相匹配的镜像,则向服务器请求数据 。服务器收到请求后向命令执行器索取固定大小的块,再点对点传送给客户端 。镜像传输完毕后,客户端进行校验,完成后发送终止信号 。
一. 升级方式的对比
OTA升级与平时用到的SD卡升级、串口升级等等大体原理上是一样的,都是对MCU的Flash进行操作而已 。
收到升级指令——>MCU复位或者跳转到Boot程序区——>擦除对应的Flash区域——>获取APP数据——>写入FLASH数据——>校验——>跳转到APP应用程序区
OTA与其他本地升级的区别就是:获取数据的方式不同 。比如串口升级,就是通过上位机传输到MCU串口上的数据;SD卡升级,就是通过读取SD卡,把程序通过SPI传输到MCU上;而OTA升级,就是通过带无线传输的模块,把程序传输到MCU上 。例如:蓝牙、Wifi、GSM等等 。不过大部分的无线模块,通过串口把数据传输到MCU上的,只是服务端不再是PC端了,而是网络服务器 。
二. 硬件选择
MCU我这里选用的是STM32F030F4P6的芯片,16K的Flash,应该是ST产品中Flash空间比较小的一种,为的就是体现一下小容量的单片机也可以进行OTA升级 。
无线模块我使用的是ESP-8266,WIfi传输方式,应该也是比较大众化的一款模组 。(TTL串口连接MCU)
OTA相关的硬件没有了,剩下的无所谓,都是其他功能的,最好有个LED灯,可以明显的看出是否升级成功 。

手把手教你STM32的远程升级 ota升级详细流程

文章插图

手把手教你STM32的远程升级 ota升级详细流程

文章插图
三. 网络服务器的选择
网络服务器多种多样,常用的有阿里云、百度云、腾讯云、移动云等等,有条件的,还可以使用自己的服务器 。总之需要实现:网络服务器可以与我们的无线模块进行大数据通信 。
我这里选用的是OneNet移动云(OTA服务之前是免费,现在是前100个设备免费,之后每增加一个设备1元钱永久),我感觉OneNet相对于阿里云较为简单,没有阿里云那么繁琐,不过阿里云还是比OneNet更专业一点(个人见解),其他的没有用过,大家都可以去试试 。
四. 网络服务器的传输方式
我这里使用的是OneNet的服务器,它的OTA服务是通过Http协议进行传输的,有对应的API,我们可以通过OneNet释放的API去访问OTA服务 。
五. OTA升级流程
OneNet的OTA升级流程主要为6步:
1. 上报版本号—客户端(MCU)上报当前的一个版本号
2. 检测升级任务—检查服务器是否有待升级的版本
3. 检测Token有效性—检查Token密钥,可省略
4. 下载固件—应用程序传输
5. 上报升级状态—上报服务端升级是否成功,不成功有对应的响应码

手把手教你STM32的远程升级 ota升级详细流程

文章插图
六. OneNet服务端配置
1.首先注册OneNet的账号,进入开发者中心,在导航栏选择全部产品->远程升级OTA板块 。