【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的广播名称
  • 现在已经验证升级成功
相关推荐
兆龙电子单片机设计2 小时前
【STM32项目开源】STM32单片机智能家居安防控制系统
stm32·单片机·开源·毕业设计·电子信息
d111111111d2 小时前
STM32定时器中断配置详解:以TIM2为例
笔记·stm32·单片机·嵌入式硬件·学习
QK_002 小时前
STM32--USART(串口)
stm32·单片机·嵌入式硬件
钟佩颖19 小时前
STM32
stm32·单片机·嵌入式硬件
Zeku20 小时前
20251228 - Linux 驱动开发硬件管理机制笔记
stm32·freertos·linux驱动开发·linux应用开发
benjiangliu1 天前
STM32教程-02-STM32复习C语言
c语言·stm32·嵌入式硬件
DIY机器人工房1 天前
简单理解:为什么错误计数器一般要选 uint32_t 类型?
stm32·单片机·嵌入式硬件·嵌入式·diy机器人工房
lingzhilab1 天前
零知IDE——基于STM32F103RBT6的PAJ7620U2手势控制WS2812 RGB灯带系统
stm32·单片机·嵌入式硬件
三佛科技-187366133971 天前
BP85956D集成VCC电容电机驱动BUCK电源芯片(12V300mA应用电路)
stm32·单片机·物联网