NUCLEO-WBA55CG的核心板提供了蓝牙功能,官方文档说明:支持Bluetooth® 5.3规范的2.4 GHz射频收发器。同时,NUCLEO-WBA55CG还具有1 MB的Flash存储器和128 KB的SRAM。基于这样的配置,可以实现通过蓝牙来做设备固件更新,也就是OTA。
ST提供的官方演示代码STM32Cube_FW_WBA_V1.5.0中,提供了WBA55CG的OTA样例,可以用于实际测试和参考。
一、OTA升级基本原理
先看一张图:
再来看看官方提供的样例:
在这三个样例中,BLE_ApplicationInstallManager负责OTA升级管理和应用程序跳转,BLE_HeartRate_ota和BLE_p2pServer_ota则是具体的应用。
他们在Flash中的存储位置如下:
- 0x08000000:BLE_ApplicationInstallManager
- 0x08006000:BLE_HeartRate_ota或者BLE_p2pServer_ota
当系统启动的时候,首先从0x08000000运行用户程序,进入BLE_ApplicationInstallManager,然后由BLE_ApplicationInstallManager负责检查是否要进行OTA升级或者跳转到具体的应用程序。
因为从 0x08006000 开始存放实际的App,所以BLE_ApplicationInstallManager的bin文件大小不能超过0x6000
二、BLE_ApplicationInstallManager浅析
BLE_ApplicationInstallManager的代码结构如下:
在main.c中,关键函数调用如下:
- BootModeCheck:运行模式检查,确定跳转到app还是执行ota处理
- CheckFwAppValidity:检查固件程序是否有效
- JumpFwApp:跳转到App
- DeleteSlot:删除存储区域
- MoveToActiveSlot:将下载的区块移动活动区块
- JumpSelectionOnPowerUp:上电跳转选择
BLE_ApplicationInstallManager启动后,首先会进入BootModeCheck,检查当前的启动状态,然后决定下一步的处理流程。
具体的处理流程如下:
在对应的ld文件中,可以看到FLash的定义:
三、App中ota的处理
在 BLE_HeartRate_ota 和 BLE_p2pServer_ota调用了ota_app部分的代码,来进行ota数据接收和写入Flash的处理。
ota_app部分的核心调用为:OTA_Notification,刚兴趣可以详细查看了解。
在 BLE_HeartRate_ota 和 BLE_p2pServer_ota 项目的对应ld文件中,也有FLash的具体定义:
四、编译烧录测试
分别编译三个项目BLE_ApplicationInstallManager、BLE_HeartRate_ota、BLE_p2pServer_ota。
如果是用STM32CubeIDE打开编译,需要注意设置:
否则编译时会出错。
编译完成后,先烧录BLE_ApplicationInstallManager,然后烧录BLE_HeartRate_ota、BLE_p2pServer_ota两者之一。
这里烧录BLE_ApplicationInstallManager 和BLE_HeartRate_ota。
烧录前,先将开发板自带的STLink升级到最新版本:
然后依次烧录:
BLE_ApplicationInstallManager:
BLE_HeartRate_ota:
并将 BLE_HeartRate_ota、BLE_p2pServer_ota的bin文件发送到手机上:
然后在手机安装ST BLE Sensor APP软件:
安装ST BLE Sensor APP后,打开点击下放的刷新,即可找到当前开发板运行状态的设备:
直接点击设备名称,就可以连接并进入功能界面:
BLE_HeartRate_ota提供了模拟数据供演示,可以点击Heart Rate查看:
如果点击FUOTA,则进入OTA升级界面:
在这个界面,选择之前上传到手机上的bin文件,即可进行升级:
等待升级完成:
升级完成后,开发板会自动运行新的App,到ST BLE Sensor APP的首界面即可查看到:
同样可以进入其管理界面:
BLE_p2pServer_ota提供了一个LED可以用于管理点亮:
同样的,也可以再次进入FUOTA界面进行升级:
借助于蓝牙的支持,通过FUOTA方式,就可以很方便的升级固件了。
|