出厂认证信息恢复
本文档用于解决因执行 Full chip erase、Mass erase 或“全片擦除”等操作,误删出厂认证信息,导致原厂固件无法正常运行的问题;自定义固件不依赖该认证信息,不受影响。
开发板有两颗 STM32F407,本文档按 PCB 丝印记为 STM32(1) 和 STM32(2)。单个
USB Type-C 通过板载 USB HUB 同时连接两颗 MCU,因此 COM 编号、名称和设备管理器中的
排列顺序均不能表示 MCU 编号。
本流程先只给丝印 STM32(1) 对应的 MCU 烧录 UID Reader,唯一返回 UID Reader 信息的
MCU 就是 STM32(1);再给 STM32(2) 烧录,与第一次不同的新 UID 就是
STM32(2)。后续始终使用这两个已标记的 UID 进行恢复和复核。
重要: 整个过程中禁止执行
Full chip erase、Mass erase、“全片擦除”或修改 Option Bytes。
下载
软件或文件 |
用途 |
下载 |
|---|---|---|
UID Reader V3 HEX |
读取硬件 UID,并检查 Sector 7 状态 |
|
UID Reader 校验值 |
校验 UID Reader BIN/HEX |
|
UartAssist |
Windows 串口调试工具 |
|
STM32CubeProgrammer |
使用 ST-LINK 烧录和校验固件 |
|
Spine V4 V47 原厂固件 |
认证恢复并复核成功后烧录 |
客服返回的 STM32_1_<UID>_sector7.hex 和 STM32_2_<UID>_sector7.hex 是设备专属
认证文件,不能从公共仓库下载,也不能使用其他开发板的文件代替。
一、准备工具
下载并解压
UartAssist.zip,运行其中的UartAssist 5.0.2.exe,无需安装。下载、解压并打开 STM32CubeProgrammer。
下载
sanpo_v4_uid_reader.hex。准备 ST-LINK、USB 数据线,并确认 PCB 上
STM32(1)、STM32(2)的丝印位置。每次只把 ST-LINK 接到当前要操作的 MCU,USB Type-C 保持连接。
二、读取并标记两颗 MCU 的硬件信息
1. 先读取 STM32(1)
按 PCB 丝印把 ST-LINK 接到
STM32(1)的 SWD 接口,给开发板上电。在 STM32CubeProgrammer 右上角选择
ST-LINK:Port:
SWDFrequency:保持默认;连接不稳定时可降低
Reset mode:先用默认设置;连接失败时改为
Under Reset
点击
Connect,确认日志显示芯片为 STM32F407。打开
Erasing & Programming,选择sanpo_v4_uid_reader.hex。HEX 自带0x08000000地址,不需要手工填写地址。勾选
Verify programming,点击Start Programming。成功后点击Disconnect, 让开发板重新上电或复位。等待 USB HUB 完成枚举。此时可能只出现一个 COM 口,也可能因另一颗 MCU 原有固件 仍能运行而出现两个;在 UartAssist 中依次检查当前出现的所有 COM 口:
波特率:
115200数据位:
8停止位:
1校验位:
None/无流控:
None/无发送和接收:文本/ASCII 模式,不使用 HEX
换行方式:
CRLF
分别发送
AT+HWINFO,不要输入字符形式的\r\n。此时只有烧入 UID Reader 的STM32(1)会返回以下格式的信息:
SANPO_V4_HWINFO,V=3,UID=XXXXXXXX-XXXXXXXX-XXXXXXXX,SECUID=FFFFFFFF-FFFFFFFF-FFFFFFFF,DEVID=413,REVID=XXXX,FLASHKB=512,SECTOR7=BLANK
完整复制该行,明确标记为
STM32(1)。不要保存或依赖当前 COM 编号,因为重新插拔 或复位后编号和顺序可能改变。
如果没有端口返回 SANPO_V4_HWINFO,V=3,或出现两个不同的 V3 回复,不要继续;应检查
烧录目标和日志后联系客户服务。
2. 再读取 STM32(2)
把 ST-LINK 改接到 PCB 丝印
STM32(2)对应的 SWD 接口。按与 STM32(1) 相同的方法烧录并校验
sanpo_v4_uid_reader.hex,然后重新上电或复位。使用 UartAssist 依次打开 USB HUB 枚举出的所有 COM 口并发送
AT+HWINFO。此时应取得两行不同的
SANPO_V4_HWINFO,V=3:UID与第一次保存值相同的一行是STM32(1);新出现且与第一次不同的
UID是STM32(2)。
完整复制新的一行并明确标记为
STM32(2)。
如果没有得到两个不同的 UID,不要猜测 MCU 与 COM 的对应关系,应重新检查第二次烧录和 所有 COM 口。
3. 发送给客服
发送两行完整原文,并保留下列标签:
STM32(1): SANPO_V4_HWINFO,V=3,UID=........-........-........,SECUID=........-........-........,DEVID=413,REVID=....,FLASHKB=512,SECTOR7=....
STM32(2): SANPO_V4_HWINFO,V=3,UID=........-........-........,SECUID=........-........-........,DEVID=413,REVID=....,FLASHKB=512,SECTOR7=....
三、确认客服返回的恢复包
恢复目录应包含:
STM32_1_<UID>_sector7.hex:只用于 PCB 丝印STM32(1)对应的 MCUSTM32_2_<UID>_sector7.hex:只用于 PCB 丝印STM32(2)对应的 MCUspine_v4_official.binmanifest.jsonSHA256SUMS.txt客户恢复操作说明
两个 Sector 7 文件名同时包含 MCU 位置标签和该 MCU 的硬件 UID。烧录前必须核对文件名 中的 UID 与第二节保存的对应 UID 完全一致;不能交换两份文件。
UID Reader 报告字段含义:
UID:当前 MCU 的实际硬件 UID。SECUID:Sector 7 中记录的 UID;空白时通常为全F。BLANK:Sector 7 认证块为空。INVALID:Sector 7 格式、长度、结束标记或 CRC 错误。UID_MISMATCH:SECUID与当前芯片实际UID不同,说明专属 HEX 烧错了 MCU。UID_MATCH:SECUID与实际UID相同,且格式和 CRC 正确。
四、恢复并复核 STM32(1)
按 PCB 丝印把 ST-LINK 接到
STM32(1)的 SWD 接口。在 STM32CubeProgrammer 中连接目标,打开
Erasing & Programming,选择STM32_1_<UID>_sector7.hex。HEX 自带0x08070000地址,不要修改地址。勾选
Verify programming,点击Start Programming。成功后断开连接并让开发板 重新上电或复位;此时 UID Reader 仍在运行。用 UartAssist 依次查询当前枚举出的所有 COM 口。根据第二节保存的硬件 UID 找到
STM32(1)的回复,不根据 COM 编号判断。必须同时满足以下三项:
UID与之前标记的STM32(1)UID 完全相同;SECUID与UID完全相同;SECTOR7=UID_MATCH。
满足后才能重新连接 STM32CubeProgrammer,选择恢复包中的
spine_v4_official.bin,手工填写下载地址0x08000000,保持Verify programming勾选并开始烧录。
如出现 UID_MISMATCH、INVALID 或 UID 不符,禁止继续烧正式固件。保存 UID Reader
回复和 STM32CubeProgrammer 日志并联系客户服务;不要执行全片擦除。
五、恢复并复核 STM32(2)
按 PCB 丝印把 ST-LINK 改接到
STM32(2)的 SWD 接口。选择
STM32_2_<UID>_sector7.hex,按与 STM32(1) 相同的方法烧录并校验。在正式固件覆盖 UID Reader 前,再次查询当前枚举出的所有 COM 口。根据已保存的硬件 UID 找到
STM32(2)的回复,并确认UID=SECUID且SECTOR7=UID_MATCH。确认无误后,才把恢复包中的
spine_v4_official.bin写入0x08000000。
六、最终确认
两颗 MCU 全部完成后,让开发板完全断电 10 秒再上电。
使用 UartAssist 分别打开 USB HUB 枚举出的两个 COM 口,以文本模式、CRLF 发送
AT+VER,确认两个端口都返回正式固件版本。按实际用途检查 CAN、RS485、SPI 和电机通信。
AT+VER 只用于确认正式固件最终运行,不能单独证明 Sector 7 文件烧到了正确 MCU。
对应关系必须以正式固件烧录前 UID Reader 返回的 UID=SECUID 和
SECTOR7=UID_MATCH 为准。
出现下载失败、状态异常或正式固件无响应时,应停止操作,保存两颗 MCU 已标记的完整
SANPO_V4_HWINFO 原文和 STM32CubeProgrammer 日志并联系客户服务。