SWD协议读取和操作Cortex-M系列单片选项字节

本文详细介绍了如何在STM32F4系列芯片中处理脱机烧录时遇到的读保护问题,包括不同型号的操作步骤,如GD32F130/330G8、STM32F411/410/401CE等,并分享了解锁与锁定寄存器的技巧,对后续开发脱机烧录器具有实用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 最近工作需要使用到脱机烧写,而且PCB上只留了SWD的接口。使用烧写盒的话总是有些小问题STM32F4系列如果BOOT1没有接上下拉的话会出现芯片被锁的情况导致脱机烧录器无法对芯片进行烧录。

2. 当时还不知道问题在哪,本着实事求是的精神逻辑分析仪抓包了下SWD的协议,通过Jlink Commander读取芯片的0x40023C14寄存器,结合芯片参考手册发现时芯片被使能了读写保护。通过J-Flash连上芯片后先进行lock,在进行unlock就可以恢复正常。于是抓了包lock、unlock的数据记录下来。要是以后自己做脱机烧录器说不定还能用上。顺便验证了下其他常用芯片的lock、unlock一并记录。

3. 下面都是具体的芯片型号据测试,同一个系列的都是一样的操作方式。

GD32F130/330G8:

读取FMC_OBSTAT(0x4002201C)寄存器低8位0x02读保护,0x00无保护;
分别解锁FMC_KEY、FMC_OBKEY(0x45670123、0xCDEF89AB);
分别写0x220、0x260、0x210到FLASH_CTL寄存器(0x40022010);
以16bit方式写0xA5A5(unlock)或者0xFFFF(lock)到选项字节地址(0x1ffff800);
复位重启。
STM32F411/410/401CE:

读取0x40023C14,判定是否处于读保护状态(0x0FFFFFED低级别保护)、(0x0FFFAAED无保护);
解锁OPTKEY,分别写0x08192A3B,0x4C5D6E7F->0x40023C08
写0x0FFFFFEC->0x40023C14(lock)或写0x0FFFAAEC->0x40023C14(unlock);
写0x0FFFFFEE->0x40023C14(lock)或写0x0FFFAAEE->0x40023C14(unlock);
读取FLASH_SR(0x40023C0C)寄存器等待操作结束;
复位重启。
注意:如果读0x40023C14的值为0x8FFFAAED的需要先执

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值