EEPROM 改码:密码与原理 · 常见问题与解决方法 · 光模块与线缆 · 文档 · CodingBox
CodingBox 文档

EEPROM 改码:密码与原理

多年工程讨论沉淀下的核心认知:光模块兼容性不是固件问题——而是通过 I²C 读取的 EEPROM 中的识别字符串。 交换机拒绝一个模块,仅仅是因为它不认识其中的厂商字符串。正是这个事实解释了“把所有模块都编码成 Cisco——几乎哪里都能用”这一常见做法,也解释了整个编码工具市场的存在。

密码存放在哪里

写入模块存储器的受保护区域,需要在写入前把一个 4 字节密码写到固定地址:

模块类型存储器块密码偏移量
SFP / SFP+A2h(I²C 地址 0x51)0x7B–0x7E
QSFP / XFPA0h0x7B

常见密码

密码说明
00 00 10 11MSA 默认值——第一个该尝试的
00 00 00 00、FF FF FF FF常见的默认值
9B B0 3D FA在不少模块上见过
4F 43 50 00ASCII 编码的 “OCP”

部分厂商的 QSFP-DD 模块自带独有的固定默认密码,还有一些基于微处理器的模块使用会变化的可变密码——这对任何想暴力破解的人来说都是一个陷阱。

为什么暴力破解不是办法

守护整个存储器映射的厂商级密码,暴力破解大约需要 100 多天;即便是主机级的 ASCII 密码,也要耗时近三天。实际可行的路径是建立一个已知代码和密码的数据库,从原厂模块中采集而来——这才是编码工具真正的价值所在,而不是 I²C 硬件本身(那部分很简单)。

自制编程器的坑

  • 廉价的 CH341A 编程器不会计算 SFP 校验和。 写入一份没有有效 CC_BASE/CC_EXT 的镜像,得到的模块会被交换机拒绝。你需要一个能自动重新计算校验和的工具。
  • 有些交换机只能写入地址 0x50,因此 0x51 上的密码从交换机本身无法触及——需要专用的编程器板卡。
  • EEPROM 写保护引脚——有些厂家在生产时把 WP 接到 Vcc,使模块在现场被锁定、无法写入。

来自现场的案例

  • 编码成某厂商身份的模块,在另一厂商的交换机上无法自动协商;重新编码为该交换机自身的厂商字符串后,立刻就通了。
  • 部分光模块厂商按设计出货未编码的模块,预期由买家自行为目标平台编码。
  • DWDM 模块通过同一个管理接口调谐波长,与编码用的是同一套接口。

在 CodingBox 中操作

  1. 读取模块;它会自动保存到code database,写入前会先取一份备份。
  2. 在保护存储区与密码中设置表地址、密码地址和密码值——数据库中已知的密码会自动应用。
  3. 在 EEPROM editor 中编辑厂商、型号及其他身份字段。 CC_BASE 和 CC_EXT 会为你自动重新计算。
  4. 写入选定的页,然后读回验证。用 核实光模块中的命令在交换机上检查模块。

只为你有权获得的互操作性对模块编码,并遵守所在组织及厂商的政策。

一次干净的改码背后的规则——字段格式、需要设置哪些位、需要修正哪些校验和——见 厂商字段、 合规代码和 校验和。

工厂在同一步骤会做什么,哪些区域保存着粗心的写入会破坏的校准数据: 生产与测试、 控制器与固件。

编辑前先弄清哪个字节保存什么:SFF-8472 A0h 映射、 SFF-8636 高位页映射、 CMIS 高位页映射、 XFP 映射。

各厂商的目标型号及其命名规则:OEM 型号;各平台在写入后各自检查什么: 各 NOS 如何校验模块。


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