使用 GUI 配置 HPM 选项字节与用户 OTP¶
在 脱机烧录 → 选项字节 / OTP 配置 中,可以读取 HPM 的公开配置、给用户 OTP 写入数据,并生成对应脚本。写入前,界面会列出旧值、目标值和新增位,执行后再核对实际熔丝值。
本文对应 MKLink AI Probe 0.2.2 开发版 + V4 HPMLink 固件,以 HPM5301 真机为例,实测日期为 2026-09-19。下载器应使用 HPMLink.uf2。
我应该配置哪一项?¶
| 你的目的 | 在界面中怎么做 |
|---|---|
| 查看芯片是否有保护、启动限制 | 选择芯片,展开“选项字节 / OTP 配置”,点击“读取配置”;先只读,不勾选擦除或加锁 |
| 保存应用自己的设备编号、功能标志 | 在“HPM5301 用户 OTP”中选择“用户数据”,读旧值,再设置目标值 |
| 防止已经写好的用户数据再次被烧写 | 完成数据校验后,选择“永久写保护”,核对它影响的整个组 |
| 开启安全启动、关闭调试、配置加密密钥 | 普通 GUI 暂未开放;不是勾选用户组写保护就能实现。不要照抄实验安全值 |
第一次使用只需按下面“连接并读取”和“写一个用户 word”操作。用户 OTP 不会自动变成应用配置:应用程序需要按你定义的格式读取、解释它。没有明确用途时先只读。
先确认可操作范围¶
| 内容 | 当前 GUI 支持 |
|---|---|
| HPM5301 公开配置 | 读取 HARD_LOCK、生命周期 A/B、JTAG/DEBUG 禁用位、SW_VER、USB VID/PID,分别显示熔丝与影子值 |
| 用户数据 | HPM5301 Word 69–79,读、计划预览、烧写和校验 |
| 永久写保护 | 用户组 18(Word 72–75)、组 19(Word 76–79) |
| 生命周期、禁用调试、根证书、密钥 | 普通 GUI 不提供任意烧写;本页后半部分仅记录专用实验的验证情况 |
| 其他 HPM 系列 | 不能直接套用 HPM5301 的地址和写入范围,仍须按型号适配、验证 |
OTP 熔丝只能把 0 置为 1,不能擦除。例如 0x5 → 0x7 合法,0x5 → 0x1 会试图清除 bit2,应被拒绝。永久锁也不能解除。写入或锁定会复位目标程序,进行测试前应停止业务运行。
连接并读取¶
- 在“配置”页选择 HPMLink 的命令串口并连接目标。USB 转 UART 口用于串口日志,不是下载器命令口;电脑重启或更换 USB 接口后应重新确认串口。
- 打开“脱机烧录”,选定 HPM5301,下载器型号选择 V4。HPM 下载使用 ROM API,无需 FLM。
- 展开右侧“选项字节 / OTP 配置”,点击“读取配置”。熔丝值表示 OTP 内容,影子值表示当前加载的影子寄存器,不能把两者混为一谈。
- 在下方“HPM5301 用户 OTP”中点击“读取用户 OTP”,查看每个 word 的值与锁定状态。
只操作用户 OTP 时,不必添加应用 BIN/HEX。读到 — 代表没有有效快照,不是值为零。切换芯片、重新连接后须重新读取,原有确认与计划会清除。
配置列表里的字段是什么意思?¶
| 字段 | 初学者应如何理解 |
|---|---|
| HARD_LOCK | 永久写保护的位图。不是“整片加密”开关;下方用户组锁定功能会替你计算对应位 |
| LIFECYCLE A / B | 安全生命周期的两份编码,必须一起看。1为普通开发、3为安全启动、7为返厂、B为不可返厂;不能像普通下拉选项那样来回切换 |
| JTAG_DISABLE | 1表示禁用JTAG,可能连芯片ID也无法再读取;0仅表示这一位没禁用 |
| DEBUG_DISABLE | 1表示限制调试;即使读到ID,也可能不能读写内存 |
| SW_VER | 启动镜像的版本限制。不是应用界面里的版本号,不能为了“升级版本”随便填大 |
| USB VID / PID | 目标芯片ROM USB厂商/产品标识,不是MKLink的USB信息,也不是串口号 |
这些字段目前均为只读,GUI 中也会直接显示含义。熔丝值是永久内容,影子值是当前寄存器副本。两者不同应先检查复位和保护状态,不要直接重复烧写。
写一个用户 word¶
以下示例在空白实验芯片上,把 Word 79 写为 0x00000005。Word是编号,一个word为32位(4字节);0x表示十六进制。请先确认你的应用没有占用这个word:
- 选择“用户数据”,Word 选择
79。 - 输入目标值
0x5,点击“校验并生成脚本”。 - 核对旧值为
0x00000000、目标值为0x00000005、新增位为0x00000005。 - 确认本次永久写入及目标复位,点击“写入并校验”。
- 看到成功提示后,再点击“读取用户 OTP”,检查实际值。

实机预览:确认框未勾选时不能执行;生成脚本本身不会烧写。
生成的脚本携带预期旧值,防止拿旧快照直接写新芯片。本例的预览内容是:
result = hpm.otp_user(79, 0, 5, 1)
if result != 0:
raise Exception('OTP failed: inspect before retrying')
这段是下载器端 PikaPython 脚本。不要改成主机 Python 直接运行,也不要复制到另一型号上试写。预览不代表已经烧写;“写入并校验”会立即操作当前连接的目标,与页面底部“部署到 U 盘”是不同动作。

Chrome 真机截图:右侧提示 word 79 = 0x00000005。上方公开配置未读取时仍显示 —,不影响下方独立用户区操作。点击图片可查看原始分辨率。
以后还想增加一个标志位怎么办?¶
重新读取后,旧值是0x5。要再置bit1,应填写完整结果0x7,预览应显示新增位0x2,确认后写入。本轮新芯片已经按此步骤完成0 → 5 → 7,熔丝与影子读回一致。
若填成0x1,会试图清除原来已写入的位,校验会拒绝,不能通过重试解决。OTP也不能用“全片擦除”恢复空白。
永久锁定用户组¶
- 先完成该组所有数据写入,并重新读取确认。
- 操作选择“永久写保护”。
- 选择
Word 72–75或Word 76–79,点击“校验并生成脚本”。 - 检查受影响的 4 个 word,确认后点击“写入并校验”。
- 重新读取,检查整组锁定状态。
本次实测锁定 Word 76–79,HARD_LOCK 从 0x30400016 变为 0x30480016,只新增 bit19;复位后 Word 79 仍为 0x5。界面将整组标为已锁,不能再生成该 word 的写入计划。

新芯片回归使用Word79=0x7,同样只新增HARD_LOCK的bit19。选择范围后,先确认组内其余三个word以后也不需要再写。
锁定按组生效,不能只锁该组中的一个 word。组 17 包含 USB 配置 Word 68,因此 GUI 不开放该组永久锁。此功能保护熔丝编程,影子寄存器还有独立的锁机制。
如果提示 HARD_LOCK is write-locked in the current boot state,表示永久锁控制字本身当前已禁止写入,不是按钮故障。此次 RETURN 生命周期实验中确实观察到此状态。
下载固件后,自动写入用户 OTP¶
需要把固件和设备配置一起交给脱机下载器时,在“脱机烧录”中启用 固件下载并校验成功后配置用户 OTP(脱机执行)。这与上面的在线“写入并校验”是两个入口:这里先生成配方,部署并触发后才执行。
- 选择准确型号
HPM5301、V4 下载器和实际使用的板卡,添加 BIN 固件并确认起始地址。 - 读取待烧芯片的用户 OTP。选择要配置的 Word,填写预期旧值和完整目标值。例如空白 Word79 写功能标志,填旧值
0、目标值3,表示置位 bit0 和 bit1。 - 如需永久锁,先确认整组四个 Word 都已定稿,再勾选对应组;HARD_LOCK 必须填写刚从待烧芯片读出的值。
- 勾选不可逆操作确认,点击“生成预览”。修改任一参数后需要重新确认。
- 点击“部署到 U 盘”,检查脚本与固件均已部署,再点击“触发测试”执行。
- 完成后重新读取用户 OTP,核对目标值和锁状态,并检查应用是否正常运行。
下载器会按 能力和旧值检查 → 全部固件下载与逐字节校验 → 写用户数据并回读 → 永久锁定 的顺序执行。任何一步失败都会停止;旧 HPMLink 固件缺少 program_verified 接口时,须先升级配套固件,不能跳过检查。
2026-09-20 的实板测试已通过两字写入、两组顺序锁定及程序 UART 心跳检查:Word72 为 1、Word79 为 3,组18和19已锁。用户实际断电重上电后,数值与锁定状态保持,GUI回读和应用UART心跳正常。这些数值是测试记录,不是应复制到你芯片上的默认配置。
批量烧录时,每颗芯片都必须符合配方的预期旧值。中途出错可能已经写入部分数据,请先回读,再决定下一步;不要直接重放原配方。已永久锁定的组不能通过擦除固件恢复。
出错时如何处理¶
| 现象 | 含义与处理 |
|---|---|
| 预期旧值不匹配 | 芯片状态已变化;重新读取并核对,重新生成计划 |
| Word 已锁 / 计划按钮不可用 | 不再尝试烧写该组;检查是否选错 word |
| 空响应、部分响应 | 读取未完成,不能解释成零值 |
| CHIP_ID 无法读取、调试可能受保护 | IDCODE 可读不等于内存可读;不要继续按缓存值操作 |
| 写入返回错误或中途断线 | 结果可能不确定;先回读,不要自动重放烧写命令 |
在本次签名镜像测试中,旧固件有一次在目标尚未确认暂停时访问寄存器,OTP 操作返回 -8。回读确认 Word 79 仍为零。修复固件增加有界的暂停状态等待后,同一镜像的用户字写入与永久锁均通过。遇到类似问题,应使用包含该修复的 HPMLink 测试固件,不应反复点击写入。
安全字段验证进度¶
安全功能验证使用独立 UART、实验专用证书及可弃芯片,没有作为普通 GUI 的安全字段烧写入口发布。
| 项目 | 已观察到的结果 |
|---|---|
| DEBUG/JTAG 禁用 | 先前芯片已验证禁用后的调试访问变化,UART 程序继续运行 |
| SW_VER | 旧版本启动头被拒绝,满足版本的镜像恢复运行 |
| 根证书哈希与签名启动 | 256 位实验根哈希写入后,正确签名镜像运行 |
| SECURE → RETURN | 复位后状态保持;RETURN 恢复调试及未签名程序启动 |
| SECURE → NONRET | 本次新芯片 A/B 均变为 0xB,复位后签名程序继续运行 |
| 密钥撤销 | 撤销根 0 后,根 1 签名镜像继续启动;撤销根 1 后,同一镜像复位后不再输出应用心跳 |
| 断电保持 | 第四颗用户Word79=7和组19锁在用户实际断电重上电后保持;不代表全部安全态均做过断电测试 |
| SCRIBE(废弃) | 第四颗从RETURN写入A/B=F,复位后15秒未收到应用UART心跳;此为破坏性实验,不作为普通GUI选项开放 |
| 仍待验证 | 安全态物理断电保持、独立调试鉴权、EXIP/MASTER_KEY,以及其他型号真机测试 |
SECURE 测试中曾出现所有受保护地址都返回 0x20150407 的现象。该值不是有效 OTP 内容;GUI 通过实时芯片身份检查拒绝显示伪配置。只有 IDCODE 正常,不能据此判断烧录、内存访问或安全配置读取正常。
为什么其他系列不能直接照抄¶
其他型号沿用同样的教程结构:先选准确型号,再看本型号可读/可写项目、每项含义及生效条件,最后预览和校验。若界面提示不支持,应保留原型号等待适配,不能改选HPM5301来绕过限制。本页截图和写入范围只代表HPM5301。
SDK 1.11.0 的多个系列使用类似字段名称,但 OTP 基址和密钥长度存在差异,例如 HPM5301 的 OTP 基址为 0xF3050000,HPM6E80 为 0xF3158000;HPM5E31 的 EXIP 密钥为 128 位,HPM5301 为 256 位。
这些是源码核对结果,不是跨型号烧写资格。移植时应先确认准确型号、OTP 映射、ROM API 和可用 RAM,再从用户字读写与回读开始验证。
相关操作:HPM 生态概览 · HPM5301 实战 · 脱机烧录。