控制器与固件:DDM、APC、存储器与保护功能
每个可管理光模块内部都有一台小型计算机。微控制器(MCU)负责测量、调节、上报—— 而从编程器的角度看,最重要的是——它本身就是你所读写的那片存储器。模块用的是普通 EEPROM,还是一个冒充 EEPROM 的 MCU,决定了它能如何被编码、为什么有些写入会在断电重启后消失,以及密码存在的意义。本页介绍控制器做了什么,以及它的设计如何在台架上体现出来。
MCU 做什么
| 任务 | 细节 | 表现为 |
|---|---|---|
| 测量 | 通过 10–12 位 ADC 每秒多次采样温度(热敏电阻或片上传感器)、Vcc、激光器偏置电流、监测 PD 电流(Tx)和接收光电流(Rx);应用出厂校准 | DDM 数值——参数 |
| APC——自动功率控制 | 将监测 PD 电流与出厂目标值比较,调整驱动器的偏置 DAC | Tx 功率恒定,偏置电流上升——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 用于 A2h | A0h 的身份信息是一片真正的串行 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 会标出规范定义为只读或厂商专用的范围,让你清楚何时是在写入固件的私有区域。