使用DAPLink+OpenOCD解除MCU的Flash读保护

Author:@kkl


写在前面

今天在使用Keil5烧录STM32单片机代码的时候突然弹框警告:Error : Flash Download failed - "Cortex-M4" or RDDI-DAP error,这个错误多数是因为MCU在烧录过程中受到意外干扰,自行开启了Flash读保护导致的。

曾经我也不少时候遇到过这种情况,那时候的解决办法是利用烧录软件flymcu通过串口清除全部Flash内容,进而消除读保护;或者使用ST-Link搭配官方软件STM32 ST-LINK Utility来消除读保护。

但是现在我手里只有DAPLink(ga…,于是绞尽脑汁搜寻方法,苦闷了好久。突然间想到似乎可以尝试一下OpenOCD,于是抱着实验的心态,我搜罗了大量相关的内容后,得到了以下的解决办法。

下载OpenOCD

由于我当前的系统环境是Win 11,于是OpenOCD应该选择Download pre-built OpenOCD for Windows,选择任何版本都不影响最终效果,选择最新的版本即可。

下载OpenOCD

下载网址:https://gnutoolchains.com/arm-eabi/openocd/

解除Flash读保护

下载并且解压好OpenOCD压缩包以后,连接好单片机和DAPLink。

注意:解压文件路径尽量不要夹带中文或者特殊标点字符,以避免可能出现意外的错误。

接着在路径\OpenOCD-20240916-0.12.0\bin下打开命令行,输入命令:.\openocd -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg -c init -c "reset halt" -c "stm32f4x unlock 0" -c "reset halt" -c "exit".

这时如果生成以下日志,则代表Flash读保护解除成功,可以重新使用Keil进行程序的烧录啦:

如果没有成功,请检查单片机和DAPLink的连线。

由于我使用的单片机型号是STM32F401RET6,所以我选择了target/stm32f4x.cfg & stm32f4x,你可以在该路径\OpenOCD-20240916-0.12.0\share\openocd\scripts\target找到适合你的单片机型号的对应文件,市面上大部分的单片机型号的对应文件应该都能够在这儿找到。

最后一件事(重要👀

使用DAPLink+OpenOCD解除MCU的Flash读保护可能会导致Keil在程序烧录时出现Verify failed的情况,这并不影响程序的正常烧录,手动给单片机复位一下就行,只是有点不优雅,如果可以的话后面拿ST-Link重新再执行一次Flash解除读保护就最好了(谁叫人家是官方…

当然也有可能只是单纯烧录频率太快了,在魔术棒的Debug->CMSIS-DAP Debugger->Settings设置中,将频率调整到1MHz,报错的警告就消失啦!

"Verify failed"的解决办法

写在后面


使用DAPLink+OpenOCD解除MCU的Flash读保护
https://zhangkeliang0627.github.io/2024/10/14/使用DAPLink+OpenOCD解除MCU的Flash读保护/README/
Author
Zhang-keliang
Posted on
October 14, 2024
Licensed under