• 资料介绍
  • 在线预览
  • 相关推荐
申请入驻 产业图谱

LAT1450 不断电情况下修改RDP选项并生效的解决方案

2025/03/11
949
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

LAT1450 不断电情况下修改RDP选项并生效的解决方案

774.04 KB

1、前言

某客户使用 STM32L4 开发一款产品,组装外壳后通过脱机烧录器进行烧写,烧好后放置到库房,存放期间由电池进行供电,出库发货时通过 UART_IR 红外接口接收指令将 Option ByteRDP 设置为 RDP2 读保护。但是,发现一旦执行 RDP=2 指令后 STM32 立即出现死机变砖,即使进行 NRST 引脚硬件复位也无效,必须拔下电池(断电)后 MCU 才能恢复工作。

2、问题调研与复现

接到客户反馈后立即与客户进行了沟通,并告知客户修改 RDP 后需要断开 SWD/JTAG 调试口与 MCU 之间的物理连接,并且需要复位一次后 RDP 才会生效。客户再三确认他们使能RDP 是通过远程指令操作的,且外壳组装后也没办法做断电复位,即使 NRST 硬件也无效,该生产线流程是 STM32L151 一直沿用下来的,更改产线将增加生产成本。根据客户描述及生产流程,在 NUCLEO-L476RG 上进行了测试和验证。

(一)复现问题编写测试程序,下载后将 NUCLEO-L476 ST-LINK 跳线帽断开,在 Tera 串口终端输入指令将 RDP 修改为 Lvel1(0xBB),当执行 OB_Launch 指令后程序卡死,NRST 按键复位无效。

(二) 使用 STM32Cubeprogrammer 将选项字恢复到 Level0(RDP=0xAA),断开 ST-LINK 跳线帽断电一次,可以看到在执行完 HAL_FLASH_OB_Launch()后,MCU 立即复位并成功运行。

也就证实了 STM32L4 在修改选项字后,必须对系统实施一次断电操作,系统才能正常运行。

3、问题分析与解决办法

既然问题是由于 MCU 没有断电的情况下,执行 HAL_FLASH_OB_Launch()后无法正常复位引起,那么我们能否通过软件方式,让 MCU 产生掉电从而实现与断电同等的效果呢?STM32L4 在 Shutdown 模式下 CPU、SRAM、LPR 均处于掉电状态。因此,能否在修改选项字 RDP 后使 MCU 进入 Shutdown 模式,然后再唤醒从而使 RDP 生效呢?

按照上面的思路,对代码做如下改动 :

  1. 修改 RDP 后不再执行 HAL_FLASH_OB_Launch(),不立即生效(不卡死).
  2. MCU 进入 shutdown 模式
  3. 使用一个按键作为唤醒原触发 shutdown 唤醒,并产生复位。

4、小结

对于早期的 STM32F0xx/ STM32F1xx/ STM32F2xx/ STM32F4xx 在修改读保护(RDP)后,只需要执行 HAL_FLASH_OB_Launch()后 MCU 会自动复位 RDP 生效。但是,对于STM32F4 以后量产的型号,修改选项字后必须重新断电一次,MCU 才能正常运行。对于此方法,笔者使用的是 GPIO 作为唤醒源来使 MCU 从 shutdown 模式唤醒。其实,若使用 RTC 作为唤醒源稍作配置,就可以无需手动操作实现 RDP 不断电的修改生效。

在线预览

相关推荐

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一 家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和 解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需 求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广 泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排 放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏 览意法半导体公司网站:www.st.com.cn