搜索
查看: 720|回复: 0

[讨论] STM32的串口下载方式(ISP)的写保护位编程错误

[复制链接]

该用户从未签到

2

主题

32

帖子

0

蝴蝶豆

初级会员

最后登录
2021-3-12
发表于 2021-1-26 10:19:09 | 显示全部楼层 |阅读模式
正常使用STM32系列MCUPCBA,都会在生产中将代码编程进去,并且设置必要的读写保护,不设置保护状态直接出厂的,应该没有这种情况吧?我在通过ISP功能进行编程,读写保护设置时,发现了一个奇怪的错误,当设置写保护位在WRP的高24bit时,会被后续的读保护命令清除,导致该部分的扇区无法在ISP过程中正常保护。
试验环境:
a) STM32F103C8T6的目标板一块,正常供电,不限具体功能。
b) SWD调试口接入,CMD窗口运行STLink命令行工具用于查看内部状态。
c) 计算机运行终端软件通过串口连接目标板的USART1,用于ISP命令。
d) BOOT03.3V(VDD)用于上电后进入ISP内部自举模式。
试验过程(ISP命令操作读保护撤销,写保护的设置,读保护使能),以下绿色数据为终端窗口发往MCU,蓝色数据为MCU的应答返回。
CMD窗口STLink命令行显示内容中,绿色为期望的改变,红色为未期望的改变。
//Terminal Window:===========================
1) USART1发送Readout unprotect 指令
7F
79
92 6D
79 79
//CMD Window:>ST-LINK_CLI.exe -c hotplug -rob/////////////
1) SWD读取MCU Option bytes
Device ID: 0x410
Device flash Size: 64 Kbytes
Device family: STM32F10xx Medium-density
Option bytes:
RDP             : DISABLED
IWDG_SW         : 1
nRST_STOP       : 1
nRST_STDBY      : 1
Data0           : 0xFF
Data1           : 0xFF
WRP             : 0xFFFFFFFF
//Terminal Window:===========================
2) USART1发送Write protect 指令(保护第1Sector)
7F
79
63 9C
79
00 00 00
79
//CMD Window:>ST-LINK_CLI.exe -c hotplug -rob/////////////
3) SWD读取MCU Option bytes
Option bytes:
RDP             : DISABLED
IWDG_SW         : 1
nRST_STOP       : 1
nRST_STDBY      : 1
Data0           : 0xFF
Data1           : 0xFF
WRP             : 0xFFFFFFFE
//Terminal Window:===========================
4) USART1发送Readout protect 指令
7F
79
82 7D
79 79
//CMD Window:>ST-LINK_CLI.exe -c hotplug -rob/////////////
5) SWD读取MCU Option bytes
Option bytes:
RDP             : ENABLED
IWDG_SW         : 1
nRST_STOP       : 1
nRST_STDBY      : 1
Data0           : 0xFF
Data1           : 0xFF
WRP             : 0xFFFFFFFE
重复上述1)->6)步骤,每次在第3)步增加一个保护Sector。当试验到第4)步读出为WRP=0xFFFFFE00时(写保护前面9Sectors)。执行第5)步读保护后,在第6)步检查时,发现WRP发生了未期望的改变,变成了0xFFFFFF00。过程如下:
//Terminal Window://///////////
7F
79
92 6D
79 79
7F
79
63 9C
79
08 00 01 02 03 04 05 06 07 08 00  (Write protect 00 -> 08 total 9 sectors)
79
//CMD Window:>ST-LINK_CLI.exe -c hotplug -rob/////////////
Option bytes:
RDP             : DISABLED
IWDG_SW         : 1
nRST_STOP       : 1
nRST_STDBY      : 1
Data0           : 0xFF
Data1           : 0xFF
WRP             : 0xFFFFFE00
//Terminal Window://///////////
7F
79
82 7D
79 79
//CMD Window:>ST-LINK_CLI.exe -c hotplug -rob/////////////
Option bytes:
RDP             : ENABLED
IWDG_SW         : 1
nRST_STOP       : 1
nRST_STDBY      : 1
Data0           : 0xFF
Data1           : 0xFF
WRP             : 0xFFFFFF00
后续的试验证实了这一点,Write protect 指令设置的WRP字,只有低8位字节能够在Readout protect指令执行后保留,WRP的高243字节都将被未期望改写为1
而且这似乎无法绕过,因为执行了Readout Protect指令后,无法再用Write Protect指令改写WRP了。

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-19 22:00 , Processed in 0.144090 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表