【BLE】STM32WB55_官方OTA

1. 资料来源

本文根据视频资料总结:

链接地址:
https://www.bilibili.com/video/BV1Ls4y1Y7G2?spm_id_from=333.788.videopod.sections&vd_source=1162555127890799f245b5868d0f6dd1

2. 资料整理

  • RSS:安全认证作用
  • SFSA 是FLASH中安全区和非安全区的起始地址
  • 注意:下载新的加密协议栈首先保存在非安全区的空闲区。
  • 然后RSS验证新版本的协议栈2.0。
  • RSS固件将新协议栈搬运至非安全的FLASH地址
  • 如果验证不通过,则直接终止该过程
  1. 芯片在BOOT启动之后先判断是否有OTA的请求(判断是否进入User APP)
  2. 如果有进入OTA app, 没有进入 用户app
  3. 在User app 中收到OTA request 可通过Reboot service 复位进入到 BOOT
  4. 在OTA APP中,收到OTA client 的更新请求,接收推送的固件包
  5. 可以选择更新用户应用固件 或者 协议栈固件 RSS固件
  • 应用程序中添加重启的特性。这条特性是官方自定义的特性
  • 通过该特性可以切换到BOOT
  • 可以设置重启后的进入 APP还是 BOOT
  • 在 BOOT中设置OTA服务有三个特性
  • 特性1:临时保存文件的基地址(接收固件先保存到临时地址)(可以控制OTA的进行状态)
  • 特性2:告知对方固件已经接收完成,将进行重启
  • 特性3:进行固件原始数据的传输
  • 在BOOT中广播需要配置为 OTA特性
  • TX_POWER_LEVEL :广播发射功率等级
  • COMPLETE_NAME: 广播设备名称
  • MANUF_SPECIFIC:厂商自定义的数据
  • FLAGS: 数据标记
  1. 在APP中建立连接并发现服务
  2. 接收到Reboot 特性进行重启
  1. 进入BOOT
  2. 在BOOT中建立连接并发现服务
  3. 客户端 写入文件类型和基地址
  4. 客户端 写入固件原始数据
  5. 客户端 写入文件更新完成和校验
  6. 服务器 固件接收完成进行固件的校验和更新
  7. 服务器 然后发送通知 告知固件更新完成
  8. 服务器 进行重启
  9. 进入APP


  • BOOT起始地址 :0x0800 0000 FLASH起始地址
  • APP起始地址 : 0x0800 7000 (0x7000 = 28K)
  • RAM1起始地址: 0x2000 0004 ,前面四字节的数据被Reboot Request特性用来重启的时候保存OTA的请求


3. 测试验证

3.1 APP

stm32cubewb-v1-20-0\STM32Cube_FW_WB_V1.20.0\Projects\STM32WB_Copro_Wireless_Binaries\STM32WB5x

  • 读取协议栈版本
  • 这是官方 APP的例程

stm32cubewb-v1-20-0\STM32Cube_FW_WB_V1.20.0\Projects\P-NUCLEO-WB55.Nucleo\Applications\BLE\BLE_p2pServer_ota\EWARM

  • 修改优化等级
  • 输出为bin文件
  • 链接文件中配置为【资料整理】章节修改点
  • APP起始地址已经偏移

  • RAM 起始地址已经偏移

  • 开启OTA

    /******************************************************************************

    • Over The Air Feature (OTA) - STM Proprietary
      ****************************************************************************/
      #define BLE_CFG_OTA_REBOOT_CHAR 1/
      < REBOOT OTA MODE CHARACTERISTIC */
  • 关于收到Reboot 特性的操作,详细看官方代码

    /* USER CODE BEGIN P2PS_STM_App_Notification_P2P_Evt_Opcode */
    #if(BLE_CFG_OTA_REBOOT_CHAR != 0)
    case P2PS_STM_BOOT_REQUEST_EVT:
    APP_DBG_MSG("-- P2P APPLICATION SERVER : BOOT REQUESTED\n");
    APP_DBG_MSG(" \n\r");

    复制代码
        *(uint32_t*)SRAM1_BASE = *(uint32_t*)pNotification->DataTransfered.pPayload;
        NVIC_SystemReset();
        break;

    #endif
    /* USER CODE END P2PS_STM_App_Notification_P2P_Evt_Opcode */

  • 全部编译完成看到生成的bin固件

  • 直接下载 APP固件

  • 下面可以修改广播名为SRV2 ,用于区分升级前APP还是升级后APP

  • 升级前广播名SRV1, 升级后广播名SRV2.

c 复制代码
static const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME , 'P', '2', 'P', 'S', 'R', 'V', '1'};
修改为:
static const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME , 'P', '2', 'P', 'S', 'R', 'V', '2'};
这里纠正一下广播名改成其他的,ST BLE sensor可能识别不到
  • 编译生成一个升级用的APP固件,

3.2 Bootloader

  • 官方BOOT地址

\stm32cubewb-v1-20-0\STM32Cube_FW_WB_V1.20.0\Projects\P-NUCLEO-WB55.Nucleo\Applications\BLE\BLE_Ota\EWARM

  • BOOT 起始地址
  • BOOT空间大小
  • RAM 起始地址

  • BOOT广播名称是这个
c 复制代码
static const char a_LocalName[] = { AD_TYPE_COMPLETE_LOCAL_NAME, 'S', 'T', 'M','_', 'O', 'T', 'A' };
  • 具体的实现看代码
  • 编译后直接下载
  • 到这里单片机已经下载了APP和BOOT的固件了,

3.3 测试工具-上位机

  • 将上述烧录固件的单片机复位后运行
  • 使用【nRF Connect】蓝牙工具可以扫描到APP运行程序
  • 安装[ST BLE Sensor]工具,官方视频教程里是旧版本,新的版本不好用
  • 链接地址
    https://www.st.com.cn/zh/embedded-software/stblesensor.html#
  • 打开软件后可以扫描识别到我们设备
  • 点击后连接
  • 点击FUOTA
  • 选择这个APP固件
  • 注意这个APP固件方便为了和升级之前区分,修改广播名称,前文已经提到
c 复制代码
static const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME , 'P', '2', 'P', 'S', 'R', 'V', '2'};


  • 显示升级进度
  • 升级成功
  • 可以看到扫描到的APP广播名称已经为 SRV2,说明固件已经成功替换
  • 再次验证一下,把flash全片擦除,只烧录BOOT,复位运行可以看到BOOT广播名为STM_OTA
  • 连接并升级APP

  • APP升级成功后,扫描到APP的广播名称
  • 现在已经验证升级成功
相关推荐
弄曲幽篁3 小时前
stm32 USB虚拟串口
stm32·单片机·嵌入式硬件
学嵌入式的小杨同学3 小时前
STM32 进阶封神之路(四十一)FreeRTOS 中断管理、软件定时器、内存管理与低功耗模式|工业级实战完整版
vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件·嵌入式实时数据库
yu85939584 小时前
基于MSP430 LaunchPad的蔬菜基地分布式无线低功耗温湿度监测系统
分布式·stm32·嵌入式硬件
学嵌入式的小杨同学4 小时前
STM32 进阶封神之路(四十)FreeRTOS 队列、信号量、互斥锁精讲|任务通信、同步、资源保护(超详细图文版)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
爱分享的阿Q1 天前
STM32现代化AI开发环境搭建:从Keil到VSCode+AI的范式转移
人工智能·vscode·stm32
bubiyoushang8881 天前
利用STM32实现Modbus通信(RTU从机方案)
stm32·单片机·嵌入式硬件
杰杰桀桀桀1 天前
4*4无时延矩阵键盘(非阻塞)--附代码链接
stm32·单片机·嵌入式硬件·矩阵·计算机外设·无时延矩阵键盘
cmpxr_1 天前
【单片机】STM32Fxx启动模式怎么接
stm32·单片机·嵌入式硬件
篮子里的玫瑰1 天前
STM32 时序计算指南:时钟周期与波特率深入剖析
stm32·单片机·嵌入式硬件
feifeigo1231 天前
基于STM32F407和WM8978的MP3播放程序设计与实现
stm32·单片机·嵌入式硬件