【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的广播名称
  • 现在已经验证升级成功
相关推荐
捷瑞电子工坊8 小时前
嵌入式蓝桥杯从零点亮第一个LED
stm32·蓝桥杯·cubemx·嵌入式·led·ll·锁存
新晨单片机设计10 小时前
S004R-基于STM32单片机智能门禁系统(密码、指纹、人脸、刷卡、蓝牙)【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件·proteus
桀人10 小时前
MCU系统架构——总线——统一编址
stm32·单片机·嵌入式硬件
可乐鸡翅好好吃11 小时前
通讯协议--硬件模拟和软件模拟
stm32·嵌入式硬件
Zw-awa11 小时前
STM32F103C8T6 最小系统板:从型号差异到启动方式
stm32
LCG元1 天前
STM32F103 驱动 HX711 称重实战:DOUT 就绪时序、增益切换陷阱与两点标定精度实测
stm32·单片机·嵌入式硬件
染予1 天前
代码中相关C语言知识点总结
stm32
优信电子1 天前
STM32 驱动 DHT30 测量环境温湿度(兼容SHT30):从时序解析到完整代码实战
stm32·嵌入式·传感器·sht30·温湿度·环境测量·dht30
小李不想当小白1 天前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
Zw-awa1 天前
点亮第一盏 LED:STM32 的 GPIO 到底在控制什么
stm32