QSFP/QSFP-DD/OSFP 通用管理接口规范(CMIS)解读:06 Page 01h


摘要:此专栏主要介绍光模块通用管理接口规范(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。
  • 实际应用中
    • 对于单波长模块: 这两个字段非常实用,能告诉主机确切的波长和精度。
    • 对于多波长模块:协议文档没有规定具体怎么填,不同厂商所填方式可能不一样(例如上面这个例子中,是“中心点+波长范围”,也可以只写其中某个波长的信息)。这个字段成了可有可无的补充信息,主机往往直接忽略,而是通过应用广告来查标准规范。

8.4.4 支持的内存页面

在这里插入图片描述

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

8.4.5 持续时间通告

在这里插入图片描述

  1. ModSelWaitTime
    ModSel 是片选信号的硬件引脚。通过ModSelWaitTime,模块告诉主机:你把这个信号拉低(有效)之后,至少等 X 微秒才能开始 I2C 通信;通信结束后,还要再等 X 微秒才能把这个信号拉高(取消选中)。

例如:若模块等待时间为 1.6 ms,则尾数字段(位 4–0)将为 11001b(25),指数字段(位 7–5)将为 110b(6),计算结果为 25 × 2⁶ = 11001000000b,即十进制 1600 µs。

  1. MaxDurationDPInitMaxDurationDPDeinit
    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-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 的内容,它是光模块的“能力说明书”,以只读静态方式向主机通告模块的各项能力,涵盖从基础信息到高级特性,是主机识别、配置和管理光模块的基础。有疑问的小伙伴,欢迎在评论区留言讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值