STM32WB55开发(6)----FUS更新
STM32WB55开发.6--FUS更新
- 概述
- 视频教学
- 硬件准备
- 存储器映射
- FLASH安全区设置
- SRAM安全区设置
- 通过USB进行下载
- 注意事项
概述
在 STM32WB 微控制器中,FUS(Firmware Upgrade Services)是用于固件升级的一种服务。这项服务可以让你更新设备上的无线栈固件(如蓝牙、Zigbee或 Thread 栈),以及无线 MCU (microcontroller unit) 的系统服务。
FUS 实质上是设备的一部分固件,它可以独立于主应用程序运行,主要负责安全地处理设备固件的升级。这包括检查新固件的有效性,确保新固件被正确地写入设备,以及在出现问题时回滚到旧版本的固件。
总的来说,FUS 是 STM32WB 和其他 STM32 无线微控制器中一个非常重要的组件,可以确保设备固件的安全更新。
最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:6_15061293 。
视频教学
听不到声音的请点击跳转进行观看。
https://www.bilibili.com/video/BV1qj411Y7dX/
STM32WB55
硬件准备
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,新班子使用了MLPF-WB55-01E3的2.4 GHz低通滤波器和陶瓷天线,体积更小。
存储器映射
FUS 在 Flash 存储器中有一个专用空间,该空间取决于 FUS 大小。它还使用 SRAM2a 和 SRAM2b 中的专用空间
以及 SRAM2a(共享表)中的共享空间。由选项字节定义 Flash 存储器 SRAM2a 和 SRAM2b 中的专用空间大小。
若需更多信息,请参见产品参考手册。
与无线协议栈(如果安装)共享专用 Flash 存储器和 SRAM 区域。但在给定时间,只能在 Cortex®-M0+上运行
FUS 或无线协议栈。
FLASH安全区设置
安全CPU2可以通过加载新的用户选项SFSA来修改CPU2的安全起始地址。
从闪存存储器的基地址开始加上[SFSA x 0x1000](包含),直到最后一个闪存存储器地址。当启用CPU2安全性时,CPU2安全区域的最小大小为一个扇区(4K字节)。
例如,一个从地址0x080C 7000(包含)到地址0x080F FFFF(包含)的CPU2安全区域。
SFSA[7:0]包含了安全闪存存储区域第一个4K字节页面的起始地址。
SRAM安全区设置
CPU2安全SRAM2a和SRAM2b区域以1 K字节的粒度定义,并通过安全备份RAM(SRAM2a)起始地址的用户选项(BRSD和SBRSA)以及安全非备份RAM(SRAM2b)起始地址的用户选项(NBRSD和SNBRSA)定义在闪存中。这些偏移由闪存内的安全SRAM2起始地址和CPU2复位向量寄存器(FLASH_SRRVR)中的SBRSA和SNBRSA字段控制。
CPU2安全的SRAM2a区域定义为备份SRAM2a基地址 + [SBRSA x 0x0400](包括),直到最后一个SRAM2a地址。
例如,对于CPU2安全的SRAM2a区域,从地址0x20035000(包括)到地址0x20037FFF(包括),需要将FLASH_SRRVR寄存器编程为SBRSA = 0x14。
任何CPU1的读取访问都不返回数据,并且对CPU2安全SRAM2a区域的写访问会被丢弃并触发总线错误。
当BRSD设置为1时,SRAM2a是非安全的。
CPU2安全的非备份SRAM2b区域定义为非备份SRAM2b基地址 + [SNBRSA x 0x0400](包括),直到最后一个SRAM2b地址。
例如,对于CPU2安全的SRAM2b区域,从地址0x2003EC00(包括)到地址0x2003FFFF(包括),需要将FLASH_SRRVR寄存器编程为SNBRSA = 0x1B。
任何CPU1的读取访问都不返回数据,并且对CPU2安全SRAM2b区域的写访问会被丢弃并触发总线错误。
当NBRSD设置为1时,SRAM2b是非安全的。
FUS固件下载
Firmware Update Service(FUS)是一种用于在STM32WB微控制器上更新固件的功能。FUS下载是指通过FUS服务进行固件更新的过程。通过FUS下载,您可以通过无线方式将新的固件加载到STM32WB设备中,而无需使用传统的有线编程方法。
在ST官网中提供了固件,下载地址:
https://www.st.com/zh/embedded-software/stm32cubewb.html
下载完毕之后,打开该目录,有对应的版本说明文档。
固件升级流程如下所示。
打开STM32CubeProgrammer,连接开发板。
进入固件升级服务,点击Start FUS。
连接成功会弹出如下所示窗口,若没链接成功,可以点击复位键。
可以使用STM32CubeProgrammer软件,通过点击"Read FUS infos"按钮,来读取安装在STM32WB微控制器中的FUS(Firmware Update Service)版本信息。这里的FUS版本为V0.5.3.0
通过打开上述的"Release_Notes.html"说明文档,可以查看固件包中不同MCU所对应的地址差异。
同时这里要求的固件包为V1.2.0,如果不是的话需要进行 STEP 5/6 。
选择相应的固件文件和起始地址后,您可以查看对应的固件等级,并点击"Firmware Upgrade"按钮进行固件升级。
升级成功如下所示。
若出现如下报错,说明没有进行第五步。
需要进行第五步,stm32wb5x_FUS_fw_for_fus_0_5_3.bin 这个二进制文件是用于刷新无线协处理器二进制文件的实用程序。
选中stm32wb5x_FUS_fw_for_fus_0_5_3.bin,同时输入对应的地址进行升级。
成功升级会显示如下所示窗口。
重新读取FUS版本,可以看见已经由之前的V0.5.3.0变为了V1.2.0.0
重新升级stm32wb5x_BLE_Stack_full_fw.bin。
这个时候可以查看到固件是升级成功了的。
最后我们可以进行第八步,设置boot寄存器。
通过USB进行下载
通过USB下载固件的具体流程如下所示。
通过usb进行下载,需要进行一些跳线帽的设置。
同时需要将BOOT0进行上拉以及设置nSWboot0=1为1。
设置nSWboot0=1为1。
切换为USB连接,连接上如下所示。
对于FUS版本,不同的FUS版本对应的步骤不一样。
由于我之前升级过了,可以直接下载固件。
下载成功如下所示。
注意事项
协议栈下载进去了可能无法运行,需要Start Wireless Stack。
相关文章:

STM32WB55开发(6)----FUS更新
STM32WB55开发.6--FUS更新 概述视频教学硬件准备存储器映射FLASH安全区设置SRAM安全区设置通过USB进行下载注意事项 概述 在 STM32WB 微控制器中,FUS(Firmware Upgrade Services)是用于固件升级的一种服务。这项服务可以让你更新设备上的无…...

centos关闭Java进程的脚本
centos关闭Java进程的脚本,有时候服务就是个jar包,关闭程序又要找到进程ID,在kill掉,麻烦,这里就写了个脚本 小白教程,一看就会,一做就成。 1.脚本如下 #!/bin/bash ps -ef | grep java | gre…...

深度学习网络模型 MobileNet系列MobileNet V1、MobileNet V2、MobileNet V3网络详解以及pytorch代码复现
深度学习网络模型 MobileNet系列MobileNet V1、MobileNet V2、MobileNet V3网络详解以及pytorch代码复现 1、DW卷积与普通卷积计算量对比DW与PW计算量普通卷积计算量计算量对比 2、MobileNet V1MobileNet V1网络结构MobileNet V1网络结构代码 3、MobileNet V2倒残差结构模块倒残…...

Spring 中 BeanFactory 和 FactoryBean 有何区别?
这也是 Spring 面试时一道经典的面试问题,今天我们来聊一聊这个话题。 其实从名字上就能看出来个一二,BeanFactory 是 Factory 而 FactoryBean 是一个 Bean,我们先来看下总结: BeanFactory 是 Spring 框架的核心接口之一…...

黑马程序员项目-黑马点评
黑马点评1 短信登录 基于Session实现登录流程 发送验证码: 用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号 如果手机号合法,后台此时生成对应的验证码,同时将验证码进行…...
ubuntu 20.04 + Anaconda + cuda-11.8 + opencv-4.8.0(cuda)
环境:一键编译opencv-4.8.0(cuda),前提是已经安装好了cuda和cudnn Anaconda安装 参考: https://blog.csdn.net/weixin_46947765/article/details/130980957 opencv4.8.0编译安装 一键编译shell脚本 VERSION4.8.0test -e ${VERSION}.zip || wget http…...
Linux 目录
目录 1. Linux 目录1.1. 目录 /usr/bin 和 /usr/local/bin 区别 1. Linux 目录 1.1. 目录 /usr/bin 和 /usr/local/bin 区别 /usr/bin 下面的都是系统预装的可执行程序, 系统升级有可能会被覆盖。/usr/local/bin 目录是给用户放置自己的可执行程序。...

Linux shell编程学习笔记21:用select in循环语句打造菜单
一、select in循环语句的功能 Linux shell脚本编程提供了select in语句,这是 Shell 独有的一种循环语句,非常适合终端(Terminal)这样的交互场景,它可以根据用户的设置显示出带编号的菜单,用户通过输入不同…...

线性回归与线性拟合的原理、推导与算法实现
关于回归和拟合,从它们的求解过程以及结果来看,两者似乎没有太大差别,事实也的确如此。从本质上说,回归属于数理统计问题,研究解释变量与响应变量之间的关系以及相关性等问题。而拟合是把平面的一系列点,用…...

【C++】set和multiset
文章目录 关联式容器键值对一、set介绍二、set的使用multiset 关联式容器 STL中的部分容器,比如:vector、list、deque、forward_list(C11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元…...

二十、泛型(1)
本章概要 基本概念 与 C 的比较 简单泛型 一个元组类库一个堆栈类RandomList 基本概念 普通的类和方法只能使用特定的类型:基本数据类型或类类型。如果编写的代码需要应用于多种类型,这种严苛的限制对代码的束缚就会很大。 多态是一种面向对象思想的泛…...

【Unity数据交互】游戏中常用到的Json序列化
ˊˊ 👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏࿱…...

TCP的滑动窗口和拥塞控制
目录 滑动窗口 1.发送窗口和接收窗口 2.滑动窗口的分类 停止等待协议:发送窗口大小 1, 接收窗口大小 1 后退N帧协议(GBN):发送窗口大小 > 1,接收窗口大小 1 选择重传协议(SR…...

零信任网络:一种全新的网络安全架构
随着网络技术的不断发展,网络安全问题日益凸显。传统的网络安全策略往往基于信任和验证,但这种信任策略存在一定的局限性。为了解决这一问题,零信任网络作为一种全新的网络安全架构,逐渐受到人们的关注。本文将对零信任网络的概念…...

基于单片机的智能拐杖软件设计
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、整体设计方案2.1本设计设计原理2.1.1单片机基本介绍 二、本设计方案选择三、软件设计AD原理图:原理图…...

小程序如何设置自动预约快递
小程序通过设置自动预约功能,可以实现自动将订单信息发送给快递公司,快递公司可以自动上门取件。下面具体介绍如何设置。 在小程序管理员后台->配送设置处,选择首选配送公司。为了能够支持自动预约快递,请选择正常的快递公司&…...

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)
STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式) 一、所用材料: STM32F103C6T6最小系统板 STM32CUBEMX(HAL库软件) MDK5 示波器或者逻辑分析仪 二、所学内容: 通过定时器TIM的输出比较模式得到预…...

【数据结构】深入浅出讲解计数排序【图文详解,搞懂计数排序这一篇就够了】
计数排序 前言一、计数排序算法核心思路映射 概念补充绝对映射相对映射 二、计数排序算法核心实现步骤三、码源详解四、效率分析(1)时间复杂度 — O(Max(N,range))(2)空间…...

Canvas制作喷泉效果示例
Canvas能制作出很多动画效果,下面是一个制作喷泉效果的示例 效果图 源代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <meta name"viewport" content"widthdevice-width, initial-scale1 ,user-…...

什么是NPM(Node Package Manager)?它的作用是什么?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...