当前位置: 首页 > news >正文

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

文章目录

  • 8.9.0 带 Bank 的Page 11h(通道状态与数据路径状态)概述
  • 8.9.1 数据路径状态
  • 8.9.2 通道输出状态指示
    • (1)两个独立的“信号灯"
    • (2) 使Rx状态变为“有效”的条件
    • (3)Rx状态变化可引发中断
  • 8.9.3 通道特定标志
    • (1)模块级 VS 通道级
    • (2)每个警告/报警都有个“开关”
  • 8.9.4 通道特定监测
    • (1)Tx 激光器偏置电流
    • (2)Rx 接收光功率
    • (3)Tx 发射光功率
  • 8.9.5 配置命令执行与结果状态 (ConfigStatus)
    • (1)背景
    • (2)工作流程
  • 8.9.6 活动控制集
    • (0)概述
    • (1)数据路径配置(应用分配)
    • (2)Tx和Rx信号完整性字段
  • 8.9.7 数据路径条件
  • 8.9.8 媒体通道到媒体波长与光纤的映射
  • 总结

摘要:此专栏主要介绍光模块通用管理接口规范(Common Management Interface Specification, CMIS)协议规范 V5.0 的解读。本文主要关注协议文档的 8.9 节关于 Page 11h 的内容。不仅是对文档的简单翻译,还会剖析协议规定背后的深层含义。为了方便与协议文档内容对应,本文的章节编号与协议文档保持一致。

8.9.0 带 Bank 的Page 11h(通道状态与数据路径状态)概述

如果把 Page 10h 比作模块的 “控制室”(用来下命令,比如开关激光器、调整均衡器),那么 Page 11h 就是模块的 “监控大厅”。这一页密密麻麻地显示着每条通道、每条数据路径的实时工作状态。

  • 只读
    Page 11h 上的所有字段均为只读。
  • “可选”但“强制”
    对于分页内存模块,Page 0:11h 是强制性的,必须要有这一页。对于平坦内存模块,可以没有这一页。Page 00h: Byte 2: bit 7通告是否支持 Page 11h。
  • Bank的用法
    Page 11h 的每个 Bank 只管 8 个通道的状态。对于标准的 8 通道 QSFP-DD 模块,通常只需要 Bank 0。如果未来有更多通道的模块,就用 Bank 1、Bank 2……去管额外的通道,井井有条。

8.9.1 数据路径状态

字节128~131用于展示8个通道对应的数据路径状态。每4位表示一个通道,4个字节共展示8个通道,如表表8-73所示。

CMIS协议规定总共有7种数据路径状态,每种状态对应一个编码。如表8-74所示。

关于数据路径状态,需要重点关注以下几点:

  • 同一条数据路径,同样的状态值
    一条数据路径可能由多个通道组成(比如 4 个通道捆在一起跑 400G),每个通道上都显示同样的状态值。这样做的好处是:主机不用费劲去推断哪个通道是“主通道”,随便查一个就知道整条路径的情况。
  • 空闲通道显示 DPDeactivated
    如果一个通道根本没被分配去干活(比如 4x100G,只用了 4 个通道,剩下 4 个闲着),那它的状态就会显示为 DPDeactivated,意思是“这个通道没有启用,目前闲置”。

8.9.2 通道输出状态指示

这节说的是模块如何诚实地告诉主机:“我后面这几个通道,现在到底有没有在传正经数据。”

(1)两个独立的“信号灯"

字节132和133,就像两排信号灯:

  • OutputStatusRx(接收方向信号灯):亮起(值为1b)表示“我从光纤收到光信号,已经处理好,现在正通过电接口发给交换机,数据是有效的”。
  • OutputStatusTx(发送方向信号灯):亮起(值为1b)表示“我正在往光纤里发射有效的光信号,不是乱闪的噪音”。

重点是:这两个字节是独立于数据路径状态机的,直接反映最底层硬件的实际输出情况。状态机说“已激活”,灯未必亮(因为可能还没收到光信号);状态机说“未激活”,灯一定不亮。

(2) 使Rx状态变为“有效”的条件

  • 背景
    想象一下,光纤刚插上,模块接收端检测到一点点光。如果此时就立刻告诉主机“有信号了!”,主机开始发数据,结果模块内部其他部分还没准备好,或者接收到的信号是无效信号很快又消失,那么,模块瞬间又丢信号,主机又停发——这样一开一关反复横跳,就叫链路震荡,会导致网络严重不稳定。
  • 亮灯的条件
    所以,模块非常谨慎,以下三个条件全部满足,才敢把 Rx 灯点亮。一旦灯亮,主机就可以放心大胆地开始接收数据了。
    1. 收到足够强的光信号:不是杂散光,是真正有效的输入。
    2. 内部资源全部初始化完毕:包括放大器锁定、时钟恢复、信号检测全部就绪。
    3. 输出信号稳定:能持续、可靠地向交换机发送数据。

(3)Rx状态变化可引发中断

CMIS规范给每个通道的 OutputStatusRx 配了一个状态变化标志位(位于Page 11h: Byte 153)。灯的状态一变,标志就被置 1,且被锁存住。如果该标志关联的掩码位不是 1b(Page 10h: Byte 232,见表 8-71),则可以触发硬件中断,模块的IntL 管脚被拉低,通知主机来处理中断。

Tx 为什么没有状态变化标志?
因为 Tx 方向是主机自己控制的。主机让它发,它就发;主机让它停,它就停。Tx 灯的状态变化,主机心里有数,不需要模块再来提醒。不像 Rx 方向,光纤什么时候插拔,主机完全不知道,必须靠模块主动告知。

8.9.3 通道特定标志

(1)模块级 VS 通道级

在低地址内存(Page 00h)里,我们学过模块级标志,那是整个模块的总警灯,比如“模块温度过高”。而这里是通道级标志,每个通道都有自己独立的一套指示灯,这样主机就能精确定位到是哪一个通道出了问题。比如:

  • “通道 1 的发射光功率太低了”
  • “通道 3 的激光器偏置电流异常”
  • “通道 5 接收信号丢了”

(2)每个警告/报警都有个“开关”

每个通道的标志位都配有一个对应的掩码位。这个掩码就像开关,主机可以用它来决定:

  • 掩码位 = 0:这个警告/告警可以触发硬件中断,通知主机赶紧来处理。
  • 掩码位 = 1:就算这个警告/告警亮了,也不会触发硬件中断。主机可能觉得这个告警不重要,不想被打扰。



8.9.4 通道特定监测

(1)Tx 激光器偏置电流

  • 格式:16 位无符号整数(0 到 65535)。
  • 单位:LSB是 2 µA。所以实际电流 = 读数值 × 2 µA。
  • 乘数:如果模块的电流范围太大,比如超过 131 mA,可以在 01h:160 里设置一个乘数(比如 2)。此时 LSB 就变成 4 µA,最大范围翻倍。但默认乘数为 1,大多数模块够用。
  • 精度:厂家自行规定,但必须准到实际值的 ±10% 以内。

(2)Rx 接收光功率

  • 格式:16 位无符号整数,单位是 0.1 微瓦 (µW)。
  • 功率类型:可以是平均功率(Pav),也可以是光调制幅度(OMA),具体是哪种要看模块在 Page 01h 的能力广告。
  • 数值范围:最大只能表示 6.5535 mW。换算成光纤通信里常用的 dBm:0 dBm = 1 mW,6.5535 mW 约等于 +8.2 dBm。
  • 精度:在厂家指定的工作波长和温度、供电电压上,必须准到 ±3 dB 以内。

(3)Tx 发射光功率

  • 格式:和接收功率完全一样,16 位无符号整数,单位 0.1 µW,0 到 6.5535 mW 范围。
  • 精度:同样必须在规定波长和温压下 ±3 dB 以内。

告警阈值和警告阈值与其所规定阈值的目标监控值,具有相同的数值表示形式。

8.9.5 配置命令执行与结果状态 (ConfigStatus)

(1)背景

如第 8.8.3.1 节所述,主机通过写 Apply 寄存器来让暂存控制集里的配置生效。但这个过程不是瞬间完成的,可能耗时较长,甚至可能因为参数错误被模块拒绝。
如果主机写完 Apply 就默认成功了,它可能立刻去读状态,结果读到的是还没更新完的旧数据,或者根本不知道配置已被拒绝,继续用错误的配置来工作。这就会导致系统混乱。
因此,CMIS 设计了一个专门的寄存器ConfigStatus,作为每次配置操作的“进度条和回执单”。

(2)工作流程

当主机写Apply寄存器后,模块执行四个步骤:(1) 命令接受,(2) 参数验证,(3) 命令执行,和 (4) 结果反馈。我们可以把主机想象成顾客,模块是银行柜员,暂存控制集是填好的申请表。

任一相关通道正忙
(=ConfigInProgress)

所有相关通道空闲

配置无效

配置有效

主机向 Apply 寄存器
写入通道触发位掩码

步骤1: 命令接受
检查 ConfigStatus

静默忽略该命令

立即将相关通道的
ConfigStatus 设为
ConfigInProgress

步骤2: 参数验证
验证暂存控制集设置

跳过命令执行步骤

步骤3: 命令执行
实际执行配置/提交流程

步骤4: 结果反馈
更新所有相关通道的
ConfigStatus

写入最终结果状态
如: 成功/失败

清除 ConfigInProgress 状态
允许接受新命令

  1. 第一步:命令接受——柜员说“稍等,我看看忙不忙”
    主机写 Apply 寄存器后。模块首先看自己手头有没有正在处理的业务。如果 ConfigStatus 显示“处理中(ConfigInProgress)”,说明模块此时正在处理某个业务,不空闲。模块就会静默忽略主机的需求,不发任何反馈,防止新的申请干扰正在进行的旧业务。如果空闲,模块会立刻把状态牌翻成“处理中”,表示“我开始为你服务了,别催”。

  2. 第二步:参数验证——柜员检查申请表
    模块仔细检查申请表(暂存控制集)上的每一项:应用编号存在吗?通道分配合法吗?如果有任何错误,柜员会直接跳到第四步,告诉你“被拒了,原因是……”。这一步保证了错误的配置绝对不会被执行,保护了正在运行的链路。

  3. 第三步:命令执行——柜员真正办理业务
    参数验证通过后,模块才开始真正干活:把草稿本(暂存控制集)的内容誊到正式本(活动控制集)上,根据你选的是 ApplyDPInit 还是 ApplyImmediate,决定是直接生效还是触发通道重新初始化。规范假定,只要验证通过,这一步就不会失败。

  4. 第四步:结果反馈——柜员给你回执单
    一切办完(或验证被拒)后,模块会把 ConfigStatus 更新成最终结果,比如“成功”、“失败-参数错误”等。关键是,这个最终结果一出现,就等于清除了“处理中”状态,告诉顾客:“业务办完了,下一位可以来了。”

  • 三条重要细节
    • 同一条数据路径,统一状态:如果一条数据路径包含 4 个通道,模块会把这 4 个通道的 ConfigStatus 全部填成相同的值。你不能在一条路径上出现“通道 1 成功、通道 2 失败”这种自相矛盾的结果。
    • 没有优先级规定:如果一个命令被拒绝,可能有多个原因(比如参数错误、状态不兼容)。模块会选一个“最重要的”报上来,但各家厂商对“最重要”的理解可能不同,规范没硬性规定。
    • 先读“ConfigStatus”,再写Apply寄存器:如果模块正在处理一项任务A,处在“ConfigInProgress”状态,主机写Apply寄存器,想让模块执行任务B,这时模块会静默忽略,继续执行任务A,且不回复主机任何信息。过一段时间,主机读取命令执行结果,这个结果是任务A的结果,而不是任务B的结果。所以,主机在写Apply寄存器前,必须先确认模块此时空闲,这样才能确保最后的任务执行结果是无误的。


8.9.6 活动控制集

(0)概述

  • 正式生产手册”:我们可以把活动控制集想象成贴在工厂的正式生产手册,工人只会照着这本手册干活。模块内部的硬件也一样,它只看活动控制集里写的参数来运行。
  • 出厂就有默认配置:模块一上电,在初始化完成之前,就会先往活动控制集里塞一套默认配置。这样即便主机啥也不改,模块也能先正常跑起来。
  • 主机通过“草稿本”(暂存控制集)来改手册:主机不能直接在这本正式手册上涂改,它只能先在暂存控制集(草稿本)里写好新配置,然后按一下 Apply 按钮(ApplyDPInit 或 ApplyImmediate),模块验证通过后,才会把草稿本的内容誊到正式手册上。
  • 只读且绝对权威:活动控制集本身是只读的,主机只能看不能直接写。任何时候主机想知道模块当前到底跑的是什么配置,读它就对了,它显示的就是硬件正在执行的真实参数。

(1)数据路径配置(应用分配)

主机可以通过数据路径配置字段,推断该通道被分配给了哪个应用、哪条数据路径,以及该通道的信号完整性设置由应用决定(使用默认值)还是由主机显式定义(手动覆盖)。这个字段总共有8个字节(字节206~213),每个字节代表一个通道。每个字节的格式如下表所示。

字节206~213就按照上表的格式,将8个通道的数据路径配置信息列举清楚。

(2)Tx和Rx信号完整性字段

此字段描述 Tx 和 Rx 通道的当前活动控制集里的信号完整性的设置,比如输出幅度、预加重强度、均衡器系数等。信号完整性配置参数的来源由两种:

  • ExplicitControl = 0(清零):按默认值来进行配置。
  • ExplicitControl = 1(置位):主机已经通过暂存控制集(草稿本)手动写入了自定义的信号参数,然后按了 Apply 按钮把它们提交到了活动控制集。按主机更新后的参数进行配置。

通过这个机制,主机可以随时验证自己的自定义配置是否已经真正生效。


什么是 Rx 输出前标均衡(OutputEqPreCursorTargetRx)?
在高速信号传输中,由于 PCB 走线、连接器等引起的损耗,信号会变形,导致前后比特相互干扰(码间干扰 ISI)。均衡器就是用来补偿这种干扰的。想象一串数字比特 …1 0 1 1 0… 在传输。当前比特会受到前面比特的拖尾干扰(前标干扰)后面比特的前导干扰(后标干扰)。均衡器通常用多抽头滤波器来分别抵消这些干扰:

  • 主标(main-cursor):当前比特本身的幅度。
  • 前标(pre-cursor):抵消前面比特对当前比特的残留影响。
  • 后标(post-cursor):抵消后面比特对当前比特的提前干扰。

8.9.7 数据路径条件

“数据路径条件”就是模块告诉主机的一个状态铃(DPInitPendingLane<i>)。铃一响,意味着与通道 <i> 相关的数据路径配置已在活动控制集中被更新,但随后DPinit的状态还在等待转换,硬件还在用着旧参数。如果支持无干预重配置(默认SteppedConfigOnly=0),模块就会在没有主机进一步干预的情况下,自动引导 DPSM 状态转换。

8.9.8 媒体通道到媒体波长与光纤的映射

表 8-87 描述了用于定义媒体通道到媒体波长及物理光纤映射关系的通告字段。我们可以把光纤想象成一条高速公路,不同波长的光信号就是不同颜色的汽车。模块需要清清楚楚地告诉主机:“我这根光纤里跑了几种颜色的车,每种颜色对应哪一个逻辑通道,以及它们分别开在哪条物理光纤上。”必须遵守三个规则:

  1. 波长编号规则
    对于 WDM 模块,波长最短的那个光信号永远是“1号颜色”(媒体波长 1),然后按波长从短到长,依次编号为 2号、3号……绝不会乱排。比如,一个 CWDM4 模块有四束光,波长分别为 1271nm、1291nm、1311nm、1331nm,那么1271nm 就一定是媒体波长 1,1331nm 是媒体波长 4。
  2. 光纤编号规则
    模块上有几个光纤接口,每个接口的编号(比如光纤 1、光纤 2)也要严格遵循硬件规范,不能自己乱起名。这就保证了主机一查表就知道“1号颜色”的光是从哪个物理光纤口发出去的。
  3. 约束检查
    这张表不是想怎么填就怎么填,它必须同时符合硬件规范以及前面学过的应用广告(表 8-19)、**远端通道配置(表 8-33)媒体接口技术(表 8-35)**里的规定。如果填错了,比如颜色编号和光纤编号对不上,整个映射就会被视为无效,主机将无法正确配置链路。

总结

本文深入解读了 CMIS V5.0 协议中 Page 11h 的核心内容,将其比作光模块的“监控大厅”。详细阐述了数据路径状态、通道输出指示、通道特定标志与监测、配置命令执行状态、活动控制集以及通道映射等关键机制。欢迎有疑问的小伙伴在评论区留言讨论。

http://www.cnnetsun.cn/news/4100493.html

相关文章:

  • 用眼休息提醒软件Project Eye实测:每天20秒,真的能告别眼干眼涩吗
  • Midscene.js实战指南:如何用视觉AI替代脆弱选择器,一套自然语言搞定Web到手机的UI自动化测试
  • Elmer FEM实战:如何用免费开源工具完成一次真实的多物理场仿真
  • 锤子助手第112个开关:启用笔记复读的位置、验证方法与混合内容隐私边界
  • 键盘连击修正终极指南:Keyboard Chatter Blocker 逐键防抖完全上手
  • UE4SS DLL加载失败终极排查手册:5站走通Lua注入报错与系统级劫持的完整修复路线
  • WVP-PRO国标GB28181视频平台完整上手指南:一条命令启动,5分钟接入第一批摄像头
  • BiliBili-UWP 完整上手指南:免费开源的 B 站第三方客户端,Windows 桌面观影更顺滑
  • SAGE社交感知生成引擎:异构多智能体导航的生成式路径规划实践
  • 告别付费墙:Wand-Enhancer 本地解锁 WeMod Pro 的完整实操指南(附手机远程控制玩法)
  • WindowResizer窗口大小调整快速上手指南:4步强制改掉任意顽固窗口
  • Seeed Studio XIAO nRF54LM20A开发板实战:从环境搭建到低功耗AI应用
  • 换服必丢角色?用 palworld-host-save-fix 做一次帕鲁存档迁移,从此不怕“创建新角色“
  • FreeRTOS计数信号量:从资源管理到生产者-消费者模型实战
  • FreeRTOS队列深度解析:从原理到实战,掌握嵌入式多任务通信核心
  • L4级自动驾驶巴士量产背后的技术栈与工程化挑战
  • Elmer FEM多物理场仿真从零到实战:一文吃透开源工程软件核心玩法
  • 基于ESP32与WS2812B的智能RGB氛围灯DIY:从硬件选型到网络控制全解析
  • 英文简历不会写怎么办?5款AI工具实测+英文Resume写作模板,外企求职不再被ATS淘汰
  • AE/PR/FCPX动态模板高效使用指南:从解构到创意应用
  • Magnet2Torrent终极指南:如何把磁力链接快速转换为可永久保存的种子文件
  • SparkSQL 之 JDBC 数据转 DataSet 代码实现
  • 基于大语言模型的群体推荐系统:AgentGR模拟器原理与实践
  • 奔驰概念雕塑:解码软件定义汽车时代的数字化转型与设计变革
  • Python爬虫实战:招聘网站职位信息采集系统(完整版)
  • 第 6 篇:「用数据说话」— 性能基准测试如何证明架构
  • 开源无人机DIY全攻略:从STM32飞控到Betaflight调参实战
  • DeepSeek Harness 上手指南
  • ESP32-S3驱动LED点阵屏实现数字雨与动态光效全解析
  • YOLO 航拍微小金具涨点|2721 张输电线路防震锤 2 类 VOC/YOLO 数据集,Stokes/Spiral 型识别、无人机线路巡检全流程落地