STM32 某些型号的单片机有boot_lock寄存器,boot_lock用于控制单片机启动模式的。一旦置位boot_lock,单片机默认从内部flash启动,不经过system memory也就是BootLoader。
其他型号上是通过nboot等几个寄存器组合控制启动模式的,boot_lock只有在新型号上有,功能上看着有点重复,猜测是和某些安全特性配合使用的。
最近为了做固件保护,尝试用了boot_lock配置启动模式,但配置后发现debug锁死了。网上查了半天没啥有用的帖子,后来仔细看了下manual发现这个feature坑的地方,配置boot_lock + rdp level 1之后,全局的debug寄存器会自动被复位,也就导致debug jtag/swd口锁死。
最坑的是这个状态时断头路,一旦配置除非固件去配置dbg_swen否则无法修复!芯片就永久没法用swd调试或下载flash了。
规避方法
1、错配boot_lock + rdp level之后,不要复位芯片,立刻去做全擦除并且改掉boot lock。但这种方法通常没鸟用,配错并且不复位的情况太少了。
2、配置之前,固件留好后门或者固件上来就去使能dbg_swen