一句话
看门狗配置、ERR 监控、SS2 延时、VSTBY 开关这些「人命关天」的寄存器(0x04~0x0A)带写保护:要先连发 4 字节解锁密码,改完再发 4 字节上锁——防止程序跑飞时配置被撕票。
哪些寄存器受保护
| 寄存器 | 内容 |
|---|---|
| SYSPCFG0/1 | VSTBY 使能、SS2 延时、ERR 监控配置 |
| WDCFG0/1 | 看门狗使能/触发源/错误阈值 |
| FWDCFG | 功能看门狗心跳周期 |
| WWDCFG0/1 | 窗口看门狗 T_MIN / T_MARGIN |
解锁与上锁序列
解锁(允许写):连续向 KEY 寄存器(0x03)写 0xAB → 0xEF → 0x56 → 0x12
上锁(配置生效):连续向 KEY 寄存器(0x03)写 0xDF → 0x34 → 0xBE → 0xCA
三条铁律:
- 四个字节必须连续写,中间插任何其他 SPI 读/写操作 → 序列作废、报中断、从头再来
- 上锁成功后,所有「请求寄存器」的值一次性生效到实际配置——不支持只改一半
- 上锁后内部有最长 60μs 的配置生效时间,紧接着的新命令要等一等
写完必须回读验证
受保护寄存器读回来的是按位取反的数据。验证方法:
1. 写入期望值 V
2. 读回数据 R
3. 计算 R XOR V
4. 结果 == 0xFF → 写对了
这个「取反回读 + 异或校验」设计让「写没写进去、写得对不对」一目了然——又是功能安全风格的双向确认。
驱动模板
正确的上电配置流程:INIT 态 → 解锁 → 写看门狗/ERR/SS2 配置 → 回读 XOR 校验 → 上锁 → 等 60μs → 发「go to NORMAL」状态请求(第 19 篇的状态切换命令也要成对验证)。
自测一下
解锁后写了 3 个寄存器就忘了上锁,配置生效吗?
答案:不生效。受保护配置只有在成功的 LOCK 序列之后才从「请求寄存器」整体接管到「实际配置」。解锁只是拿到写入权,上锁才是「按下手印确认」。