控制器与固件:DDM、APC、存储器与保护功能 · 模块内部:激光器与接收器 · 光模块与线缆 · 文档 · CodingBox
CodingBox 文档

控制器与固件:DDM、APC、存储器与保护功能

每个可管理光模块内部都有一台小型计算机。微控制器(MCU)负责测量、调节、上报—— 而从编程器的角度看,最重要的是——它本身就是你所读写的那片存储器。模块用的是普通 EEPROM,还是一个冒充 EEPROM 的 MCU,决定了它能如何被编码、为什么有些写入会在断电重启后消失,以及密码存在的意义。本页介绍控制器做了什么,以及它的设计如何在台架上体现出来。

MCU 做什么

任务细节表现为
测量通过 10–12 位 ADC 每秒多次采样温度(热敏电阻或片上传感器)、Vcc、激光器偏置电流、监测 PD 电流(Tx)和接收光电流(Rx);应用出厂校准DDM 数值——参数
APC——自动功率控制将监测 PD 电流与出厂目标值比较,调整驱动器的偏置 DACTx 功率恒定,偏置电流上升——Tx 偏置电流与老化
温度补偿查找表根据温度调整调制电流,在 PAM4 模块上还调整 DSP 设置消光比保持稳定
TEC 控制制冷模块上用 PID 回路保持激光器温度;DWDM 上有波长锁定器反馈激光器温度、TEC 电流监测值
阈值与标志位将每个监测值与告警/预警阈值比较,设置锁存标志位,驱动 IntL阈值与告警
低速引脚读取 TX_DISABLE、RS0/RS1、LPMode、ResetL;驱动 TX_FAULT、RX_LOS(或对硬件信号进行门控)引脚行为
双线从机在 A0h/A2h(SFP)或带页/存储组的 A0h(QSFP、CMIS)上应答存储器映射——双线接口
状态机CMIS 模块状态和数据通路状态;应用选择;静默控制CMIS
保护与厂商功能密码、写保护区域、保存命令、厂商解锁、鉴权签名写保护类型
CDB / 固件更新在 CMIS 模块上接收并烧写新的固件镜像固件版本字节

典型器件:低成本 SFP/SFP+ 中使用带几 kB flash 的 8 位 MCU(8051 类);100G+ 和 CMIS 模块中使用 32 位 Cortex-M 类芯片;部分厂商使用集成了 ADC、DAC 和双线从机的专用光模块控制器 ASIC。

两种存储器实现方式

设计映射如何存储对编程的影响
分立 EEPROM(如 AT24C02 类)用于 A0h,MCU 用于 A2hA0h 的身份信息是一片真正的串行 EEPROM,主机和编程器直接与之通信;MCU 只负责诊断A0h 的写入就是普通的 EEPROM 写入——需遵守 t_WR 和页大小;硬件 WP 引脚可能会阻止写入(写保护类型 1–3)
MCU 仿真映射MCU 用 RAM 中的内容应答每一次双线请求,并将改动镜像到内部 flash/EEPROM——也可能不镜像写入的结果由固件决定:接受、忽略、需要密码才能写入、仅在保存命令后才存储,或在下次启动时被固件自己保存的副本覆盖(类型 4–5)
混合型厂商区用 EEPROM,分页和密码用 MCU不同字节范围规则不同

仿真映射能解释台架上大多数令人费解的现象:固件未实现的页返回 FFh、写入看似“成功” 却又还原、某个范围内字节只读而下一个范围又可写、MCU 忙于采样时出现时钟延展(EEPROM 读写错误)。

启动与 t_init 窗口

上电后,MCU 先从非易失性存储器中加载校准数据和身份信息,启动 ADC,运行 APC 直到达到目标值,然后才使能双线从机并清除 data-not-ready 标志。这就是规范允许的、主机在期待应答之前需要等待的 300 ms(SFP)到 2 s(QSFP/CMIS)时间窗口,也是插入模块后立即读取会得到乱码的原因(主机的初始化流程)。

校准数据存放于此

如果没有工厂在测试台上测得的常数,原始 ADC 计数毫无意义:监测 PD 电流相对实际发射功率的关系、接收光电流相对模块工作波长下输入功率的关系、热敏电阻曲线、偏置 DAC 量程。在内部校准的模块上,固件会应用这些常数并上报物理单位;在外部校准的模块上,这些常数被写入 A2h 56–91,由主机自行应用(校准)。有些固件把这些常数保存在厂商区,覆写该区域会导致 DDM 数值荒谬,或使 APC 回路失效——这是粗心写入把模块“变砖”的典型方式(制造与测试)。

保护机制的实现方式

机制实现方式台架表现
密码固件将写入密码区(SFP A2h 123–126、QSFP 123–126、CMIS 122–125)的 4 个字节与存储值比较;解锁本次会话的写入权限在输入正确的值之前一直是 WRITE FAIL——Passwords
写保护区域固件忽略对其视为只读的范围的写入(校验和、阈值、校准数据、厂商区)读回的字节不变,且不报错
分立 EEPROM 上的硬件 WP 引脚该引脚在模块内部被拉高,或由 MCU 驱动需要编程器板卡去驱动它
保存命令写入先落在 RAM 中;需要厂商特定的序列才能提交到 flash除非发送该序列,否则断电重启后会还原
固件镜像启动时固件会用自己的镜像重写整个映射每次断电重启改动都会消失——只有厂商工具才能修改镜像本身
鉴权固件将签名(序列号、厂商数据和密钥的哈希值)写入厂商字节;由主机验证身份信息的修改能通过校验和,主机却依然拒绝——厂商锁定

如何识别和编程每一种类型: 写保护类型、 EEPROM 重新编码。

固件更新

CMIS 模块可以通过 CDB 命令(开始下载、写入数据块、完成、运行、提交)在双线总线上接收固件,通常配有两个镜像存储区,这样更新失败时可以回退。SFF-8472/8636 模块没有标准机制;厂商通过厂商字节使用私有序列。固件修复是厂商解决 CMIS 互操作性问题的常用手段(CMIS 问题),固件版本字节(CMIS lower page 39–40、page 01h 128–129)值得与身份信息一并记录。

控制器的故障模式

症状可能原因
模块在总线上不可见,光学部分正常MCU 未启动:固件损坏、欠压、晶振损坏
DDM 数值冻结或荒谬ADC 或校准数据损坏;固件挂起
Tx 功率漂移,尽管 APC 本应保持恒定监测 PD 或 ADC 故障,APC 被禁用
随机 NACK,读取缓慢MCU 负载过高(正在采样),快速编程器的操作超出了时钟延展限制
能正常工作,但每次写入都会还原设计上就是固件镜像——并非故障
写入后模块失效固件配置区或校准数据区被覆写

在 CodingBox 中

CodingBox 按固件呈现的样子来处理模块:识别映射类型,为需要保存命令或采用镜像设计的模块套用已知密码和编程脚本,重新计算校验和,在每次写入前保留备份,一旦控制器反应异常,就可以从 code database 中恢复。 EEPROM editor 会标出规范定义为只读或厂商专用的范围,让你清楚何时是在写入固件的私有区域。


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