打印
[应用相关]

基于STM32WB低功耗蓝牙应用二 RF协议栈的有线和无线更新

[复制链接]
1054|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
通过USB更新

通过USB更新USBDongle板的FUS、RF Stack


使用特权

评论回复
沙发
花间一壶酒sd|  楼主 | 2021-4-22 11:46 | 只看该作者
现在我们先使用第一种方式,即通过USB接口,使用STM32CubeProgrammer的命令行来升级FUS和BLE stack了。一共有7个步骤,首先确保自己电脑上装有v2.0版本及以上的STM32CubeProgrammer,当前2019.10月初,ST官网上最新版本是2.1,都可以。然后把板子设置成从系统flash启动,对于USB dongle板,很简单,就是直接把SW2这个开关拨到BOOT0这边,就是远离标准USB-A插口那个方向。然后使用STM32CubeProgrammer的命令行,分别通过fwdelete删掉预装的0.5.1的BLE stack,再通过fwupgrade来分别升级最新版的FUS和BLE stack。绿色的是我们将要升级的新版本FUS、RF stack image,在自己PC上的存放地址,以及将要烧到目标芯片里的位置。这些地址,在STM32CubeWB固件包里,专门存放最新版M0+内核运行的image的文件夹里,和各个image放在一起的一个release note里面可以查到。在本节视频,第七页 胶片的表格里有标注。

使用特权

评论回复
板凳
花间一壶酒sd|  楼主 | 2021-4-22 11:46 | 只看该作者

使用特权

评论回复
地板
花间一壶酒sd|  楼主 | 2021-4-22 11:47 | 只看该作者
现在开始具体操作。USB dongle板子SW2开关拨到如图方向,连接到PC,STM32WB芯片从系统flash启动,开始运行系统bootloader了。它扫描到USB通信口上有信号,进入DFU模式,激活M0+内核让它开始运行,由此可以响应来自上位机PC的STM32CubeProgrammer发出的命令。

使用特权

评论回复
5
花间一壶酒sd|  楼主 | 2021-4-22 11:47 | 只看该作者

通过-fwdelete命令,删除USBDongle板子上预装的0.5.1版本的BLE stack。

使用特权

评论回复
6
花间一壶酒sd|  楼主 | 2021-4-22 11:48 | 只看该作者

使用特权

评论回复
7
花间一壶酒sd|  楼主 | 2021-4-22 11:49 | 只看该作者
刚才为了一次多读几个信息值,从内存 0x2003 0024开始读取出来50个字节;现在我们只要查一下FUS版本,直接读读内存 0x2003 0030处的值即可,0.5.3;

使用特权

评论回复
8
花间一壶酒sd|  楼主 | 2021-4-22 11:50 | 只看该作者
接着,使用【-fwupgrade】命令升级FUS。由于现在芯片里有老的FUS,因此firstinstall参数是0。在命令行窗口可以看到升级过程中的log信息。

使用特权

评论回复
9
花间一壶酒sd|  楼主 | 2021-4-22 11:51 | 只看该作者
FUS新版下载好了之后,再读一下当前版本,是1.0.2了。OK

使用特权

评论回复
10
花间一壶酒sd|  楼主 | 2021-4-22 11:52 | 只看该作者
FUS已经最新版本了,接下来就是下载通用最新版本的BLE stack了。经过几秒,BLE stack也下载好了。

使用特权

评论回复
11
花间一壶酒sd|  楼主 | 2021-4-22 11:55 | 只看该作者

使用特权

评论回复
12
花间一壶酒sd|  楼主 | 2021-4-22 11:55 | 只看该作者
再次读取一下FUS和BLE stack的版本,分别已经是1.0.2和1.2.0了,符合预期。
现在,USBDongle板子里的FUS和BLE stack都是STM32CubeWB固件包里最新版了,我们在把它恢复成用户flash启动之前,先继续使用当前的DFU模式,来把STM32CubeWB固件包里的TransparentVCP例程下载进去,稍后做BLE空中升级时会用到。最后,才把USB dongle板子的SW2开关拨回到“0”的位置,这样,之后,板子上电就会自动运行虚拟串口的透传功能了。

使用特权

评论回复
13
花间一壶酒sd|  楼主 | 2021-4-22 11:56 | 只看该作者
FUS

什么是FUS · AN5185

使用特权

评论回复
14
花间一壶酒sd|  楼主 | 2021-4-22 11:57 | 只看该作者
实际操作体验告一段落,再演示第二种近程方式,即通过JTAG/SWD来更新FUS、RF stack之前,我们来正式看一下什么是FUS。

FUS,是firmware upgrade service的简称,是一段跑在安全用户flash上的,由M0+内核运行的程序。所有和STM32WB新引入的安全功能,都要通过它来操作。比如安装或者升级,由ST签名加密过的FUS、RF stack image;比如要存储和使用应用秘钥,所谓CKS, CTM key service,都是通过FUS service暴露给M4内核的API来调用、执行的。关于应用key和客户key的使用,我们在下一期来讲。

使用特权

评论回复
15
花间一壶酒sd|  楼主 | 2021-4-22 11:58 | 只看该作者
FUS目前有三个版本,一个STM32WB芯片出厂预烧好的,大家拿不到image的0.5.3版本;一个1.0.1和1.0.2版本,可以在STM32CubeWB固件包里可以拿到,这些随WB固件包一起更新并发布的image,都是被ST签名加密过的。

使用特权

评论回复
16
花间一壶酒sd|  楼主 | 2021-4-22 11:59 | 只看该作者
1.0.1版本的FUS,是在STM32CubeWB固件包1.1.0中发布的,它适用于1M flash的WB芯片,即STM32WB4xG。
支持256K flash和512K flash的WB芯片,即STM32WB5xC/E的FUS,是版本1.0.2,在STM32CubeWB固件包的1.1.1中发布。


注意,如果拿到手上的STM32WB芯片是5xC/E,请直接升到1.0.2版本的FUS,不要升到1.0.1,否则芯片会被不可逆的锁定。
而,如果手上的是5xG,1.0.1和1.0.2的FUS都适用。只是,无需再从1.0.1升到1.0.2,因为功能上并无大变化,实在要升,会返回Image _Not_Authetic的提示。

使用特权

评论回复
17
花间一壶酒sd|  楼主 | 2021-4-22 12:00 | 只看该作者
FUS · RF Stack

FUS 和 RF Stack 的位置

使用特权

评论回复
18
花间一壶酒sd|  楼主 | 2021-4-22 12:01 | 只看该作者
FUS 和 Rf stack都是由M0+运行,且都运行在安全用户闪存区域,即图中两根虚线之间的位置。它们和用户的应用程序都一样存放在用户flash,但是占据着由Secure option byte(安全选项字节)指定的地址开始的高段空间。高段空间的尾部,是ST预留的和安全feature相关的预留地,不能动,因此如果FUS或者RF stack的新版本尺寸比以前大了,会把上面那根虚线继续往上抬,即挤压用户应用程序的空间,然后secure option byte的值也会被自动修改。

使用特权

评论回复
19
花间一壶酒sd|  楼主 | 2021-4-22 12:02 | 只看该作者
通过SWD更新

通过SWD更新Nucleo板的FUS、RF Stack

现在来看第二种进程更新FUS和RF stack的方式,通过JTAG/SWD这样的调试接口。刚才使用的USB dongle板,这次我们使用Nucleo板。nucleo板这次升级,不准备一步到位,先 把FUS和RF stack分别升级到1.0.1和1.1.0;留着点空间,后面演示空中升级。因此只要双击FLASH_BLE_stack_V1.1.0.bat和FLASH_FUS_V1.0.1.bat两个批处理即可。

使用特权

评论回复
20
花间一壶酒sd|  楼主 | 2021-4-22 12:03 | 只看该作者
这个方法的原理是,使用STLINK-Utility的命令行,通过SWD接口,把一段叫做FUS_Operator的代码下载用户flash开始处,再把对应要升级的FUS或者RF stack的image下到用户flash稍后的地方,启动FUS operator运行。FUS operator检查到约定好的用户flash‘地址处有 image 待升级,就调用FUS的API,来把image进行验签和解密,然后烧写。


目前ST官网上还没有公开对应代码,大家可以找ST的代理或者FAE索要试用。好消息是:今年底之前,会把这个功能集成到STM32CubeProgrammer里,先是命令行支持,随后会是GUI支持。多说一句,关于STM32 PC端的工具,大趋势是:STM32CubeProgrammer会替换掉之前的Flash loader、DFUSe,STLINK-utility、STVP等功能。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

1129

帖子

2

粉丝