
STM32芯片的保护等级有3级,0、1、2。 等级0:无保护 等级1:无法访问Flash和部分sram及其他一些资源。但是可以设置回0,退回0需要擦除整个Flash 等级2:完全锁死芯片,无法调试、烧录等操作。且该等级无法逆转。 而STM32U5系列具有保护等级回退功能,可以从2退回1,1退回0。 一.理论知识 官方有一份文档关于保护等级降级的描述和操作,文档编号为《LAT1086》,有兴趣的可以主动去阅读。 因为我没有使用TrustZone的经验,为了今天试验的顺利进行,本文只讨论TrustZone不使用的情况,不过大部分的操作都是通用的,额外缺漏的可以从ST的文档中自主学习。 当TrustZone不使用时,保护等级变化如图所示 ![]() 从0->1、0->2、1->2都只需要设置RDP参数即可,和普通STM32一样。但是多了从2->1、1->0这两个。 从2退回1时,需要使用OEM2秘钥。从1退回0时需要OEM1秘钥。 所以在使用该功能时,需要设置两个OEM秘钥。关于秘钥有以下几个注意点: ①需要注意的是秘钥不能为全0或1 $ A+ {; T ~5 M②秘钥不是在任何时刻都可以设置/修改的,具体如下图所示 ![]() ③秘钥设置后无法撤销,但是可以修改(这一条我不太理解,我看ST的意思是秘钥一旦设置好以后就无法清除,只能在允许修改的情况下修改。但是我试验时发现是有清除按钮的,是文档写的太早,而现在已经有清除功能了?) 因此,强烈建议在等级0时设置秘钥、修改秘钥 * ]( h0 X) G" d5 D" W% Q: Q8 X 二.实操 首先我们先检查一下保护等级。我们需要使用STM32CubeProgrammerv2.8.0及以上的版本,且Stlink固件需要V3J8M3及以上。我这边使用的是目前最新版2.12.0和V3J10M3 2.1检查秘钥设置情况 板卡连接电脑,打开STM32CubeProgrammer,选择ST-Link,连接 ![]() 连接好后,正确识别到芯片了 ![]() 点击左侧的REG图标,Device选择STM32U5XX,Search内输入FLASH,回车 在NSSR中有两个参数“OEM1LOCK”、“OEM2LOCK”。当值为0时表示未设置秘钥,1为设置了秘钥 我手上的芯片是全新的,所以这两个参数都是0,未设置。 ![]() 2.2设置OEM秘钥 我们设置OEM秘钥,我使用的2.12.0版本的软件已经有图形化操作界面了,不需要再和ST文档中那样使用命令行了,可以直接在下图界面设置秘钥、解锁 ![]() 这个全新的界面我也是第一次使用,保险起见我先阅读一下官方文档《UM2237 Rev20》中的“2.9.2 RDP regression with password (STM32U5Series only)”,这一章节专门是描述该页面是如何使用的 ![]() 5 B; v& [8 N8 C5 l1 m4 U 先看一下RDP等级 ![]() 是0级,可以设置OEM秘钥1和2 设置秘钥,需要注意的是,秘钥不能全为0或1。 . b2 b! w$ w9 O1 s( z在Password框内输入想设置的秘钥,我这边设置的是0x11223344,0x55667788。设置的时候注意0x和密码长度,我输入了一下发现这个框没有做限制,可以随意输入,不知道点击设置后会不会有错误提示,因为我手上只有一块板子,不敢乱设,就不尝试了 ![]() 点击set password后会有一个提示框 ![]() 我们点击第一个Apply Lock RDP1 9 Z) T. u. H; q设置完成 ![]() 检查一下标志位,变成1了,OEM1秘钥就设置完成了。OEM2秘钥设置类似,就不展示了 ![]() ( z5 w" }( S+ @ 2.3从等级1降级至等级0 我先把等级设置为1,试一下用OEM1秘钥解锁、降级 ![]() 设置完成 ![]() 接下来解锁 ![]() 点击ApplyUnlock RDP1 ![]() 解锁完成,就可以去降级了 ![]() 尝试降级 ![]() 降级成功 ![]() ) D$ M( D/ p0 W1 t4 h% x 2.4移除秘钥 如果想要移除秘钥可以在保护0时点击Disablepassword ![]() 点击apply ![]() 移除成功 ![]() 检查一下标志位,变成0了 ![]() 2.5从等级2降至等级1 我们在等级0时先设置好OEM1、OEM2秘钥,这里就不再赘述步骤了 秘钥设置如图所示 ![]() 两个秘钥设置成功 ![]() 直接将保护等级设置为2(心里还是蛮紧张的,很害怕操作失误,这块板子变砖) ![]() 这里还很贴心的弹出了一个提示框,告诉我可以设置一个OEM2秘钥来去除等级2保护 ![]() 点击确定后,还会再次确认是否要继续,并提示该操作的风险 ![]() 设置完成,芯片断连,保护2生效 ![]() 随后点击Unlock RDP2(密码框内要有秘钥),Apply Unlock RDP2 ![]() 再点击右侧的连接 途中虽然有弹出错误/失败的提示框,我们不必理会,正常的,最终会成功连接上芯片!此时RDP保护等级为FF,代表我们成功了 ![]() 下面是ST文档中的一些描述 ![]() ![]() 虽然官方的描述在内部逻辑上不是非常详细,我个人的理解是,当芯片处于等级2时,其他系列的芯片在调试口收到任何数据都是拒绝处理的,U5会处理一种数据,那就是携带OEM2秘钥的解锁指令。一旦秘钥正确,就会触发硬件解锁+降级至1的操作。然后就可以正常通过调试口连接芯片了,此时RDP保护等级会显示FF,虽然不是DC,但是芯片已经处于等级1了。 我们可以重复之前的操作,把等级1降至等级0,步骤我就不赘述了,和之前的一样 " J7 z2 X! ~0 O/ o3 v已经降至0了 ![]() 5 G1 w. k1 S# Y9 J4 K% k7 J, ` 3.反思 今天的分享结束了,但是我还有一个疑问,如果有人用暴力的方式一直尝试解锁,芯片会不会有保护措施呢?虽然0x00000000 00000000~0xFFFFFFFF FFFFFFFF很多,挨个尝试要很久,但是终将会被破解。是否有和手机一样的输入多少次错误秘钥就禁止一定时间输入秘钥? ( O; ] S; w% m9 K* l z5 d; H* B8 p3 O N3 c6 ~8 e, H, k5 | |
支持,很详细了 |
STM32U5低功耗测试
STM32怎么选型
内存配置的艺术:STM32为嵌入式系统高端UI优化RAM和闪存的三大策略
STM32U5 系列使用 LPBAM 进行功耗优化
【STM32U545】实现CAN数据收发
【我的STM32U5 项目秀】+04-MPU6050在STM32U5上的移植
实战经验 | 基于 STM32U5 创建 USBx_CustomHID 通信
STM32U5 x E-BIKE,记录你的骑行多巴胺
基于STM32U5系列TIMER+DMA+DAC应用经验分享
实战经验 | 基于 STM32U5 片内温度传感器正确测算温度