|
01 前言 7 w$ ^ [4 w; N. }6 o8 `1 o STM32H5引入一个新的名词OBK。OBK是Option byte key的意思,本意用来存储密钥,也可以用来存储数据。传统STM32开发与量产需要考虑应用程序以及选项字节,对于STM32H5,则还需要考虑OBK。本文在STM32H5官方文档的基础上带领读者进一步认识一下OBK。, v% [# p/ G6 T2 D/ t 3 q6 T" f$ U( ?9 O 028 V" s4 u1 s7 S2 t) }( l OBK存储区的几个疑问 2.1. OBK是STM32H5系列都有的吗?7 t3 a/ A/ u# s( a" c7 Z1 g5 m8 J! o 并不是所有的STM32H5系列都存在OBK。在STM32H503上相应的DA【调试认证】功能是借助OTP来完成的,也就是说,STM32H503并没有OBK。 1 c" S2 n, r* P' K$ V7 f) V$ w; ] 2.2. OBK区是使用STM32H5必需的吗?2 u0 e6 ?8 n) I; m( J 如果用户开发STM32H5应用,是否可以不使用OBK?可以。 STM32H5引入了新的芯片生命周期概念,其Open状态类似于传统STM32的读保护RDP 0级别。如果你的产品从来没考虑过读保护RDP,那么意味着你过去使用STM32都是在默认级别读保护RDP0。在这种需求下,产品量产时只需要关心应用程序和选项字节,不需要理会生命周期概念,自然也不需理会OBK。! o: V1 r& a! L9 ?. _/ R6 S. G 另外,如果用户希望在产品发布后SWD/JTAG都不能被访问,那么只需要将STM32H5设置成Close或者Lock状态,也不用理睬OBK。 w$ K/ f& ^9 E 2.3. 不使用OBK区会不会是一种技术上的浪费? 如果在用户Flash使用已经紧张的情况下,不使用OBK确实是一种浪费。OBK总的大小有8K之多,可以写入任何数据。如果用户Flash空间紧张,即使不考虑任何安全保护的需求,理论上也可以考虑使用OBK。不过OBK的读写受到OBK存储区规则的限制,尽管有8K这么大,是否可以完全使用这8K,依赖于特定的应用需求是否和OBK-HDPL规则相匹配。/ p. n/ ?& |$ U$ D9 a 2.4. 什么情况下一定需要使用OBK区?, ^! M2 o( D7 @/ } STM32H5的优势之一是引入芯片生命周期管理,例如支持将产品状态设置到Close状态。在Close状态,除非用户能提供相应的密码和证书作为凭证进行DA认证,否则通过SWD/JTAG不能访问应用代码,也意味着代码得到了外部访问保护。在这种情况下,若需要使用OBK存储DA认证的相关的信息,这个时候OBK就必须使用。$ N7 V1 g. V$ ], e* | 换句话说,你是否在脱离Open/Provisioning状态后还希望通过SWD/JTAG访问 STM32H5,则建议使用OBK区。 - d' V% n) C5 e! t. L s/ h 038 T: o2 a3 c" d* e' a# m OBK文件 4 b0 @0 b6 a/ W$ _% ` 3.1. OBK 文件的格式 ( i+ L' {' ^5 N( h0 Y) j OBK存储区既可以用来存放密钥也可以存放数据,即OBK的内容可以和应用有关。也就是说OBK不仅仅可以用来做DA认证,也可以作为应用程序的数据区。如果OBK用来做DA认证,则OBK的格式要符合DA认证的要求;如果OBK用来做应用程序的数据区,则OBK的格式要符合应用程序的要求。而应用程序需求千差万别。因此,OBK烧录时,并没有定义它的内容符合什么样的要求,而只关心三个方面: ....uint32_t.destAddress:烧在哪个地址 ....uint32_t.OBKeySize:大小是多大 ....uint32_t.doEncryption:存储在MCU中是否需要加密# ~. \! n, d2 ^4 `9 h6 O 上位机的OBK文件相比较OBK存储区的实际内容就多了一个头部,头部的内容就是以上三项。头部信息的存在是为了告诉烧录程序,如何处理OBK文件中的payload负荷,头部信息本身在OBK存储区中并不存在。4 h5 w, {- `- P) g! H# c! [ U3 h OBK文件中的payload负荷如果没有在头部指定加密的情况下,可以和存储区中的相应位置的数据一一对应。如果在头部指定加密,相应的STM32H5支持硬件加密,那么OBK文件依然是明文,但是OBK存储区则是密文。9 Y/ D2 p" z9 t: Q2 m& d 这也说明,对于OBK烧录工具,不管是证书,密码,还是数据,都会一样被处理。 / z7 _- y' P! K* p 3.2. OBK 文件生成的方法 STM32 Trusted Package Creator可以用来生成DA以及应用需要的OBK文件。它的输入是xml文件,可通过图形界面或者文本进行编辑。对于没有在图形界面上显示的配置项目,可通过编辑xml让它在图形界面上显示,也可以直接编辑XML,然后再加载XML来进行OBK生成。! z9 v8 S' c) W5 A/ q 生成基于密码的DA OBK界面如下。注意,这里输入的密码会被Hash放入OBK文件中,也就是说从OBK文件是无从得知用于DA的密码是什么。因为DA认证也需要后期主机输入凭证对MCU进行解锁,这个界面也同时会生成password.bin。password.bin内容则包含密码明文。非开发阶段,用户要注意对password.bin的保密。
OBK烧录方法 ; ?5 y( W9 L" l1 u6 e 4.1. 使用RSSLIB! h- N; Q: |; v' R STM32H5提供RSSLIB支持OBK烧录。最典型的用法存在于STM32CubeProgrammer中,它使用运行在MCU上的RSSLIB的函数进行OBK的烧录。* j1 e" Q) c0 ] 在Product state为Provisioning时,烧录OBK的界面如下:0 g( h4 q0 {5 ^8 f% P3 B
对于STM32H563等产品,它们不支持硬件加密OBK,这个时候在其他状态烧录OBK,是可行的。 选择Nucleo-H563ZI开发板,选择Open状态。打开STM32CubeProgrammer,这个时候,选择同样的OBK烧录操作,我们会得到如下警告,告知我们OBK无法进行烧录。4 K; t$ i5 y4 w/ e' [/ o6 b
STM32_Programmer_CLI.exe -c port=swd mode=hotplug -sdp : I) j5 t9 n- o0 U' ^1 `: v DA_ConfigWithPassword.obk" b1 [3 [/ B+ O( y/ @ }0 U1 o0 @ 这个时候我们可以停留在或者退出bootloader模式,使用STM32CubeProgrammer,我们可以看到OBK区域已经被成功烧录。
不过,如果你没有拉高boot0管教,即使你使用STM32CubeProgrammer命令行进行烧录,也会给你返回失败的log。
STM32提供了HAL库,让MCU用户可以在应用程序里对OBK使用寄存器进行读写。STM32Cube软件包提供了相应的例程,举个例子:
值得注意的是,当在支持OBK加密的STM32H5系列上,Open状态使用例程进行OBK得到的结果并不正确,原因在于Open状态会导致和产品发布状态例如Closed的密钥不一致。 这个例程也可以用来理解OBK-HDPL的概念。' y% h3 c2 B5 m8 N1 m$ h1 L# A 同样,使用寄存器直接编程,在Open状态进行OBK烧录具有OBK明文确认的优势。 - }" w/ B$ j! {- @ 058 s5 `. s7 D" b5 O5 [ 小结 通过本文,希望用户在STM32H5正式文档的基础进一步了解,OBK的用处, OBK与OBK文件的差异,OBK的生成工具,OBK的烧录方法,适合STM32H5的用户在实践中进行参考。' Z( B9 L& e& N$ K- H5 \' h
LAT1429_进一步认识STM32H5_OBK_v1.0.pdf
(848.01 KB, 下载次数: 8)
|
STM32H5系列新品发布,为开发人员留出更多拓展空间
实战经验 | MCU复位期间PC端仍然认为USB连接未断开
新品上市 | STM32H5系列扩容,1MB Flash新品STM32H543/553助力成本性能均衡设计
【新品发布】STM32H543/H553 新品登场
STM32家族再添猛将:STM32H5F/E高性能系列,4MB闪存+Chrom-ART2,专为中高级图形应用而生
架构革新篇:单芯片 GUI 方案原理与核心优化技术
趋势痛点篇:嵌入式 GUI 爆发,传统存储架构的困境与挑战
上海/深圳 | 基于STM32H5的GUI图显应用开发线下实训
实战经验 | STM32H5基于USBx裸机添加OUT端点实现HID类双向通信
STM32H5 USBX 裸机实现 HID 双向通信:OUT 端点添加完整指南
微信公众号
手机版
感谢管管大大,普及OBK的知识。