STM32H5

1、问题发生的背景

细心的用户可能会发现,使用到我们最新的STM32CubeMX 6.9.1对STM32H5的 USB外设进行配置的时候,只能用USBX,而以前的Classic USB库不能选择了。由于USBx 是基于Threadx OS的,客户更多的希望是裸机版本的,所以在这儿给大家提供一个移植的方法。

2、问题的分析

虽然在STM32CubeMX 6.9.1上不能使用经典的Classic USB驱动了,但是实际上在 github上,仍能发现一些可用的资源供参考:

GitHub - STMicroelectronics/stm32h5-classic-coremw-apps: Provide a set of applications for STM32H5xx series based on the STM32 Classic Core Middleware libraries 
GitHub - STMicroelectronics/stm32u5-classic-coremw-apps: Provide a set of applications for STM32U5xx series based on the STM32 Classic Core Middleware libraries

下载这两个链接,发现H5例程里面仅仅有Classic USB driver的HID例程,并没有 CDC的,但这对于我们想要移植来说,已经足够了。

3、Classic USBD CDC驱动的移植

3.1 解压缩编译验证原始工程

对原始的H5例程进行编译,发现报如下错误:

1732000366995718.png

根据错误的说明,查看会发现下载的示例工程里面 :

驱动相关文件夹……\stm32h5-classic-coremw-apps-main\Drivers 里内容是空的;解决方法:建议将最新版本的STM32CubeH5 lib里面的Drivers全部拷贝即可(含有 BSP、CMSIS、STM3H5xx_HAL_Driver);

库文件STM32_USB_Device_Library 也为空,建议从github上下载:

GitHub - STMicroelectronics/stm32_mw_usb_device: Provides the USB Device library part of the STM32Cube MCU Component "middleware" for all STM32xx series. 
解压后,再复制stm32_mw_usb_device-master内的Core,Class的文件夹到 \stm32h5-classic-coremw-apps-main\Middlewares\ST\STM32_USB_Device_Library,编译通过,无错误。
下载工程到NUCLEO H563运行,通过设备管理器能找到相应的HID设备,测试按一 下USER BUTTON按键,则鼠标也会跟着横向移动一步。
1732000377997189.png

3.2 屏蔽掉USB PD相关的操作 

基于此,我们准备开始新建CDC的例程。

1732000384756549.png

细心的朋友,通过上述的列表结构,我们可以比较清楚的看到需要调整的文件:usb_device.c、usbd_desc.c、usbd_conf.c, usbd_hid.c 及其相应的头文件,另外比较显眼的是使用到的USB PD的库;这个库与USB库没有耦合关系,主要是因为我们相关开发板上USB接口使用的Type C,为了符合目前USB标准的相关协议规定,需要添加PD功能,如果客户不打算通过相关USB 标准,则这个PD功能可以移除。

为了更简便的在H5上移植USB Device外设,我们将PD功能相关的库去除(如上图红色框),并屏蔽User Code部分关于USBPD的处理并解决编译错误. Main 函数可以简化为如下:

1732000402910733.png

在USBPD的相关初始化操作里,和USB相关的就是其调用USBD_Start函数,由于移除了 USB PD,所以我们需要添加USBD_Start函数,如下图:

1732000409636786.png

这时候,编译下载程序,仍然能正确的操作HID类及演示User Button功能。

3.3.实现USB CDC的枚举

即使目前使用的是HID类,但是不同USB类,对应枚举的实现其实是一样的,所以,第一步:将usbd_hid.c 移除,项目工程中加入\stm32_mw_usb_device master\Class\CDC\Src 中的 usbd_cdc.c,并修改相应头文件名称和路径,解决编译问题;另外,由于移除了usbd_hid.c文件,所以在应用层也需要并屏蔽掉HID相关的应用层操作;主要比如HAL_GPIO_EXTI_Rising_Callback(),然后编译,会遇到下面3个错误:

1732000424144769.png

对于第一个错误,USBD_ClassTypeDef USBD_HID 修改为USBD_ClassTypeDef USBD_CDC,用USBD_CDC替换对应的USBD_HID解决USBD_HID的未定义的问题;对于第二个错误,修改PMA,因为CDC 类和HID使用到USB端点资源的不同,所以修改如下:

1732000438826852.png

对于第三个错误,将下面代码

1732000449124493.png

替换如下即可:

1732000460718382.png

解决好这些错误,我们再运行,会发现:

1732000471342461.png

右击显示错误是:

1732000482770393.png

其实我们清楚,移植到这一步,肯定还是有问题的,至少我们CDC类的描述符还没有修改过来。第二步:修改usbd_desc.c文件,对于这些标准的USBD Class,可以在我们之前Classic USB 例程中寻找一个,在这里用上面提到的U5的示例;……\stm32u5-classic-coremw-apps-main\Projects\NUCLEO-U575ZI Q\Applications\USB_Device\CDC_Standalone\USB_Device\App 直接替换掉之前 HID 的 usbd_desc.c 和对应头文件,编译并出现:

1732000494820892.png

解决方法就是将下图中的HID_Desc修改为对应的名称,这儿用到的是CDC_Desc;

1732000505884496.png

此时再编译,发现设备管理器已经能够识别出端口了,

1732000760916230.png

但是停下程序,发现程序进入了hardfault;
1732000519714833.png
程序显示在init physical interface 时出现问题,此时我们回过头,会发现我们并没有注册USB 接口:解决方法,将:C:\TEMP\stm32h5-classic-coremw-apps main\Middlewares\ST\STM32_USB_Device_Library\Class\CDC usbd_cdc_if_template.c 和对应头文件添加入项目工程,并添加注册接口interface的函数。

1732000530909835.png

解决编译错误,然后运行,就会发现hardfault问题解决了;但是好事多磨,运行后,会发现能枚举成功,但是USB CDC的驱动安装不成功,会出现黄色小感叹号。

1732000543778158.png

常规的,我们解决这个感叹号的问题:首先IAR编译其对应的MCU的脚本文件icf文件中的 heap 改大些,保险一点0x1000(有些USB 类如Audio可能需要更大),发现没有起作用。经调试对比,在如下函数内添加如下代码,并解决编译问题后,即可正确安装驱动。

1732000684842343.png

4、验证USBD CDC通信

简单的验证64个字节之内的发送与接收,修改函数如下:

1732000554151232.png

测试如下:

1732000617146726.png

当然,这儿仅仅是一个简单的移植,验证CDC通信,对于实际的项目中的通信逻辑,发送包长,可以对照之前的Classic USBD CDC例程自行根据需要添加修改即可!

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com

围观 14

区块链是一种新兴的去中心化账本技术。借助分散式机制、密码学算法和共识算法等,区块链具有去中心化、信息不可篡改、开放性、匿名性和共识信任机制等特征,让系统中各参与方之间不需要建立信任,就能可信地进行数据交换。

区块链+物联网融合应用获广泛关注

物联网是数据的重要来源地和目的地。数量日益增长的物联网终端一方面采集或产生海量数据,另一方面也接收来自云端的命令并执行特定操作。这些数据一旦需要与没有信任关系的相关方进行交换,就产生了借助区块链实现数据可信交换的场景。区块链与数据天然紧密依存,在区块链行业领域中,与物联网的融合应用已经获得了广泛关注。

上海摩联信息科技有限公司针对区块链+物联网融合应用研究和实践,基于意法半导体 STM32H5及STM32U5 实现区块链应用产品 BoAT物联网区块链应用框架(BlockChain of AI Things),并通过STM32H5上的Secure Manager 或 STM32U5上的TF-M安全框架实现高可信数据上链。

STM32H5/STM32U5 为安全赋能

物联网与区块链的核心价值在于保证数据在整个生命周期中的可信管理,形成数据的有效市场价值,同时通过软硬融合模式、可信的物联网终端设备,将能够与区块链共识信任机制一起有效降低安全风险,最终实现基于区块链共识信任机制的商业闭环。在终端设备硬件底层部署可信数据上链能力,打通区块链+物联网的关键一环,从数据源头实现上链。主要实现:

  • 数据采集处可信:该方案集成在物联网设备的芯片上,在物联网设备采集数据时,即对数据进行Hash计算,并使用该设备的唯一私钥进行签名,形成该段数据的数据指纹。该段数据上云后,可以通过数据指纹的Hash和签名进行验证,是否被篡改了,是否不是来自某个被认可的合法设备。

  • 数据来源可信:在设备上生成唯一的密钥对和ID,私钥将无法从外部获,该私钥在物联网设备上对数据Hash进行签名,以保证数据来自该设备。

  • 数据流转可信:通过设备上的区块链应用框架将物联网设备上生成的数据指纹(Hash和签名)上送到区块链节点,区块链节点会记录到区块链账本中,保证该段数据指纹在未来无法被篡改和抵赖。

STM32H5/STM32U5 芯片能为物联网设备提供高安全防护的安全环境,以实现数据在设备侧的安全存储与运算。集成了ARM TrustZone®技术的Arm Cortex-M33内核与意法半导体特定的安全功能集有机融合,引入了先进的创新成果:

  • (AES)加密引擎和公钥算法加速器(PKA)硬件单元具有抵御差分功率分析(DPA)侧信道攻击的能力。

  • 使用硬件唯一密钥(HUK)的安全数据存储。

  • 主动篡改检测。通过内部监测,可在发生扰动攻击时擦除安全数据,有助于满足POS应用所需的PCI安全标准委员会(PCI SSC)要求。

  • 目标PSA与SESIP(IoT平台的安全评估标准)达到3级保障等级。

STM32H5提供的Secure Manager 及STM32U5提供的TF-M是受信任执行环境安全框架,符合 Arm® 平台安全架构(PSA)规范,支持 Secure Boot、信任根、加密、内部可信存储、初始证明、以及固件更新等功能。Secure Manager /TF-M应用接口丰富,操作简便易于上手,同时与 STM32Cube 生态系统相关联,能快速构建安全应用相关产品,其安全特性非常适合区块链应用场景,包括密钥管理、加密存储、安全运算等,完美契合区块链应用的安全需求。

摩联科技基于STM32H5/U5的区块链解决方案

摩联科技的BoAT物联网区块链应用框架是面向物联网设备的嵌入式区块链应用框架,可为物联网设备提供可信数据上链和访问区块链服务的能力。BoAT物联网区块链应用框架运行于STM32H5或者STM32U5上,支持使用 Secure Manager/TF-M 框架实现区块链应用设计。主要特性包括:

  • BoAT通过 Secure Manager/TF-M 的信任根、内部可信存储和个人化操作,实现区块链设备密钥等私密数据个人化和设备密钥管理。

  • 设备的私钥由 Secure Manager/TF-M 进行安全隔离,BoAT通过调用 PSA 接口获得设备公钥信息以构造链上设备身份。

  • BoAT构造区块链交易报文,通过PSA 接口调用 Secure Manager/TF-M 的密码学算法,进行Hash、加密、签名等运算,用于实现区块链访问及合约调用等功能。

1.png

区块链+物联网目标应用场景

摩联科技基于STM32H5/U5实现的区块链解决方案,适用于各类区块链+物联网场景,特别是对安全和数据可信要求较高的应用场景。典型的应用领域包括,智慧城市、工业互联网、物联网支付、供应链管理、物流、交通、农业、能源、环保等。

“物联网+区块链”具备广泛的应用能力,在产业领域,可以推动智慧城市、保险金融的行业发展;在公众领域,可以增强智能钱包、电子代付等应用效能;在企业经营方面,可以提升产权管理、大数据交易等服务能力;在通信领域,可以完善漫游结算、边缘计算等功能体系。

区块链融合物联网,为未来社会构筑可信数字底座

区块链融合物联网,两种技术珠联璧合,为确保数据来源可信提供了可靠保障。借助意法半导体STM32H5/STM32U5 芯片为物联网设备提供的高性能安全环境,摩联科技通过BoAT物联网区块链应用框架(BlockChain of AI Things),实现设备的信任根(Root of Trust),确保芯片有独一无二的DNA;同时,在数据源头就配置专为区块链优化的计算能力,也可充分发挥区块链技术的价值,使数据从采集端即获得安全保护和可信签名,真正实现“物链一体”、数据可信上链,并通过建设可信数据生态,实现数据资源产权、数据交易流通,为未来智能数字社会构筑可信的数字底座。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 17

01、问题背景

客户在使用 STM32H565 开发新项目的时候遇到一个问题,PB14 在开漏时无法上拉到 3V3,且其输出的 PWM 频率比其它 GPIO 低。且多片芯片的表现类似。

检查客户的原理图并未发现明显的问题。

02、问题复现

测试配置:硬件测试平台 NUCLEO-STM32H563ZI。

软件工具版本: 

  • STM32CubeMX Version: 6.9.2 

  • STM32Cubeide Version: 1.13.2

2.1. 测试 1:PB14 开漏输出异常 

2.1.1. 测试配置 
1.png
▲ 图1. PB14 配置

2.1.2. 测试结果

测试结果见图 2: 

2.png

▲ 图2. PB14 输出波形

从测试结果看 PB14 无法上拉到 3V3,高电平只有 1.704V,似乎有个下拉电阻分了压。

查看芯片的规格书 DS14258 Rev 1 Table 14. STM32H562xx and STM32H563xx pin/ball definition,关于 PB14 其 IO 定义如下图:

3.png
▲ 图3. PB14 定义 

其中_c 表示该 pin 脚具有 USB type-c PD 功能。

查找 RM0481 Rev1,查看 10.11.8 PWR USB Type-C power delivery register (PWR_UCPDR)寄存器描述如下:

4.png

▲ 图4. UCPD_DBDIS 描述 

根据 UCPD_DBDIS 的描述,当芯片退出复位时,对于 CC1,CC2 pin 默认下拉。这 也就解释了客户遇到的,开漏模式时无法上拉到 3.3V 的现象。

修改测试代码,增加如下代码:

/* USER CODE BEGIN 2 */ 
SET_BIT(PWR->UCPDR, PWR_UCPDR_UCPD_DBDIS); 
/* USER CODE END 2 */
再次测试 PB14 输出,波形如下 
5.png
▲ 图5. PB14 输出的波形

此时的波形输出符合预期,测试正常。 

2.2. 测试 2:PB14 的 PWM 输出频率低于其他的 GPIO

使用 TIM12 在 PB14/PB15 作为 PWM 输出。对比管脚为 PB15。

2.2.1. GPIO 配置 1 

6.png

▲ 图6. PB14/PB15 配置 1 

7.png

▲ 图7. TIM12 配置 1

2.2.2. 测试结果 1 

8.png

▲ 图8. PB14/PB15 输出波形图 1 

此时 PB14 的 GPIO 输出为 0。修改 TIM12 的配置降低 PWM 频率再次测试。

9.png

▲ 图9. TM12 配置 2 

2.2.3. 测试结果 2 

10.png

▲ 图10. PB14/PB15 输出波形图 2 

此时的 PB14 是有输出的但波形幅值变小,似乎是 GPIO 设置的速度的问题造成的,修改 GPIO 速度 Maximum output speed 为 medium,再次测试。波形图如下。

11.png

▲ 图11. PB14_medium PB15_low 输出波形图 

综合上述实验 1,2 可以看出 PB14 的输出 PWM 的最大频率确实是低于其它 GPIO 的。

03、小结

由于 PB13,PB14 都连接到 USB PD,对于 PB14,PB13 的最大 GPIO 输出速度也是有 限制的,GPIO 输出速度只支持 low 和 medium, 最大 medium 速度为 10Mhz。关于这 些描述会添加在下一版本的 DS14258 中。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 49

2024年,AI圈陆续传出王炸级新闻。先是OpenAI推新款大模型Sora,该模型只需输入文字,便可生成惟妙惟肖高清视频,再次让世界感受到了人工智能的强大。2月19日,国务院国资委召开“AI赋能 产业焕新”中央企业人工智能专题推进会。会议强调,要推动中央企业在人工智能领域实现更好发展、发挥更大作用。

随着AI商业化以及配套政策的落地,2024年将是AI产业爆发的元年。然而,目前AI行业建设仍面临诸多挑战。随着AI技术的发展,大模型、大数据、大算力日益成为AIGC应用的核心。大模型和数据集是AIGC发展的软件基础,而算力是最为重要的基础设施。AI服务器以并行计算为主,核心处理器主要依靠GPU,但除了GPU性能外,通信因素也会成为制约超算的短板,只要有一条链路出现网络阻塞,就会产生数据延迟。因此,AI服务器对于底层数据传输速率和延时的要求非常苛刻,需要高速率的光模块与之匹配。而光模块作为实现高速、稳定数据传输的关键器件,也随之开启新一轮的产品迭代。其中,800G光模块(传输速率达到800Gbps)作为数据中心以太网中的必要光电转换设备,可完美匹配AI服务器激增的算力和数据交互,在数据中心、云计算、网络通信等领域中被广泛应用。

STM32H5 助力高速光模块应用

2023年,ST推出STM32H5系列,该系列作为新标杆服务于工业应用市场。用于高性能设计的STM32H5系列基于强大的Arm® Cortex®-M33内核 ,运行频率高达250MHz,从最基本的安全构建模块到ST维护的安全认证服务,提供可扩展的安全性,满足所有应用需求。

STM32H5系列基于ST先进的40nm工艺,实现更优化的性价比平衡,提供丰富的内存,外设和封装选择,将给用户带来更强劲的性能和安全性,提供更多设计自由,加快产品上市。

作为新一代高性能MCU系列,STM32H5延续STM32现有的生态系统,有助于开发者轻松实现各类开发应用,还新增了一些特有的新功能,例如I3C通信接口,Secure manager,器件生命周期管理,适合各种智能化应用,尤其是高速通信应用。

引入I3C接口

ST在STM32H5中引入了一个新的通信接口I3C,它是对I2C通信接口的升级,同样基于两根总线SDA和SCL,但性能更高,且可以兼容I2C。

I3C可以在同一根总线上支持更多节点,而不会因为要支持中断或是休眠模式而增加额外的逻辑信号。下图是I3C通信的典型连接方式,支持多种设备类型,当前主设备,辅助主设备,I3C从设备,I2C从设备, I3C设备和I2C设备同时工作。

1.png

更紧凑的封装

随着AI算力不断提升,数据量呈海量增长,传输带宽不断提高,光模块需要具备更高的传输速率和更小的尺寸以适应不同的使用场景。其封装方式也在不断优化,更小封装和更低功耗可以带来更高的端口密度,使得在同样的功率下可以驱动更多的光模块。STM32H5基于ST优化的40nm工艺,采用超小封装-WLCSP80(3.5✖3.27mm), 2M flash,很好满足了高速光模块对于小尺寸的要求。

2.png

更安全的架构

光模块配置和交换机级别的安全是网络架构中至关重要的一环,需要确保只有授权用户才可以访问和配置光模块和交换机,这就要求系统具备强大的身份验证机制。

为减轻客户安全应用的开发成本,ST帮助客户通过安全认证,缩短产品上市时间,推出了交钥匙的安全解决方案,即STM32H5 Secure Manager安全管理器。

Secure Manager提供完整的安全启动与安全升级功能以及安全服务,可以支持多方软件代码IP保护,支持多种配置,并且符合PSA API标准。另外,用户也可以根据需要进行扩展,加入更多的安全模块。

Secure Manager由ST长期维护和支持,使用二进制文件交付,即使客户的产品需要进一步的安全认证,也不需要进行复杂的代码开发。

随着AI应用不断深入,对光模块的性能要求也越来越高。AI系统希望光模块具有更高的速率、更小尺寸和更高的安全性。而作为光模块中的核心芯片,STM32H5将凭借强劲的性能,强大的安全性,依托成熟的STM32生态,助力打造创新的光模块设备,满足AI产业的发展需求。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 53
STM32H5系列最近上新,推出STM32H523和STM32H533两款新品,它们是首款具有256 KB或512 KB双存储区闪存(取决于型号)和272 KB RAM的STM32H5器件。之前已经上市的旗舰STM32H5系列配备的闪存容量高达1024 KB或2048 KB。因此,这款256/512KB闪存新品特别适合对成本更敏感、不需要额外内存但仍需要128 KB以上闪存(如STM32H503所配备的)的应用场景。ST还将继续拓展STM32H5产品组合,帮助客户找到最具成本效益的产品配置。

STM32H523/533两款新品包括两个I3C接口、一个带PD的USB全速控制器和一个SDMMC接口;STM32H533还支持ST- iRoT;可提供多种封装形式:32/48/68-pin QFN,25/39/80-pin WLCSP,48/64/100/144/176-pin LQFP,100/144/169/176-pin UFBGA,选择自由度很高。

1.png

▲ 图示:STM32H5 产品系列

此外,相应的开发板 NUCLEO-H533RE也将推出,以帮助开发人员评估芯片性能并进行产品原型开发。

2.png

▲ 图示:NUCLEO-H533RE开发板
高性能STM32H5:实现优化成本和提升性能的平衡
作为STM32F4的升级版,STM32H5采用强大的Cortex-M33内核,主频为250 MHz,CoreMark跑分高达1023。它内置2 MB双存储区闪存和640 KB RAM,包含CORDIC和FMAC加速器。STM32H5是首款内置硬件ST iROT的MCU产品,符合SESIP3和PSA 3级认证,完美实现优化成本和提升性能的平衡。

3.png

STM32H5系列可简化更注重安全性的工业应用设计,适用的应用场景包括:智能家居,如空调系统、冰箱、报警系统;工厂自动化,如PLC、电机控制、工业泵;智能城市的通信网关、灯光控制、能量转换;以及键盘、跟踪装置、医疗配件等消费类应用。
构建灵活且具有前瞻性的架构
STM32H5是首款包含I3C(改进型内部集成电路)接口的STM32器件,总线速度大大提升。随着嵌入式系统处理传感器数据越来越多,这一点越来越重要。I3C频率为12.5MHz,速度约是I2C的12倍。这项新技术还支持动态地址,使MCU能同时与更多设备通话,从而减少引脚占用。STM32H5还集成了CAN-FD、HDMI-CEC和USB-C电源传输等许多常用接口。

4.png

STM32H5包括两个12位ADC和DAC,满足需要快速数据采集或多个接口的应用需求;还集成了很多计时器,包括两个用于电机控制应用的16位高级计时器。STM32H5的双存储区Flash无需关闭系统即可实现OTA,这在工业应用中是必不可少的。总的来说,STM32H5整个体系结构在灵活性和前瞻性方面达到了理想的平衡。

与STM32其他MCU系列一样,该系列产品同样兼具高可靠性和高效率,可在125°C条件下工作,以满足工业应用的需求。此外,ST还为部分STM32H5器件配备了灵活的电源模式开关模式电源选项(SMPS),可实现更高能效,停止模式下(启用所有I/O)仅消耗46µA。这意味着STM32H5可以使用更便宜的封装形式,在降本增效方面给予用户更多支持。

安全功能可扩展

5.png

STM32系列对嵌入式系统的安全功能开发非常重视。STM32Trust作为STM32全系列产品的安全框架,可为开发者提供12项安全功能。STM32H5产品系列符合SESIP 3级认证标准,能够有效保护系统免受物理和远程攻击;还增加了四个关键的安全功能,这也是STM32H5的安全功能亮点:

■ STM32H5内置了硬件信任根ST iROT,采用两阶段启动加载信任根(iRoT和uRoT)。ST iROT是不可修改的,一旦系统通过ST iRoT进行完整性校验,它就会跳转uRoT,让开发人员能够定义自己的安全策略。硬件信任根ST iROT的引入,可为开发者节省iROT的开发成本和时间,从而加速嵌入式产品的应用开发;

■ STM32H5两阶段启动加载信任根的实现得益于安全存储区的存在,可防止覆盖ST iROT中的敏感数据。用户可根据自身安全需求及开发成本自行选择是否使用iRot和uRot;

■ STM32H5还引入了产品安全生命周期管理,基于认证的调试等新功能,这些新功能可帮助开发人员更好地在现场管理调试设备,让安全功能更加实用;

■ 由ST开发和维护的全新可信执行环境解决方案——安全管理器,可简化开发人员的工作流程,且不受开发人员专业能力的限制,极大地降低了信息安全功能的开发门槛。安全管理器是一款可下载的软件包,包含二进制文件、库文件、代码实现和文档等。该款软件包还包含配置选项,指导开发人员激活某些功能,如STM32H5的不可变可信根(iRoT)。安全管理器作为整体解决方案,可自动设置iRoT,且具备安全存储等功能,因此可大幅简化认证流程。

强大的生态系统

ST已经更新了STM32CubeIDE和STM32CubeMX,确保开发人员能够快速为STM32H5新器件创建应用程序。同样,STM32CubeProgramer等工具将确保开发者能够在MCU上快速写入和调试他们的应用程序。ST还提供新的扩展软件,如X-CUBE-AZURE-H5和X-CUBEAWS-H5,使云连接更加简单。总之,ST希望通过优化硬件创新和软件可访问性,为工程师的开发提供更多便利。

6.png

STM32H5现有四款开发板卡,包括NUCLEO-H533RE、NUCLEO-H503RB、NUCLEO-H563ZI、STM32H573I-DK,开发者可基于这些板卡,快速开始产品的评估和原型设计。

7.png

STM32H573I-DK是首款支持安全管理器(Secure Manager)的探索套件,可实现系统级安全功能。配合X-CUBE-AZURE-H5和X-CUBE-AWS-H5软件扩展包,帮助开发者分别连接到微软和亚马逊的云解决方案。这两个软件包还附带应用程序示例,如发送传感器数据或实现OTA更新等。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 55

本文是上文 《STM32H5 DA 之初体验(带 TrustZone)》的后续之作。倘若你还没有阅读此文,那么建议你先阅读下,然后再回过头来阅读本文。 

之前我们已经讲过了如何通过 DA 认证来回退芯片产品状态,或者重新打开调试口,这样开发人员在芯片为 Closed 状态下时仍可以调试芯片。在这个 DA 认证过程中,有使用到两个东西:证书和私钥,它与之前已经预配置到芯片内部的 obk 文件是对应的关系。也就是说, 如果你已经预配置了芯片, 但对应的私钥文件或者证书丢失或忘记保存了, 那么此芯片多半是无法再还原了, 除非你找到对应的私钥和证书。 

《STM32H5 DA证书链之初体验》全文。

来源:STM32单片机

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 27

一、前言

有客户反馈,在使用 STM32H5 读取温度传感器校准值地址时,会进入 HardFault,而在其他系列芯片中读取这个参数时并没有此现象。在 NUCLEO-H563ZI 开发板上去复现此问题,发现只有开启 ICACHE 后才会复现,初步验证说明进入 HardFault 与 ICACHE 相关,如果直接关闭ICACHE 虽然可以解决进入 HardFault 的问题,但势必会影响代码执行的效率。所以,我们希望能找到一种更好的方式去处理此问题。

二、问题分析

经 Datasheet 查询,两个温度传感器校准值 TS_CAL1 和 TS_CAL2 的地址分别为 0x08FF F814-0x08FF F815 和 0x08FF F818-0x08FF F819。

1.png

根据下表,可以知道 TS_CAL1 和 TS_CAL2 是属于 Read-only 区域的,而 Read-only 区域是通过 AHB system bus 访问的。

2.png

3.png

根据参考手册的描述,所有的 AHB memory 默认都是 cacheable 的,对于无法实现缓存的区域(OTP、RO、data area),必须使用 MPU 来禁用本地缓存。

4.png

也就是说,不仅是 TS_CAL1 和 TS_CAL2,其实整个 OTP、RO(Table 39)、data area区域的访问都无法经过 Cache,需要使用 MPU 将其配置为 none-cacheable 属性。

既然知道了问题所在,那剩下的问题就是确定 OPT、RO、data area 各个区域的地址,data area 是由用户选项字节配置的可进行 100k 次擦除的区域,用于存储用户掉电不丢失的数据,需要根据实际的配置去设置 MPU 区域。剩下的就是 OPT 和 RO 区域,在 STM32H563 中,分别有 2K byte。

5.png

OTP 的地址为[0x08FF F000-0x08FF F7FF]和 RO 的地址为[0x08FF F800-0x08FF FFFF],两个地址其实是连续的。

6.png

三、解决方法

经上述分析后,我们只需要把[0x08FF F000-0x08FF FFFF]这段地址区域设置为 none cacheable,通过 CubeMX 进行配置。

7.png

void MPU_Config(void)
{ 
    MPU_Region_InitTypeDef MPU_InitStruct = {0}; 
    MPU_Attributes_InitTypeDef MPU_AttributesInit = {0};
    
    /* Disables the MPU */ 
    HAL_MPU_Disable();
    
    /** Initializes and configures the Region and the memory to be protected 
    */     
    MPU_InitStruct.Enable = MPU_REGION_ENABLE; 
    MPU_InitStruct.Number = MPU_REGION_NUMBER0; 
    MPU_InitStruct.BaseAddress = 0x08FFF000; 
    MPU_InitStruct.LimitAddress = 0x08FFFFFF; 
    MPU_InitStruct.AttributesIndex = MPU_ATTRIBUTES_NUMBER0; 
    MPU_InitStruct.AccessPermission = MPU_REGION_ALL_RO; 
    MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE; 
    MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
    
    HAL_MPU_ConfigRegion(&MPU_InitStruct); 
    MPU_AttributesInit.Number = MPU_REGION_NUMBER0; 
    MPU_AttributesInit.Attributes = INNER_OUTER (MPU_DEVICE_nGnRnE | MPU_NOT_CACHEABLE 
    | MPU_TRANSIENT | MPU_NO_ALLOCATE);
    
    HAL_MPU_ConfigMemoryAttributes(&MPU_AttributesInit); 
    /* Enables the MPU */
    HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}

经 MPU 配置 OTP 和 RO 的内存访问属性后,就可以正常去读取温度传感器校准值了,同时属于这两个区域的其他值,如 UID、Flash Size、Package 等信息也能正常读取了。

uint16_t TS_CAL1_Val,TS_CAL2_Val; 

uint16_t *TS_CAL1 = (uint16_t *)0x08fff814; 
uint16_t *TS_CAL2 = (uint16_t *)0x08fff818; 
TS_CAL1_Val = *TS_CAL1; 
TS_CAL2_Val = *TS_CAL2;

四、总结

温度传感器校准值及 UID 等一些信息在 H5 中属于只读区域,而这个区域在 AHB 访问时,默认内存属性为 cacheable,需要通过 MPU 把这些区域设置为 none-cacheable,才能正常访问。每个系列的芯片架构都或多或少有差别,当按以往经验操作不能实现功能时,不妨对照相应芯片的数据手册、参考手册、应用笔记、甚至勘误手册,也许就能发现问题所在。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 44

一、前言

STM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。

1.png

如上图所示,product state 有如下状态 : 

  • Open(0xED) : 完全 open 状态,相当于以前的 RDP0。 

  • Provisioning(0x17) : 此状态是专门用来做预配置的。 

  • iROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。 

  • TZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。 

  • Closed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。 

  • Locked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。

整体如下图所示:

2.png

其状态切换如下图所示 :

3.png

如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。

所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。

由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。

二、准备工作

开发板 : NUCLEO-H563ZI 4.jpg

软件包 : STM32Cube_FW_H5_V1.1.0

工具:

  • STM32CubeProgrammer v2.14.0 

  • Tera Term 串口终端显示 

  • Trust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)
IDE: STM32CubeIDE v1.13.0 

STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。

三、生成 OBK 并测试

在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。

3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具 

5.png
在 xml file 处,导入 DA_Config.xml 文件 :
C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml
如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :

6.png

这组密钥对就是接下来需要使用到的密钥对了。

其中 :

Key_1_root.pem 为私钥

Key_1_root_pub.pem 为公钥

3.2. 生成 DA OBK 文件

接下我们将创建 DA 的 obk 文件 :

7.png

如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :

8.png

这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。

3.3. 生成证书

接下来我们继续用 TPC 工具生成证书。

9.png

如上图所示,在 Microcontroller 处选择 STM32H5-2M,在 Root Private Key 处我们选择之前生成的私钥文件 : C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root.pem

而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64
即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。

10.png

如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。

其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。

3.4. DA 预配置 (provisioning)

接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。

11.png

如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。

然后将 Product State 切换到 Provisioning 状态 :

12.png
接下来正式做 DA 预配置…
13.png
如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk
最后点击 Start Provisioning 按键…
14.png
成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…
15.png

如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退… 

3.5. DA 回退

16.png

如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键… 

17.png

如上图所示,在接下来的界面中,在 Key File Path 处选择之前生成的私钥文件 key_1_root.pem:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Keys\key_1_root.pe

如上图所示,在接下来的界面中,在 Key File Path 处选择之前生成的私钥文件 key_1_root.pem:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Keys\key_1_root.pe

在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6

然后点击右边的 Continue 按键… 

18.png

如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…

19.png

如上图所示,弹出界面显示 DA 成功。

这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。

其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。

这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。

四、运行一个程序并 DA 调试

4.1. 在 Open 状态下运行一个示例程序

使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:

20.png

并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:

21.png


然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。

4.2. DA 预配置

接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。 
22.png

如上图,切换到 provisioning 状态。 

23.png

如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。

24.png

弹出上面显示模式,则表示预配置已经成功。

4.3. 修改状态到 Closed 状态 

25.png

如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。

此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。

4.4. DA 调试 

4.4.1. 使用 STM32CubeIDE 调试 NS 工程

在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 : 

26.png
如上图所示,在 Reset behaviour 的 Type 下,选择 software system reset, 然后在 Debug Authentication 下勾上 Enable,在 Key path 后面选择之前生成的私钥文件 : C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Keys\key_1_root.pem,在 Certification path 后面选择之前生成的证书 : C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b64, 然后 Permission 后边选择 Debug Non Secure L1,然后点击 Debug 按键… 
27.png

如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...

4.4.2. 使用 STM32CubeIDE 调试 S 工程

S 工程的调试配置有些许差异。

28.png

如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。

29.png

然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。

30.png

如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:

31.png
32.png
33.png
如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。

4.4.3. 在其它 IDE 中进行 DA 调试

由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。

接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。

34.png
在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover… 
35.png
与 3.5 节类似,在上图中,选择之前生成好的私钥文件 C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Keys\key_1_root.pem,以及证书文件 C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b64,然后点击 Continue 按键… 
36.png
如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键… 

37.png

如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。

接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :

38.png

如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …

39.png

如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…

40.png

如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。

五、还原

还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。

41.png
至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 138

01、前言

本文是接着之前文档《STM32H5 DA 之初体验(带 TrustZone)》的后续之作。

由于新的 product state 和 DA 的引入, 所有 STM32H5 开发者都必须掌握DA 的用法。STM32H563 在 TrustZone 打开和不打开两种情况下, DA 所采用的策略是不相同的。当 TZ 打开时, 使用证书进行 DA, 而当 TZ 不打开时, 则使用密码来 DA。

因此, 本文档针对 STM32H5 初学者, 演示当 TZEN=0xC3(TrustZone 不打开)时, 使用密码来完成 DA 回退。当 TrustZone 未激活时, 不支持 DA 调试,只支持 DA 回退。

此外, 由于 STM32H503 不带 TrustZone, 它的 DA 过程与 H563 不开启 TZ 的情况下类似。除此之外, 与 H563 不同的是, H503 内部没有 OBK 区域, 因此, 预配置过程会将密码对应的 obk 文件写入芯片内部的 OTP 中。

02、准备工作

开发板: NUCLEO-H563ZI

1.jpg

软件包: STM32Cube_FW_H5_V1.1.0

工具:

• STM32CubeProgrammer v2.14.0

• Tera Term 串口终端显示

• Trust Package Creator (安装 STM32CubeProgrammer 时一并安装, 注意勾选)

IDE: STM32CubeIDE v1.13.0

STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下, 在本动手实验中, 我们默认将其放在路径 C:\workspace\目录下。

03、生成OBK并测试

在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA, 在此目录下, 已经包含了默认自带的 obk密钥。其实我们可以直接使用这些 obk 以及对应的密钥, 但在这个文档我们将重新生成一套,并测试它是否 OK。

3.1. 生成 DA OBK 文件和密码文件

打开 TPC 工具。

2.jpg

左边选择 H5, 上方选项卡选择 OBKey, 然后在 xml file 处选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Config/DA_ConfigWithPassword.xml, 然后在 Password 处输入你想要设置的密码, 这里我们直接使用默认密码即可。然后在 output file 处设置输出文件, 我们也使用默认即可。最后点击 Generate OBkey 按键, 在 Binary 目录下生成对应的 obk 文件和bin 文件 :

3.jpg

如上图所示, DA_ConfigWithPassword.obk 是用来做预配置(provisioning)用的, 而password.bin 则是在 DA 过程中需要的密码文件了。

3.2. 预配置 DA(provisioning)

接下来我们将做预配置 DA, 在此之前我们确保 TZEN=0xC3。

4.jpg

然后将 product state 配置为 provisioning 状态 :

5.jpg

然后使用 STM32CubeProgrammer 进行预配置 :

6.jpg

如上图所示, 在 OBKey file path 处输入C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA\Binary\DA_ConfigWithPassword.obk 文件, 再点击 Start Provisioning 按键…

7.jpg

结果将弹出对话框提示预配置成功。

3.3. DA 回退

接下来我们直接使用密码进行 DA 回退…

8.jpg

如上图, 在 STM32CubeProgrammer 断开的情况下, 点击 Discover…

9.jpg

如上图所示, 在 Password File Path 处输入密码文件 :C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA\Binary\password.bin

然后点击 Full Regression 按键…

10.jpg

如上图所示, 成功时会弹出提示对话框。

这表示, 之前 DA 预配置的 obk 文件与当前输入的密码文件是匹配的。

04、烧录程序再次测试

接下来, 我们正式烧录一个程序并测试。在 product state=open 状态下, 且 TZEN=0xC3 时, 此时烧录任何一个不带 TrustZone 的程序,并确保其在 OPEN 状态下能正常运行,然后将 product state 切换到 provisioning 状态进行 DA 预配置, 重复 3.2 节步骤。

在预配置成功之后, 然后将 product state 切换到 CLOSED(0x72)状态. 此时 STLink 是无法再连接的, 然后检查程序是能依然正常运行。这就是最终想要达到的效果。在此状态下, 可以通过 DA 进行回退。

05、还原

还原的过程参考 3.3 节, 步骤完全一致。最终还原成功后, 全片 Flash 内容已经擦除。

至此, 芯片完全恢复成原始状态。

来源:STM32单片机

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 83

页面

订阅 RSS - STM32H5