ST意法半导体
直播中

母猪会上树

10年用户 896经验值
擅长:电源/新能源
私信 关注
[问答]

STM32H75x如何通过移除安全区域正确擦除?

我有一些代码通过所谓的从 RDP 级别 1 到级别 0 的“回归”删除了 STM32H75x 上的“安全区域”,这会导致完全擦除。
(实际上这段代码是基于 ST 支持非常友好地提供的示例)
  • void EraseAll(void)
  • {
  •   uint32_t flashUserOpt;
  •   printf("Launching erase all process. Requires RDPL1 already setn");
  •   __HAL_FLASH_CLEAR_FLAG_BANK1(FLASH_FLAG_ALL_ERRORS_BANK1);
  •   HAL_FLASH_OB_Unlock();
  •   FLASH->OPTSR_PRG = 0x13BEAAF0;     /* RDP level 0 */
  •   FLASH->PRAR_PRG1 = 0x80000FFF;       /* No PCROP */
  •   FLASH->SCAR_PRG1 = 0x80000FFF;       /* No secure area */
  •   FLASH->WPSN_PRG1 = 0x000000FF;       /* No WRP */
  •   OBLaunchWithCheck();
  •   HAL_FLASH_OB_Lock();
  • }
  • void OBLaunchWithCheck(void)
  • {
  •   HAL_StatusTypeDef error;
  •   if ((error=HAL_FLASH_OB_Launch()) != HAL_OK)
  •   {
  •     printf("HAL_FLASH_OB_Launch failed. HAL_ERROR: %d Error code : %8.8x ...rn", error, pFlash.ErrorCode);
  •     printf("Flash->SR1: 0x%8.8xrn", FLASH->SR1);
  •   }
  • }
擦除通常 (*) 有效,但在电源循环后 ST-LINK 实用程序无法访问芯片,显示“删除保护”。
在此状态下,选项字节对话框显示安全位已设置。
然后我清除安全位,保存选项字节,然后 ST-LINK 实用程序重新获得对芯片的完全访问权限,可以读取和编程等。
我的问题是,是否可以跳过 SECURITY 位的重置?
在上面的代码片段的第 9 行中,写入 FLASH_OPTSR_PRG 的值设置了 SECURITY 位 (21)。
应该是这样还是错误?
已经把我所有的廉价 H75x 板库存都用砖砌成砖块,等待新订单。
很抱歉,在更多电路板到达之前,我不能自己尝试和测试它。
顺便说一句——我的测试板有 H750 修订版 Y。修订版 V 中有什么相关的更改/改进吗?
提前致谢,
-- 帕维尔 A。
(*) 当电路板变砖时,ST-LINK 实用程序可以正确检测到芯片 - 但既不能读取闪存也不能读取选项字节;然后它会断开连接,并且在没有电源循环的情况下无法再次连接。看起来安全区域和/或 RDP1 仍然处于活动状态,但安全区域中的代码已被删除(没有此代码运行的迹象)。








回帖(1)

韩禹

2023-1-10 10:56:36
我对 STM32H753 rev Y(在评估板上)进行了测试,我确认了你的问题。
在此版本中,不可能同时进行回归和删除安全性。
现在,我猜你现在只能从经销商那里得到 Rev V。
同样,关于您的“砖板”,我建议至少
1- 尝试使用 STM32CubeProgrammer 而不是 STLink Utility
2- 下载最新版本的 STLink 固件
3-尝试附加热插拔
举报

更多回帖

发帖
×
20
完善资料,
赚取积分