QSFP/QSFP-DD/OSFP 通用管理接口规范(CMIS)解读:09 Page 11h
文章目录8.9.0 带 Bank 的Page 11h通道状态与数据路径状态概述8.9.1 数据路径状态8.9.2 通道输出状态指示1两个独立的“信号灯2 使Rx状态变为“有效”的条件3Rx状态变化可引发中断8.9.3 通道特定标志1模块级 VS 通道级2每个警告/报警都有个“开关”8.9.4 通道特定监测1Tx 激光器偏置电流2Rx 接收光功率3Tx 发射光功率8.9.5 配置命令执行与结果状态 (ConfigStatus)1背景2工作流程8.9.6 活动控制集0概述1数据路径配置应用分配2Tx和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 灯点亮。一旦灯亮主机就可以放心大胆地开始接收数据了。收到足够强的光信号不是杂散光是真正有效的输入。内部资源全部初始化完毕包括放大器锁定、时钟恢复、信号检测全部就绪。输出信号稳定能持续、可靠地向交换机发送数据。3Rx状态变化可引发中断CMIS规范给每个通道的 OutputStatusRx 配了一个状态变化标志位位于Page 11h: Byte 153。灯的状态一变标志就被置 1且被锁存住。如果该标志关联的掩码位不是 1bPage 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 通道特定监测1Tx 激光器偏置电流格式16 位无符号整数0 到 65535。单位LSB是 2 µA。所以实际电流 读数值 × 2 µA。乘数如果模块的电流范围太大比如超过 131 mA可以在 01h:160 里设置一个乘数比如 2。此时 LSB 就变成 4 µA最大范围翻倍。但默认乘数为 1大多数模块够用。精度厂家自行规定但必须准到实际值的 ±10% 以内。2Rx 接收光功率格式16 位无符号整数单位是 0.1 微瓦 (µW)。功率类型可以是平均功率Pav也可以是光调制幅度OMA具体是哪种要看模块在 Page 01h 的能力广告。数值范围最大只能表示 6.5535 mW。换算成光纤通信里常用的 dBm0 dBm 1 mW6.5535 mW 约等于 8.2 dBm。精度在厂家指定的工作波长和温度、供电电压上必须准到 ±3 dB 以内。3Tx 发射光功率格式和接收功率完全一样16 位无符号整数单位 0.1 µW0 到 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 状态允许接受新命令第一步命令接受——柜员说“稍等我看看忙不忙”主机写 Apply 寄存器后。模块首先看自己手头有没有正在处理的业务。如果 ConfigStatus 显示“处理中ConfigInProgress”说明模块此时正在处理某个业务不空闲。模块就会静默忽略主机的需求不发任何反馈防止新的申请干扰正在进行的旧业务。如果空闲模块会立刻把状态牌翻成“处理中”表示“我开始为你服务了别催”。第二步参数验证——柜员检查申请表模块仔细检查申请表暂存控制集上的每一项应用编号存在吗通道分配合法吗如果有任何错误柜员会直接跳到第四步告诉你“被拒了原因是……”。这一步保证了错误的配置绝对不会被执行保护了正在运行的链路。第三步命令执行——柜员真正办理业务参数验证通过后模块才开始真正干活把草稿本暂存控制集的内容誊到正式本活动控制集上根据你选的是 ApplyDPInit 还是 ApplyImmediate决定是直接生效还是触发通道重新初始化。规范假定只要验证通过这一步就不会失败。第四步结果反馈——柜员给你回执单一切办完或验证被拒后模块会把 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个通道的数据路径配置信息列举清楚。2Tx和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 数据路径条件“数据路径条件”就是模块告诉主机的一个状态铃DPInitPendingLanei。铃一响意味着与通道 i 相关的数据路径配置已在活动控制集中被更新但随后DPinit的状态还在等待转换硬件还在用着旧参数。如果支持无干预重配置默认SteppedConfigOnly0模块就会在没有主机进一步干预的情况下自动引导 DPSM 状态转换。8.9.8 媒体通道到媒体波长与光纤的映射表 8-87 描述了用于定义媒体通道到媒体波长及物理光纤映射关系的通告字段。我们可以把光纤想象成一条高速公路不同波长的光信号就是不同颜色的汽车。模块需要清清楚楚地告诉主机“我这根光纤里跑了几种颜色的车每种颜色对应哪一个逻辑通道以及它们分别开在哪条物理光纤上。”必须遵守三个规则波长编号规则对于 WDM 模块波长最短的那个光信号永远是“1号颜色”媒体波长 1然后按波长从短到长依次编号为 2号、3号……绝不会乱排。比如一个 CWDM4 模块有四束光波长分别为 1271nm、1291nm、1311nm、1331nm那么1271nm 就一定是媒体波长 11331nm 是媒体波长 4。光纤编号规则模块上有几个光纤接口每个接口的编号比如光纤 1、光纤 2也要严格遵循硬件规范不能自己乱起名。这就保证了主机一查表就知道“1号颜色”的光是从哪个物理光纤口发出去的。约束检查这张表不是想怎么填就怎么填它必须同时符合硬件规范以及前面学过的应用广告表 8-19、**远端通道配置表 8-33和媒体接口技术表 8-35**里的规定。如果填错了比如颜色编号和光纤编号对不上整个映射就会被视为无效主机将无法正确配置链路。总结本文深入解读了 CMIS V5.0 协议中 Page 11h 的核心内容将其比作光模块的“监控大厅”。详细阐述了数据路径状态、通道输出指示、通道特定标志与监测、配置命令执行状态、活动控制集以及通道映射等关键机制。欢迎有疑问的小伙伴在评论区留言讨论。