1 概念
OTA为OverTheAir的缩写,只要是通过无线通信方式实现固件或软件升级的,都可以叫OTA升级,比如网络/蓝牙。目前已广泛应用于物联网、车联网领域,例如智能手机、手表、智能家居等。
2 优点
2.1、通过OTA方式,可以对分布在各地的设备进行软件升级,而不必让运维人员各地奔波。
2.2、物联网平台支持通过OTA方式进行设备固件升级,是智能设备修复系统漏洞、实现系统升级的手段。
2.3、在迅速变化和发展的物联网市场,新的产品需求不断涌现,因此对于智能硬件设备的更新需求就变得空前高涨,设备不再像传统设备一样一经出售就不再变更。通过固件升级用户提供更好的服务。
3、OTA系统架构
3.1、各终端设备可单独通过无线网络,以http-get的形式访问OTA云服务器;
3.2、本地服务端定时访问OTA云服务器以更新固件版本,各终端设备再访问本地服务端,来更新固件;
4、终端设备OTA流程
一般OTA的程序由3部分组成:BootLoader区存放启动代码,App1区存放应用代码,App2区存放暂存的升级代码。BootLoader可以理解成是引导程序, 它的作用是启动正式的App应用程序。换言之, BootLoader是一个程序, App也是一个程序, BootLoader程序是用于启动App程序的
5、程序流程图
5.1、MCU启动阶段流程图
5.2、在线获取固件版本
6、OTA升级实例
6.1、STM32参照网上的例程分别编写bootloader、APP的代码,并将.bin包合并进行烧写;
6.2、这里分享一下ESP32的OTA编译过程
首先参考ESP32-OTA的官方代码,这里ESP32会自动帮你完成bootloader的编写以及APP中http-get升级固件的代码,只需你手动修改一些参数配置。
在SDK configuration editor中配置自定义Partition Table,手动修改partitions.csv,
根据需求对flash空间进行分配编写,这里分配了2个OTA存储区。
程序编译会根据你的配置成功后会自动生成4个.bin文件,再通过ESP32的flash_download_tool进行烧录,注意根据自己的partition table修改偏移位置。
$PROJECT_PATH/version.txt用于定义应用程序的版本,在http-get过程中,实际就是通过这个版本来判断是否需要进行升级。
7、实际测试
这里利用第三方软件在电脑上搭建http文件服务,并将合并生成的.bin固件上传至文件服务器,将实际的路径添加到终端的程序中,这就是终端通过http-get访问的路径。将终端设备与电脑连至同一局域网,即可进行OTA测试。
第一次版本检测发现不一致,于是进行OTA版本升级,升级完成后重启,再次比对版本,版本一致则无需升级。
#ifdef DEVICE_TYPE_BRUSH #define CONFIG_EXAMPLE_FIRMWARE_UPG_URL "http://172.16.171.221:8070/brush.bin" #endif