你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
STMCU 发布时间:2020-5-27 11:09
1、STM32 生态系统|基于STM32WB的低功耗蓝牙应用(一):https://www.stmcu.org.cn/module/forum/thread-621995-1-1.html
2、基于STM32WB的低功耗蓝牙应用(三)用户应用程序的无线更新(OTA空中升级):https://www.stmcu.org.cn/module/forum/thread-625175-1-1.html



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

通过USB更新

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

11.jpg

现在我们先使用第一种方式,即通过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的BLEstack,再通过fwupgrade来分别升级最新版的FUS和BLE stack。绿色的是我们将要升级的新版本FUS、RF stack image,在自己PC上的存放地址,以及将要烧到目标芯片里的位置。这些地址,在STM32CubeWB固件包里,专门存放最新版M0+内核运行的image的文件夹里,和各个image放在一起的一个release note里面可以查到。在本节视频,第七页 胶片的表格里有标注。

22.jpg

现在开始具体操作。USB dongle板子SW2开关拨到如图方向,连接到PC,STM32WB芯片从系统flash启动,开始运行系统bootloader了。它扫描到USB通信口上有信号,进入DFU模式,激活M0+内核让它开始运行,由此可以响应来自上位机PC的STM32CubeProgrammer发出的命令。

33.jpg

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

44.jpg

刚才为了一次多读几个信息值,从内存 0x2003 0024开始读取出来50个字节;现在我们只要查一下FUS版本,直接读读内存 0x2003 0030处的值即可,0.5.3;

55.jpg

接着,使用【-fwupgrade】命令升级FUS。由于现在芯片里有老的FUS,因此firstinstall参数是0。在命令行窗口可以看到升级过程中的log信息。

66.jpg

FUS新版下载好了之后,再读一下当前版本,是1.0.2了。OK

77.jpg

FUS已经最新版本了,接下来就是下载通用最新版本的BLE stack了。经过几秒,BLE stack也下载好了。

88.jpg

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

FUS

什么是FUS · AN5185

99.jpg

实际操作体验告一段落,再演示第二种近程方式,即通过JTAG/SWD来更新FUS、RF stack之前,我们来正式看一下什么是FUS。
FUS,是firmwareupgrade service的简称,是一段跑在安全用户flash上的,由M0+内核运行的程序。所有和STM32WB新引入的安全功能,都要通过它来操作。比如安装或者升级,由ST签名加密过的FUS、RF stackimage;比如要存储和使用应用秘钥,所谓CKS, CTMkey service,都是通过FUS service暴露给M4内核的API来调用、执行的。关于应用key和客户key的使用,我们在下一期来讲。

FUS目前有三个版本,一个STM32WB芯片出厂预烧好的,大家拿不到image的0.5.3版本;一个1.0.1和1.0.2版本,可以在STM32CubeWB固件包里可以拿到,这些随WB固件包一起更新并发布的image,都是被ST签名加密过的。
FUS 的版本及升级规则

10.jpg

1.0.1版本的FUS,是在STM32CubeWB固件包1.1.0中发布的,它适用于1M flash的WB芯片,即STM32WB4xG。
支持256K flash和512Kflash的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的提示。

FUS · RF Stack

FUS 和 RF Stack 的位置

111.jpg

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

通过SWD更新

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

222.jpg

现在来看第二种进程更新FUS和RFstack的方式,通过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两个批处理即可。

这个方法的原理是,使用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等功能。

再次检验当前版本

333.jpg

用同样的方式,读出当前Nucleo板子上的FUS和BLE stack版本,分别是1.0.1和1.1.0,符合预期。

本期小结
近程升级FUS、RF Stack的小结

444.jpg

现在回顾一下,刚才分别对STM32WB套件中两个板子,通过USB接口,一步一步输命令;通过JTAG/SWD调试接口,执行批处理文件,升级了芯片的FUS、和BLEstack版本。USBDongle板的版本一步到位,并且也烧录好了TransparentVCP例程。


大家回想,体会一下,会发现,其上这两种方式本质是一样的,都是跑了一段程序,去调用FUS的API,然后FUS把已经放在用户flash用户区域的image,拿来验签、解密、烧写。不同的仅仅是一个通过usb接口,和系统bootloader里的代码交互,一条命令一条命令的执行;一个是通过jtag调试接口,把代码一口气下到用户flash,一口气跑完,所谓批处理。



收藏 评论2 发布时间:2020-5-27 11:09

举报

2个回答
likang1202 回答时间:2020-5-29 08:42:47
顶一下
蒙奇_超 回答时间:2020-7-25 20:08:47
牛掰plus

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版