编程器读写 EEPROM 时的错误 · 常见问题与解决方法 · 光模块与线缆 · 文档 · CodingBox
CodingBox 文档

编程器读写 EEPROM 时的错误

模块在被诊断或编码之前必须先被读取——之后往往还要被写入。这两步都有各自典型的失败方式。本页把每种失败映射到其成因,以及能解决它的设置或操作步骤,从模块完全不被识别,到写入“成功”却悄悄消失。

模块未被检测到

检查项原因
插接与适配座模块必须完全插入连接器;使用对应封装形式的转接器——把 SFP 插进 QSFP 适配座是不会被看到的
上电时间模块插入后需要最多约 2 秒(SFP)或更长(CMIS)时间,双线总线才会应答
模块在位信号MOD_ABS / ModPrsL 必须被拉低;引脚弯曲或没有该信号的模块会显示为“不在位”
低功耗状态(CMIS)LowPwr 状态下身份信息可读,但部分主机/编程器要求 Ready 状态才能完整访问
总线速度从 100 kHz 或更低开始;部分模块在 400 kHz 下会返回 NACK
模块已损坏任何速度下都没有 DDM、没有身份信息——在第二块板卡上确认后再判定为损坏

读出 FFh、00h 或乱码

症状原因解决办法
全为 FFhI²C NACK——该地址上没有设备,或该页不存在检查地址(SFP 上 A0h 身份信息与 A2h 诊断信息;QSFP/CMIS 上单一 A0h 加分页)
全为 00h模块未上电 / 处于复位状态;或 EEPROM 确实为空检查适配座供电、模块是否在位;未编码的空白模块确实存在
长度正确,内容错误读取的页不是预期的页写入页选字节(127)后重新读取;CMIS 上还要检查 bank 选择(126)
字节错乱 / 错位总线过快、线缆过长、与主机争用总线降到 ≤ 100 kHz;使用短线;在工作台上读取,而不是在带电交换机中读取
A2h 读取失败,A0h 正常模块不带诊断功能,或诊断区块受保护检查 A0h 字节 92 第 6 位(是否实现 DDM);部分受写保护的类型只响应 A0h
数值在多次读取间变化实时监测数据——属正常现象;或数据尚未就绪DDM 字节本就会变化;在信任某次快照前先检查数据就绪位

写入直接失败

WRITE FAIL、数据 NACK,或字节读回后未改变:

原因如何识别该怎么做
需要密码(带固件控制器)在密码地址(SFP A2h 0x7B–0x7E,QSFP 123–126,CMIS 122–125)写入正确值之前,写操作会被拒绝在保护存储区与密码中输入模块密码;数据库中的已知厂商密码会自动应用
硬件写保护无论密码如何都是只读,断电重启后依然如此WP 引脚必须由编程器板卡驱动——软件本身无法做到;参见写保护类型
时序问题间歇性失败,部分页写入不完整放慢时钟(通常约 1 kHz 才能可靠写入 EEPROM),遵守字节/页之间的写周期时间(5–10 ms),增加块间延时
只读区域特定字节永远不变(校验和、部分器件的阈值、厂商区)EEPROM 按设计存在受保护区域;只写模块允许写入的字段
状态不对CMIS 模块可能要求先进入 LowPwr,或先停用数据通路,才接受写入先把模块切换到所需状态
页未选中你在错误的页上写了正确的偏移量写入前设置字节 127(及 126),并通过读回页选字节来验证

写入“成功”但没有生效

  • 断电重启后回滚——模块把写入内容存放在临时存储区,需要厂商的保存命令;没有它,旧镜像会恢复。可通过编程脚本处理(写保护类型 4)。
  • 立即回滚——微控制器从自己的存储中镜像 EEPROM 内容,并覆盖你写入的字节;需要使用厂商的算法(类型 5)。
  • 部分字节生效,其余不生效——存储器映射部分受保护;应逐字段写入并逐一验证。

写入成功后主机仍拒绝模块

原因解决办法
校验和过期——CC_BASE(字节 63)、CC_EXT(95)、CC_DMI(A2h 95)、QSFP 191/223重新计算;CodingBox 在写入时会自动完成(存储器映射)
身份信息现在自相矛盾——例如厂商变了,但合规代码或波长仍暗示着不同的硬件保持身份信息与实际光学器件一致(速率与模式问题、物理层不匹配)
按错误的模块类型布局写入——把 XFP 当 SFP 写,或 QSFP 页搞混从备份恢复

模块写入后损坏

覆盖校准常数、阈值或厂商专用区域(部分控制器在此保存自己的配置)的垃圾数据,会直接把模块变砖。恢复方法:从 CodingBox 在写入前保存到 code database 的备份恢复,然后只写入你真正想改的字段。

黄金法则

  1. 先读后写——每次写入之前都应该先做一次完整读取并存入数据库。
  2. 在第一次写入前确定保护类型 (写保护类型)。
  3. 放慢速度——时钟和字节间时序能解决大多数“随机”失败。
  4. 只写你想改的内容——除非是恢复镜像,否则只写字段,不要整页覆盖。
  5. 断电重启后重新读取以验证。

在 CodingBox 中

CodingBox 会按封装形式使用正确的地址和分页方式读取模块,在 EEPROM editor 中显示原始字节和解码结果,写入时自动重新计算校验和,自动保存备份,并支持带密码或保存命令的受保护模块的密码输入和编程脚本(写入模块)。如果怀疑是板卡级故障,参见产品的故障排查。

这些故障背后的总线机制——地址、页选、写周期时间、时钟拉伸: 双线接口。

为什么模块会这样应答——MCU 模拟的存储器、启动窗口、时钟拉伸、受保护区域: 控制器与固件。


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