文章目录
摘要:此专栏主要介绍光模块通用管理接口规范(Common Management Interface Specification, CMIS)协议规范 V5.0 的解读。本文主要关注协议文档的 8.4 节关于 Page 01h 的内容。不仅是对文档的简单翻译,还会剖析协议规定背后的深层含义。为了方便与协议文档内容对应,本文的章节编号与协议文档保持一致。
8.4.0 概览
可以把 Page 01h 理解成模块的 “能力说明书” ,主机通过读取这一页的信息,就知道这个光模块具备哪些能力或功能。这一页有以下几个特点:
- 只读且静态:所有字段都是“只读且静态”的,在出厂时已被写好,不会再更改。
- 可选但强制:对于平坦内存模块,它们根本没有分页能力,所以没有Page 01h。但对于分页内存模块,必须要有Page 01h。
- 如何判断光模块是否包含此页:Page 00h 的字节 2 的 bit 7(Page 00h : Byte 2 : bit 7)若为1:支持;若为0,不支持。
Page 01h的内容概览如下表所示。

注 1: 固件版本字节(128-129)特意不参与页面校验和的计算,旨在避免固件升级时连带更新存储器映射(Memory Map)。
8.4.1 非活动固件版本和硬件版本
表 8-37 描述了用于报告模块的非活动固件版本(如果存在)和模块硬件版本的字段。非活动固件是指当模块支持第二固件映像时,已存储但当前未在运行的那份固件。

- 为什么会有“非活动固件”?
为了安全升级,很多模块内部 Flash 里存着两份固件映像(双映像)。一份是当前运行的,另一份就是“非活动固件”。。非活动固件就是一个“备胎”,它可能是:- 出厂备份:一旦新固件升级失败,可以回退到这个安全的旧版本。
- 刚下载的新固件:主机已经通过 CDB 命令把新固件写入了备用区,但还没有下达“激活”命令。这时非活动版本号就变成了新固件的版本,而活动版本仍是旧固件。
- 编码规则
- 和活动固件完全一致(见协议文档8.2.9 节),主版本和副版本各占一个字节,总共2字节。例如主版本为 0x01,次版本 0x0A ,则非活动固件版本为v1.10。
- 并且也遵循同样的特殊值规定(全0表示无固件,全FF表示无效)。
- 硬件版本
硬件版本号是纯硬件的版本号,特指PCB电路板的改版。例如PCB从A版变为B版,硬件版本号就会变。而供应商修订号(VendorRev,Page 00h: 164-165)可能会变也可能不会变,取决于厂商策略。编码规则和固件版本一致。
8.4.2 支持的链路长度
这个字段告诉主机:“如果我插上不同类型的光纤,分别能传多远。”
- 为什么需要这个信息?
光纤的类型和质量决定了信号能传多远。主机拿到这份“距离声明表”,可以知道模块在各种光纤下的最远传输能力,从而帮助运维人员决定是否在规划范围内使用该模块。 - 以某个400G-SR8模块为例:

这样主机一读就明白:这个 SR8 模块,如果插 OM4/OM5 光纤,最大传输距离为 150 米;插 OM3 光纤最多传输 100 米;不支持单模和 OM2 光纤。
所有这些距离都是指模块在最高速率下的能力。如果降低速率使用,传输距离可能更远,但规范只要求报告最大速率下的距离。
- 对 AOC(有源光缆)的特殊要求:
有源光缆是一体化的,光纤已经固定在模块上,不能更换。所以它不需要告诉主机“如果插 OM3 光纤能传多远”——因为它根本不能更换光纤。因此,AOC 会将这张表全部填零,然后在另一张专门的表(Page 00h: Byte 202,具体见协议文档表 8-28)中报告其实际的电缆长度。
8.4.3 波长信息
这个字段告诉主机,“我发的是哪个波长的光,以及这个波长有多准。”

- 举例:
- 单波长模块:若某个单波长模块的中心波长为 1534.25 ± 0.236 nm。则:
NominalWavelength = 1534.25 * 20 = 30685 = 0x77DD。
WavelengthTolerance = 0.236 * 200 = 47 = 0x002F。 - 多波长模块:若某个多波长模块的波长范围为 1294.53 ~ 1310.19 nm。则:
NominalWavelength = 1302.36 nm * 20 = 26047 = 0x65BF。
WavelengthTolerance = 7.83 * 200 = 1566 = 0x061E。
- 单波长模块:若某个单波长模块的中心波长为 1534.25 ± 0.236 nm。则:
- 实际应用中
- 对于单波长模块: 这两个字段非常实用,能告诉主机确切的波长和精度。
- 对于多波长模块:协议文档没有规定具体怎么填,不同厂商所填方式可能不一样(例如上面这个例子中,是“中心点+波长范围”,也可以只写其中某个波长的信息)。这个字段成了可有可无的补充信息,主机往往直接忽略,而是通过应用广告来查标准规范。
8.4.4 支持的内存页面

注 1:关于主机使用无效的存储体(Bank)与页面组合时的响应行为,请参见第 8.2.13 节。
8.4.5 持续时间通告

- ModSelWaitTime
ModSel 是片选信号的硬件引脚。通过ModSelWaitTime,模块告诉主机:你把这个信号拉低(有效)之后,至少等 X 微秒才能开始 I2C 通信;通信结束后,还要再等 X 微秒才能把这个信号拉高(取消选中)。
例如:若模块等待时间为 1.6 ms,则尾数字段(位 4–0)将为 11001b(25),指数字段(位 7–5)将为 110b(6),计算结果为 25 × 2⁶ = 11001000000b,即十进制 1600 µs。
- MaxDurationDPInit 和 MaxDurationDPDeinit
DPInit(数据路径初始化) 和 DPDeinit(数据路径去初始化) 是模块状态机中的两个过渡状态。简单来说,它们是模块“开机工作”和“关机停止”的准备过程。
模块在这两个字段里填上它完成这些步骤最多需要多长时间(最坏情况)。主机在发出让模块“初始化”或“去初始化”的命令后,就开始计时。如果超过这个时间模块仍未完成(例如 ModuleState 一直未变),主机就会判断:“模块可能已卡死,需要复位它。”
MaxDurationDPInit 和 MaxDurationDPDeinit 的编码对应的时长 Tstate 如下表所示:

8.4.6 模块特性通告
以下一系列表格中的字段描述了某些模块属性的特性。部分功能是可选的。可选功能的实现通告在第 8.4.7 节至第 8.4.10 节中由详细描述。此处仅作罗列展示,后续章节会逐一详细说明。




8.4.7 支持的控制功能通告
表 8-44 描述了模块和通道层面所支持的控制功能及相关模块功能(参见第 8.8.2 节)。

由上表可总结出如下规律:
- Byte 155 是关于TX的控制功能说明,Byte 156 是关于RX的控制功能说明。
- 这两个字节都是和极性、降噪、输出使能有关的信息。
8.4.8 支持的标志位通告
表 8-45 描述了模块和通道层面所支持的标志位(Flag)功能(参见第 8.9.3 节)。

8.4.9 支持的监控量通告
表 8-46 描述了模块和通道层面所支持的监控量(Monitor)。

8.4.10 支持的信号完整性控制通告
表 8-47 描述了信号完整性控制及相关设置的通告信息。


8.4.11 CDB 消息功能支持通告
表 8-48 描述了模块如何通告其对命令数据块(CDB)命令及回复消息功能的底层支持,以及对某些高级 CDB 特性和能力的支持情况。
CDB 的概念性介绍请参见第 7.2 节,消息机制的详细说明请参见第 8.15 节,CDB 命令参考(消息目录)请参见第 9 章。主机可通过表 9-1 中列出的 CDB 命令,查询对各条独立 CDB 命令的支持情况。


注:若主机的 MCI 事务长度超过本通告所允许的长度,模块可忽略超出允许长度部分的写入字节,且在读取时也不会返回超出该长度的字节。

8.4.11.1 后台操作
CdbBackgroundModeSupported 位(01h:163.5)表示:当模块正在处理CDB命令时,主机是否能够访问管理内存。
-
如果该位为0:则模块会在执行CDB命令期间阻止主机对管理内存的访问,直到该命令完成(参见第5.2.3节和第10.2.2节)。
-
如果该位为1:则模块可能只在CDB命令被解析并捕获或排队之前阻止对管理内存的访问,之后便允许主机访问(参见第5.2.3节和第10.2.2节)。
当支持CDB后台操作时,主机可以读取CdbStatus字段来查询正在进行的CDB命令的状态(参见表8-12)。
8.4.11.2 自动分页
- 背景:固件升级或传输大量数据时,主机需要连续写入几百甚至几千字节。如果不支持自动分页,每写 128 字节,主机就得停下来,发命令去改页映射寄存器,然后才能继续写下一个 128 字节。这非常慢且低效。自动分页 功能就是在主机和模块之间建立一条 虚拟的连续数据通道。
- 作用:这大大提高了大数据传输的效率。相关的几个通告字段(是否支持 CdbAutoPagingSupported、最大页数 CdbMaxPagesEPL、最大写长度 CdbReadWriteLengthExtension)告诉主机这条传送带的能力,如下文表 8-49 所述。

- 操作方式:这就像一种特殊的活页本。你只管飞快地写,写到第一页末尾(地址 255)时,笔记本的机关会自动帮你翻到下一页(页面号自动加 1),并且笔尖自动跳回到新页的起始位置(地址 128),你可以不间断地继续写。
- 自动递增页面:每当你写到地址 255 后再写一个字节,模块内部就把页面号加 1,并把写入指针重新定位到新页面的地址 128 处,让你连续写入。
- 页面号回绕:如果你一直写,到了最后一个支持的 EPL 页面末尾,再写会怎样?它会像一个循环本,页面号回到起始页 A0h(EPL 页通常从 A0h 开始),而不是溢出到未知区域。这样你就能在一个固定的页面区间内循环使用。
8.4.12 附加持续时间通告
8.4.5 说明了数据路径初始化和去初始化的最长耗时,而这里进一步告知主机:模块在其他一些关键动作上,最多会花费多长时间。这些动作包括:模块上电 (ModulePwrUp)、模块下电 (ModulePwrDn)、激光器Tx 开启 (DPTxTurnOn)、激光器Tx 关闭 (DPTxTurnOff)。
这些时间就像是各种操作的“最长等待承诺”。如果这些操作超过了最长等待时间,就说明模块出现了异常。

8.4.13 媒体通道分配选项通告
每个应用描述符由五个字节组成,用于通告一个应用,如第 6.2.1.4 节所述。应用描述符的前四个字节(主机接口、媒体接口、通道数、主机通道起始位置)通告在字节 00h:86–117(见表 8-19)或字节 01h:223–250(见表 8-52)中。第五个字节通告在字节 01h:176–190(见表 8-51)中。
应用描述符的两部分通过称为 AppSel 代码的编号关联起来。AppSel 代码就是应用描述符在存储(部分)应用描述符的数组的任意内存位置中的顺序编号。
8.4.14 附加应用通告
字节 01h:223–250(见表 8-52)提供了七个额外应用描述符(每个描述符的前四个字节)的存储空间,作为对字节 86–117(见表 8-19)中八个应用描述符的补充。
有关应用通告的信息,请参见第 6.2.1.4 节;有关应用描述符及其数组的信息,请参见第 8.2.11 节。
在表 8-52 中,第一个未使用的描述符的 HostInterfaceID 字段应填入 FFh,以表示应用描述符列表的结束。
8.4.15 校验和
字节 130~254数据之和的低八位。模块的固件版本(字节128和129)不计算在内。
总结
本文解读了 CMIS V5.0 协议中 Page 01h 的内容,它是光模块的“能力说明书”,以只读静态方式向主机通告模块的各项能力,涵盖从基础信息到高级特性,是主机识别、配置和管理光模块的基础。有疑问的小伙伴,欢迎在评论区留言讨论。
解读:06 Page 01h&spm=1001.2101.3001.5002&articleId=163160965&d=1&t=3&u=d89dc0ec98214da298a918874ddd356c)
1733

被折叠的 条评论
为什么被折叠?



