【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.

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广播名称是这个
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固件方便为了和升级之前区分,修改广播名称,前文已经提到
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的广播名称
    在这里插入图片描述
  • 现在已经验证升级成功
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值