评测二 OTA固件升级 这期本来想往深那写,先把用手机升级的效果贴上来: 但STM32CubeMonitor-RF+dongle进行升级一些bug让我放弃这个念头,bug如下: 1. dongle在插入后串口号扫描不对,会出一连串重复串口号 2. 明明待升级在广播,手机也能看到,但dongle就是扫不到提示“No device found” 3. 不管是STM32WB55还是STM32WBA52,不管STM32CubeMonitor-RF是旧版本还是新版本,死活升不了,一升就提示“Device not detected”或者超时无回复 图1 Bug1:串口频繁出现连串重复号 图2 Bug2:经常手机能扫描到STM32CubeMonitor-RF就是扫不到 图3 Bug3:扫描到进行升级无法进行提示“Device not detected” 既然dongle这条路走不通,就老老实实用手机来升吧,众所周知OTA肯定有bootloader和APP两部分:此处接收文件和跳转是APP,文件搬移和引导是bootloader。bootloader功能最小化,占用0x0800 0000~0x0800 4000,大小为16K,APP占用0x0800 4000~0x080F FFFF,大小为1008K;而APP必须要有OTA service,其配置为: 图4 OTA service配置 具体见《an5247-overtheair-application-and-wireless-firmware-update-for-stm32wb-series-microcontrollers-stmicroelectronics》P15。EWARM下的.icf就对比了有OTA和无OTA的flash分布,有OTA的最前面方bootloader(前文已述),而且要定义OTA_TAG_region包括TAG_OTA_START、TAG_OTA_END: 图5 带OTA功能的.icf区域划分 下面进入正题,首先IAR编译NUCLEO-WBA52CG\Applications\BLE\BLE_ApplicationInstallManager\EWARM\BLE_ApplicationInstallManager工程生成bootloader.hex,并用STM32CubeProgrammer烧录该固件;然后依次打开BLE_HeartRate_ota和BLE_p2pServer_ota,后两者均生成.bin和.hex两种格式固件: 图6 HeartRate-ota和p2pServer-ota工程生成固件 同样先烧录HeartRate-ota.hex注意bootloader和APP都是给的hex,目的就是直接带有地址划分,然后打开ST BLE Toolbox连接HR_43心率设备,选择升级文件p2pServer-ota.bin,注意升级文件又是bin格式,在”Over the Air Update Server”标签下点击“Select the type of device”选择STM32WBA,点击“Select file”选择传到手机的p2pServer-ota.bin,点击右下角箭头就开启升级过程,OTA分20B一包(浪费了蓝牙5.3的247B MTU特性,翻到用蓝牙4.x的特性),不过速度很快,升级完bootloader自动引导运行新固件可以看到新设备“p2pS_43”: 图7 由HeartRate-ota升级成p2pServer-ota
|