出厂认证信息恢复

本文档用于解决因执行 Full chip eraseMass 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 eraseMass erase、“全片擦除”或修改 Option Bytes。

下载

软件或文件

用途

下载

UID Reader V3 HEX

读取硬件 UID,并检查 Sector 7 状态

下载 sanpo_v4_uid_reader.hex

UID Reader 校验值

校验 UID Reader BIN/HEX

下载 SHA256SUMS.txt

UartAssist

Windows 串口调试工具

下载 UartAssist.zip

STM32CubeProgrammer

使用 ST-LINK 烧录和校验固件

下载 STM32CubeProgrammer_win64.zip

Spine V4 V47 原厂固件

认证恢复并复核成功后烧录

下载 spine_v4_v47_release.bin

客服返回的 STM32_1_<UID>_sector7.hexSTM32_2_<UID>_sector7.hex 是设备专属 认证文件,不能从公共仓库下载,也不能使用其他开发板的文件代替。

一、准备工具

  1. 下载并解压 UartAssist.zip,运行其中的 UartAssist 5.0.2.exe,无需安装。

  2. 下载、解压并打开 STM32CubeProgrammer。

  3. 下载 sanpo_v4_uid_reader.hex

  4. 准备 ST-LINK、USB 数据线,并确认 PCB 上 STM32(1)STM32(2) 的丝印位置。

  5. 每次只把 ST-LINK 接到当前要操作的 MCU,USB Type-C 保持连接。

二、读取并标记两颗 MCU 的硬件信息

1. 先读取 STM32(1)

  1. 按 PCB 丝印把 ST-LINK 接到 STM32(1) 的 SWD 接口,给开发板上电。

  2. 在 STM32CubeProgrammer 右上角选择 ST-LINK

    • Port:SWD

    • Frequency:保持默认;连接不稳定时可降低

    • Reset mode:先用默认设置;连接失败时改为 Under Reset

  3. 点击 Connect,确认日志显示芯片为 STM32F407。

  4. 打开 Erasing & Programming,选择 sanpo_v4_uid_reader.hex。HEX 自带 0x08000000 地址,不需要手工填写地址。

  5. 勾选 Verify programming,点击 Start Programming。成功后点击 Disconnect, 让开发板重新上电或复位。

  6. 等待 USB HUB 完成枚举。此时可能只出现一个 COM 口,也可能因另一颗 MCU 原有固件 仍能运行而出现两个;在 UartAssist 中依次检查当前出现的所有 COM 口:

    • 波特率:115200

    • 数据位:8

    • 停止位:1

    • 校验位:None/无

    • 流控:None/无

    • 发送和接收:文本/ASCII 模式,不使用 HEX

    • 换行方式:CRLF 串口工具设置

  7. 分别发送 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
  1. 完整复制该行,明确标记为 STM32(1)。不要保存或依赖当前 COM 编号,因为重新插拔 或复位后编号和顺序可能改变。

如果没有端口返回 SANPO_V4_HWINFO,V=3,或出现两个不同的 V3 回复,不要继续;应检查 烧录目标和日志后联系客户服务。

2. 再读取 STM32(2)

  1. 把 ST-LINK 改接到 PCB 丝印 STM32(2) 对应的 SWD 接口。

  2. 按与 STM32(1) 相同的方法烧录并校验 sanpo_v4_uid_reader.hex,然后重新上电或复位。

  3. 使用 UartAssist 依次打开 USB HUB 枚举出的所有 COM 口并发送 AT+HWINFO

  4. 此时应取得两行不同的 SANPO_V4_HWINFO,V=3

    • UID 与第一次保存值相同的一行是 STM32(1)

    • 新出现且与第一次不同的 UIDSTM32(2)

  5. 完整复制新的一行并明确标记为 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) 对应的 MCU

  • STM32_2_<UID>_sector7.hex:只用于 PCB 丝印 STM32(2) 对应的 MCU

  • spine_v4_official.bin

  • manifest.json

  • SHA256SUMS.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_MISMATCHSECUID 与当前芯片实际 UID 不同,说明专属 HEX 烧错了 MCU。

  • UID_MATCHSECUID 与实际 UID 相同,且格式和 CRC 正确。

四、恢复并复核 STM32(1)

  1. 按 PCB 丝印把 ST-LINK 接到 STM32(1) 的 SWD 接口。

  2. 在 STM32CubeProgrammer 中连接目标,打开 Erasing & Programming,选择 STM32_1_<UID>_sector7.hex。HEX 自带 0x08070000 地址,不要修改地址。

  3. 勾选 Verify programming,点击 Start Programming。成功后断开连接并让开发板 重新上电或复位;此时 UID Reader 仍在运行。

  4. 用 UartAssist 依次查询当前枚举出的所有 COM 口。根据第二节保存的硬件 UID 找到 STM32(1) 的回复,不根据 COM 编号判断。

  5. 必须同时满足以下三项:

    • UID 与之前标记的 STM32(1) UID 完全相同;

    • SECUIDUID 完全相同;

    • SECTOR7=UID_MATCH

  6. 满足后才能重新连接 STM32CubeProgrammer,选择恢复包中的 spine_v4_official.bin,手工填写下载地址 0x08000000,保持 Verify programming 勾选并开始烧录。

如出现 UID_MISMATCHINVALID 或 UID 不符,禁止继续烧正式固件。保存 UID Reader 回复和 STM32CubeProgrammer 日志并联系客户服务;不要执行全片擦除。

五、恢复并复核 STM32(2)

  1. 按 PCB 丝印把 ST-LINK 改接到 STM32(2) 的 SWD 接口。

  2. 选择 STM32_2_<UID>_sector7.hex,按与 STM32(1) 相同的方法烧录并校验。

  3. 在正式固件覆盖 UID Reader 前,再次查询当前枚举出的所有 COM 口。根据已保存的硬件 UID 找到 STM32(2) 的回复,并确认 UID=SECUIDSECTOR7=UID_MATCH

  4. 确认无误后,才把恢复包中的 spine_v4_official.bin 写入 0x08000000

六、最终确认

  1. 两颗 MCU 全部完成后,让开发板完全断电 10 秒再上电。

  2. 使用 UartAssist 分别打开 USB HUB 枚举出的两个 COM 口,以文本模式、CRLF 发送 AT+VER,确认两个端口都返回正式固件版本。

  3. 按实际用途检查 CAN、RS485、SPI 和电机通信。

AT+VER 只用于确认正式固件最终运行,不能单独证明 Sector 7 文件烧到了正确 MCU。 对应关系必须以正式固件烧录前 UID Reader 返回的 UID=SECUIDSECTOR7=UID_MATCH 为准。

出现下载失败、状态异常或正式固件无响应时,应停止操作,保存两颗 MCU 已标记的完整 SANPO_V4_HWINFO 原文和 STM32CubeProgrammer 日志并联系客户服务。