所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问--写保护和读保护。
读保护是作用于整个Flash存储区,一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:
通过调试器(JTAG或SWD)
从RAM中启动并执行的程序
写保护是以四页(1KB/页)Flash存储区为单位提供保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。
以下是一个简单的小结:
读保护 写保护 对Flash的操作功能
有效 有效 CPU只能读;禁止调试和非法访问
有效 无效 CPU可以读写;禁止调试和非法访问;页0~3为写保护
无效 有效 CPU可读;允许调试和非法访问
无效 无效 CPU可以读写;允许调试和非法访问
下面的则是我的经历:我昨天晚上突然就发现芯片被读保护了,我没有设对应的选项啊,不知怎么回事.今天搞定之后发现还是时不时的会自己变成读保护,郁闷中.
我板子的症状:
1. 无法有Keil上的jlink方式下载,无法擦除.
2. 使用官方的flash loader demo:第一步连接之后,出现红字,提示:the target is read protected. Please click "remove protection" to remove the protectiion. WARNING:when you click "Remove protection" the flash will be mass erased and all data will be lost.
然后是remove protection按钮.点击这个按钮:This command is not supported by the target.
解决办法:(我是看了多篇文章才知道原来Jlink arm有一个unsecure chip的命令的.)
1. 在一个类似于D:\Program Files\SEGGER\JLinkARM_V404a的目录下找到JFlashARM.exe.点击它.
2. options->project settings->production 勾选secure chip.这一项的作用是让你的另一个菜单项可以使用secure chip 和unsecure chip命令.
如图:
3. Target->connect.这里要先连接板子才可以进行unsecure chip 操作.连接的时候我一开始连接不上,很郁闷.但是不小心把启动方的跳线冒弄掉了,却发现可以了.也就是说,我是在从片bootloader的启动方式下(即使用串口的那种方式)连接上的.连接上之后.targer->unsecure chip.提示成功.
4.正常用Keil里的下载方式就可以下载了.
问题:
1.我现可以下载了,但是用串口方式依然提示读保护状态.而且无法去掉,即串口方式没有改变.
2.我用串口启动方式连接的jlink,这种方式可以连接jlink可以对芯片进行操作吗?以前记得是不能的.以前都是接上跳线冒才下载程序的.而我确定的确是可以用了,因为我现在安上跳线冒下载程序也能过了.
如果谁能回答我的问题,欢迎讨论一下.