写保护类型与编程 · 光模块与封装形式 · 光模块与线缆 · 文档 · CodingBox
CodingBox 文档

写保护类型与编程

封装形式告诉你模块字段存放在哪里。另一个独立的维度决定能否修改它们:模块如何保护自身存储区不被写入。厂商采用五种方式,每种都需要不同的编程方法。先识别出保护类型,能省下数小时的失败写入尝试。

五种保护类型

#类型如何识别如何编程
1无保护立即接受写入直接写入——但需使用较慢的时钟
2硬件写保护引脚无论怎样尝试都是只读;密码也无济于事写入过程中控制 WP 线
3密码保护(固件控制器)未输入密码前返回 WRITE FAIL先在 0x7B 处输入密码
4临时存储 + 保存命令写入“成功”,但断电重启后恢复原状发送厂商的保存序列
5组合保护需要厂商专有的 I/O 序列才能解锁厂商编程算法(脚本)

1. 无保护

EEPROM 没有写入限制。实际的难点在于时序:可靠的编程通常需要将双线时钟降到约 1 kHz——大约是正常读取速度的十分之一。以标准速度写入会间歇性失败,留下部分写入的页面。一个相关的迹象是:在一些简单模块上,只有 A0h 能正常读取,而 A2h 会返回错误。

2. 硬件写保护引脚

EEPROM 的 WP 引脚通过电阻接到电源,因此芯片上电后处于锁定状态。解锁的方法是在写入过程中通过低阻抗路径将 WP 线拉向地——这只有能够控制该引脚的编程器板才能做到。仅靠软件无法绕过这种类型:无论怎样断电重启或尝试密码,模块都始终保持只读。

3. 密码保护(固件控制器)

根据 SFF-8472,A2h 区块从偏移量 0x7B 开始保留了一个 7 字节的密码区;大多数模块使用 4 字节密码。模块内的控制器会将写入该区域的内容与其存储的值进行比对,只有匹配才会解锁 EEPROM 写入。没有正确密码时,每次写入都会返回 WRITE FAIL。

  • 输入正确的密码,然后写入。
  • 若密码未知:对已知厂商密码进行字典搜索(常见值见 EEPROM 重新编码),或联系厂商。
  • 这些控制器对时钟速度和数据块之间的间隔很敏感——这也是需要缓慢编程的另一个原因。

4. 带保存命令的临时存储

写入的数据落入易失性存储器。一切看起来都正常——直到模块断电重启,旧代码又恢复了。厂商的固件需要一条明确的保存命令(专有字节序列)才能将临时镜像提交到永久存储区。没有任何标准定义这一过程;每个厂商的序列都不同,需要作为脚本记录下来。

5. 组合保护

最新的模块会叠加多种机制:硬件 WP 加上密码加上保存命令加上操作前提条件—— 例如模块必须先进入低功耗模式才接受写入。这在采用较新 SFF-8472 版本、在 A2h 偏移量 0x80 以上暴露256 个以上页面的模块,以及 CMIS 模块上很常见。编程需要厂商提供的算法,通常只提供给大宗采购客户。

如何识别保护类型

  1. 先尝试直接读取:A2h 能否正常读取?(类型 1 常在此处失败。)
  2. 尝试对一个无保护字段进行单字节写入。立即成功 → 类型 1。返回 WRITE FAIL → 类型 3 (或 5)。写入看似成功但断电重启后恢复 → 类型 4。
  3. 尝试已知密码。仍为只读 → 类型 2(硬件)或类型 5(组合)。
  4. 检查封装形式和规范版本——CMIS 和较新版本的 SFF-8472 模块通常属于类型 5。

CodingBox 中的支持

  • 密码设置——表地址、密码地址(0x7B)和密码值在 保护存储区与密码中设置;已知密码会从数据库中自动套用。
  • 脚本——CodingBox 的编程脚本包含厂商保存序列以及类型 4 和 5 的解锁算法。
  • 针对标准速度下写入失败的模块,提供逐字节写入和慢速时钟。
  • 硬件 WP 由编程器板处理,而非软件。
  • 写入前,每次读取的内容都会保存到代码数据库,因此失败的尝试始终可以恢复。

台架上的常见症状——WRITE FAIL、写入后恢复原状、密码被拒——以及各自的处理方法: EEPROM 读写错误。

这些类型为何存在——独立 EEPROM 与 MCU 模拟存储映射的区别、保存命令、固件镜像与签名的具体实现:控制器与固件。


如果您发现本资料中有不准确之处或错误,请选中相应片段并按 Ctrl+Enter,即可。