![shequ.stmicroelectronics.cn](./template/st_v1/static/img/logo2.png)
非常感谢ST中文论坛给我这个试用STM32WB开发板的机会。3 [3 Z$ y6 D( u9 L- i/ p & ~9 J: e, |( H% r6 p6 s3 N 本文将和大家分享STM32WB芯片如何升级FUS和协议栈。 本文主要分为三个部分:①基础知识讲解、准备工作;②以SWD方式升级;③以USB方式升级 一.基础知识讲解、准备工作 - g+ V/ h& U$ k$ I2 t' } \, V 我们拿到一块的蓝牙芯片第一步就是需要下载蓝牙协议栈到芯片的FLASH中,WB也是如此。但它的方式会稍微复杂一点,因为他是一个双核的MCU,用户只需要负责M4核的开发,M0+核来负责RF,M0+是隔离开的,处于一个“黑盒”中,用户无法对M0+进行调试 ![]() 如图,flash中有一块专用的区域给M0+使用,用户是无法直接访问这块区域的,因此向这个区域写入协议栈需要一个“跳板”,这个“跳板”就是FUS(firmware update service),M0+运行FUS后就可以对协议栈区域进行读写。 用户拿到WB芯片时,出厂会预装一个FUS(版本为0.5.3,这次最初版本的FUS),没有协议栈。而开发板因为要安装demo,所以不仅会安装FUS(版本也是0.5.3),还会安装BLE协议栈和demo程序。但不管你使用那个,到手后第一步还是要安装最新版本的协议栈(用新不用旧嘛),但是最新版的协议栈无法用老版本的FUS安装,综上,得先更新FUS到最新版本,然后才能更新协议栈。 关于FUS、协议栈的一些底层知识,ST有一本书有说明,《AN5185-STM32WB系列的ST固件升级服务》,有兴趣的可以去官网下载阅读,有中文版本。. G5 C" x; _4 G# }1 L / r& n2 w6 V, h. z0 P) ]" u 下图为WB更新FUS/协议栈的两大类方法,分别是有线和无线。前者适合我们开发时使用,后者适合产品做完后后续升级使用。今天我们只讲有线的两种方式。( R9 B6 o7 q, p; M0 ~ ![]() 在开始实战前,我们还得准备好软件:①安装最新的STM32CubeMX,还需要在软件中安装最新的给WB使用的Packge(目前最新的是1.13.1,我待会儿就会使用这个版本)②STM32CubeProgrammer(请务必使用2.7.0及以上版本) ~& F% R* ^ x) \ 二.以SWD方式升级 D [9 T' A; @ 打开下图对应位置的文件夹(如果你的CUBEMX不是安装在默认位置,你要自己找到对应的位置)8 E2 ?3 J9 [, K6 @( P/ b" C ![]() 这里存放的就是WB5X系列芯片所需要使用的FUS文件和协议栈,文件夹里面有一个“Release_Notes.html”的文件,他详细的描述了里面各个文件所对应的功能以及如何安装,待会儿的安装步骤和对应写入地址都需要看这个文档,建议大家去仔细阅读一下,内容不多,大约几分钟就可以看完,在这里我就不一一解释了。 7 l3 c9 ]& R. N Nucleo板卡的JP1连接USBSTL(板卡买来默认就是接这个位置),插上数据线,连接电脑(板卡后面有两个micro usb接口,要接ST-LINK那个接口,别接错了) 打开STM32CubeProgrammer,点击Connect; M2 B9 K4 ~+ ?( @# h ![]() 点击下图图标: r9 P, m* ^6 S6 r. {1 g ![]() 点击Start FUS(他会给板卡的M4核下载一个固件,用于启动M0+核心,所以他会删除原先M4核的程序,请注意)8 O* Y/ p0 f& _' e( |0 ]* F ![]() 等待一会儿,会弹出成功的提示框 ![]() 点击Read FUS infos) p$ F2 V y Y6 F ![]() 就可以看到版本号了5 y! d" e- j# t/ _1 [ ![]() 出厂默认的FUS就是0.5.36 [4 ~- P$ Q) L( ? & Y5 y( _: c% g8 h5 i 我们要用stm32wb5x_FUS_fw_for_fus_0_5_3.bin这个文件升级FUS,这个BIN文件是专门给0.5.3FUS定制的,他可以直接将0.5.3FUS直接升级到最新版本的FUS(这一点和网上旧的教程有区别,旧的教程说要先升级到1.0.2,再升级到最新的FUS,现在在已经不需要这样操作了)。如果你的FUS版本是FUS1.X.Y(X<2),则需要选用stm32wb5x_FUS_fw.bin这个文件& k/ z" ^- R' G$ [- d! B. a* }. ^ 查表可得,这个固件对应的写入地址为0x080EC000(stm32wb5x_FUS_fw.bin也是使用0x080EC000) ![]() 先选好刚才说的那个FUS文件,填好地址 ![]() 点击Firmware Upgrade,等待一会儿,他会弹出下图的两个提示框,则表示升级FUS完成 ![]() 现在我们再来读一下FUS版本 ![]() 已经升级到1.2.0.0了,这是当前最新的FUS版本 接下来我们来升级协议栈,我们本次以的完整版的BLE协议栈(stm32wb5x_BLE_Stack_full_fw.bin)为例,如果你的FLASH空间紧张也可以选用阉割版的BLE协议栈,或者你有Zigbee、Thread等开发需求的就选择你所需要的协议栈 选择你所需要的协议栈文件,并查表找对应的起始地址,我这边查表得地址为0x080C7000 ![]() 勾选Verify download,然后点击Firmware Upgrade ![]() 稍等片刻,你会得到如下两个提示,表示协议栈升级成功 ![]() 如何查看协议栈版本? 当前还没有一键查询协议栈版本的方法,只能自己手动去内存中某个地址找,接下来我会讲一下怎么找 点击read fus infos时,下方框中会有一个地址 ![]() 查找该地址处的内容 ![]() 1020000表示FUS版本为1.2.0 010D005表示协议栈版本为1.13.0 4 @; a+ A2 j0 T 三.以USB方式升级 Dongle上的SW2要拨到1,插上电脑,打开STM32CubeProgrammer,按下图方式连接
![]() 连接后,我们要找到如图所示文件夹 ![]() 里面有一个“0x495_FUS_Operator.bin”文件,这个文件就是刚才我们点击Start FUS时所用到的固件,因为现在用USB连接,那个按钮灰了,所以我们手动下载这个固件到芯片中,用于启动M0+核 ![]() ![]() 随后我们升级FUS,套路和之前一样,升级成功后只有一个提示框 ![]() 升级后的FUS版本
![]() 接下来升级协议栈,和之前一样的套路,但这里有点小问题,文档说要勾选Verify download,但是我勾了没成功,不勾选就成功了,很奇怪。 ![]() 查看协议栈版本号和之前一样,找到地址 ![]() ![]() 01020000表示FUS1.2.0;010D0005表示协议栈1.13.0。 至此升级FUS和协议栈已经完成,大家可以去cubemx中找到下图两个demo给两个板子下载,就可以运行出厂时的demo(demo具体怎么玩见包装盒背面GETTING STARTED中的说明) ![]() 3 W# I6 \' ^" s( ^& V; Y |
【新品发布】STM32WB0x:打造人人都能用的高性价比蓝牙应用
4月25日培训|基于ST 双核多协议STM32WB55的Matter方案开发
实战经验 | 关于STM32WB OTA 速率提升引发的讨论
基于STM32WB55的配置串口打印Debug经验分享
基于创建STM32WBA BLE_Custom工程经验分享
来看直播了,就在明天 | STM32 Matter 解决方案,轻松实现智能家居无缝连接
基于STM32WB55开发之套件概述(1)
基于STM32WB55开发之监测STM32WB连接状态(1)
基于STM32WB55开发之修改蓝牙地址(2)
STM32WB基于Custom Template实现客户定制BLE私有协议
[md]请问为啥我这个没有start FUS啊
你的软件版本是多少?可能新版的ST调整了按钮或者要做其他操作?