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


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

8.8.3 暂存控制集 0

8.8.3.0 概述

  • 背景:我们可以将模块类比为一个高精度的工厂流水线,而我们要改流水线上的一些参数时,例如某个通道的均衡器设置。如果直接在生产线上调整旋钮,可能会出问题。所以 CMIS 设计了一套“先写草稿,再审批,最后生效”的流程。
  • 两个关键“本子”
    • 暂存控制集 (Staged Control Set):这就是一本“草稿本”。你可以在里面随便写、随便改,完全不影响正在运行的生产线。
    • 活动控制集 (Active Control Set):这就是“正式生效本”,流水线实际读的是这里面的参数。

CMIS规定一个光模块可以有两个暂存控制集。其中,暂存控制集 0 是分页内存模块强制要求的,而暂存控制集 1是可选的。有关控制集的更详细的描述,见CMIS协议文档第 6.2.3 节和第 6.2.4 节。

8.8.3.1 应用暂存控制集触发器(配置命令)

  1. 两个触发命令:“ApplyDPInit” 和 “ApplyImmediate
    写完草稿后,怎么让它生效呢?你需要先把草稿“提交”一下。提交的命令有两个,相当于两个不同的“提交按钮”::
    • ApplyDPInit:这个按钮按下去,模块会先记录下“这些通道需要重新初始化”,但并不一定立刻重启流水线,而是按照状态机一步一步来,可能会自动完成通道的复位和重新初始化。此命令通常用于通道当前处于“停用”状态,或需要完整重新初始化的场景。
    • ApplyImmediate:这个按钮是“立即生效”。它会直接把草稿里的参数刷到硬件上,如果当前通道正在稳定运行,它就会实现在线参数切换而无需复位。。

如果模块的 SteppedConfigOnly 属性是 1(分步配置,表示它只支持一步一步来),那 ApplyImmediate 这个按钮就无效,写了也白写。

  1. 四个工作流程
    当你按下“提交”按钮后,模块不会盲从,而是有一套严谨的审批流程,就像你提交了一份重要申请,需要四个步骤:

ApplyDPInit

ApplyImmediate

命令接受

参数验证

命令执行:等待初始化后生效

命令执行:立刻生效

结果反馈

Step 1: 命令接受 —— “你忙不忙?”
如果模块正在为这条数据路径执行上一个配置命令,它会直接忽略你的新命令(静默忽略),防止冲突。如果它闲着,就会立刻把状态改为“处理中”(ConfigInProgress),相当于告诉你“我收到了,正在处理”。

Step 2: 参数验证 —— “你的草稿写对了吗?”
模块会检查你在草稿本上填的参数合不合法、满不满足当前状态。比如你填了一个不支持的速率,或者模块还没准备好,它就会拒绝。如果被拒,一切保持原样,生产线不受任何影响。这保证了无论如何草稿错误不会破坏正在运行的业务。

Step 3:命令执行 —— “正式抄录并执行”
验证通过后,模块先把草稿本的参数正式誊写到“正式生效本”中。然后根据你按的是哪个按钮以及通道当前的状态,决定下一步:

  • 如果按的是 ApplyDPInit(或者通道本来就停着),它会设置“等待初始化”标记,然后状态机会自动把通道复位并重新训练。
  • 如果按的是 ApplyImmediate 且通道正在工作,它就立刻把新参数刷进硬件,实现在线更新。

Step 4:结果反馈 —— “告诉你办好了”
最后,模块会在 ConfigStatus 寄存器里写上结果,比如“成功”或者“失败”。同一个数据路径里的所有通道会得到相同的结果,保证一致性。
在这里插入图片描述

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

(1)背景

  • 问题:一个光模块可以支持多个应用,例如某款 QSFP-DD 支持 1x400G 和 4x100G。当工作在 4x100G 应用时,每个 100G 对应一个数据路径。QSFP-DD 有 8 个通道,这 8 个通道如何分配给各个数据路径?
  • 解决方式:CMIS协议就规定:主机通过 DPConfigLane<i> 寄存器来告诉模块:“我要工作在哪个应用下(AppSelCode),我会用哪几个通道,它们各自属于哪个数据路径(DataPathID)。”

(2)DPConfigLane 字节里有什么

每个通道(i)都有一个对应的配置字节,包含三个部分:

  • AppSelCode:指示该通道参与哪一个“应用”。比如填 1 代表1x400G,填 2 代表4x100G。
  • DataPathID:给数据路径分配一个编号。同一条数据路径中的所有通道必须填相同的 DataPathID,就像一个房间里的所有椅子贴同一个房间号。
  • ExplicitControl:一个可选的精细控制位,允许主机对特定通道进行特殊配置(例如,单独禁用该通道的自动静噪功能)。

(3)举个栗子🌰

  1. 假设模块支持两种应用:
    • 应用 1(AppSelCode=1):1 x 400G ,占用 8 条通道。
    • 应用 2(AppSelCode=2):4 x 100G ,每个数据路径占用 2 条通道。
  2. 如果想用“4x100G”,主机就依次配置 8 个通道:
    • 通道 1:AppSelCode=2,DataPathID=1
    • 通道 2:AppSelCode=2,DataPathID=1
    • 通道 3:AppSelCode=2,DataPathID=2
    • 通道 4:AppSelCode=2,DataPathID=2
    • 通道 7:AppSelCode=2,DataPathID=4
    • 通道 8:AppSelCode=2,DataPathID=4
  3. 配置完所有通道后,主机再按一下“应用”触发器(ApplyDPInitApplyImmediate),模块就会根据这个方案把硬件初始化好,让四条独立数据路径同时工作。
    在这里插入图片描述
    表8-63描述了每个通道配置寄存器 DPConfigLane<i> 的数据格式。该寄存器位于 Page 10h 的 145~152 字节,共 8 个字节,每个字节采用相同格式,从而完整描述 8 个通道的配置。
    在这里插入图片描述

8.8.3.3 Tx 与 Rx 信号完整性控制

(1)背景

模块出厂时,内部已经存储了一套针对每种应用(例如 400G-DR4、100G-FR1)的默认信号参数,比如均衡器强度、输出幅度等。这些默认值在绝大多数情况下都能良好工作,模块会自动调用它们。但在某些情况下,主机(交换机)可能需要自行微调。例如:

  • 交换机 PCB 走线过长,需要更强的发送端预加重。
  • 某条通道的接收信号质量差,需要单独调整均衡器参数。

这时候,主机就可以用这节定义的字段,覆盖模块的默认值,写入自己想要的参数。

(2)两个安全锁

为防止主机误操作导致链路故障,规范定义了两道安全锁:

  • 第一道锁:ExplicitControl 位
    必须先将对应通道的 ExplicitControl 位设置为 1,模块才会响应你写的信号完整性参数。若该位为 0,则无论配置多少参数,模块均会忽略并继续使用其默认值。
  • 第二道锁:暂存控制集机制
    即使你打开了开关、写好了参数,这些参数也先放在“草稿本”里,不会立刻生效。只有当你按下“应用”按钮(ApplyDPInit 或 ApplyImmediate),模块验证通过后,新参数才会真正写入硬件。

在这里插入图片描述
在这里插入图片描述

8.8.4 暂存控制集 1

暂存控制集 1 是可选的。其格式与暂存控制集 0(参见第 8.8.3 节)完全相同,区别在于它被零初始化

  • 零初始化:模块刚上电时,暂存控制集 1 里全是 0,干干净净,什么都没有。而暂存控制集 0 上电时可能会被模块固件填入一些默认配置,方便主机直接用。
  • 使用场景速率协商
    例如,交换机(主机)与模块正以 400G 模式工作。若交换机希望与远端设备协商是否降速至 200G 以适应更长距离的光纤,同时又不希望中断当前运行的 400G 业务(因为协商结果尚不确定)。
    • 若存在两个暂存控制集,交换机可执行以下操作:
      1. 保持暂存控制集 0 不动:当前 400G 的配置安安全全地留在里面,继续支撑着正在跑的链路。
      2. 在暂存控制集 1 里写新方案:把 200G 的配置(比如不同通道分配、不同速率参数)写进暂存控制集 1,反复检查,确保没问题。
      3. 协商确认后切换:一旦远端同意降到 200G,交换机就触发一个命令,让模块立即从暂存控制集 1 读取新配置并生效。整个过程干净利落,不用临时抱佛脚重写草稿,也不会因为写错而崩掉现有链路。
    • 如果只有一本暂存控制集,想改配置就得先把旧配置覆盖掉。万一新配置有问题想回退,或者写的过程中出现意外,正在跑的链路就可能受影响。两本暂存控制集给了主机极大的灵活性和安全性。

因为暂存控制集 1与暂存控制集 0的格式完全相同,所以本文就不详细列举暂存控制集 1 相关字节178~212的信息了。

8.8.5 通道特定掩码

  • 背景:我们可以把每个通道的“标志(Flag)”想象成一个个小警报器。比如,“通道 1 接收光功率过低”就是一个警报器。如果每个小警报器一响,模块就直接拉响总警铃(中断引脚),那么主机会被频繁打扰,忙于处理一些可能并不紧急的告警。
  • 解决方案
    这里的“掩码(Mask)”就是给每个小警报器装的一个开关。主机可以决定:
    • 开关打在 “开”(掩码位 = 0):这个警报器可以拉响总警铃。
    • 开关打在 “关”(掩码位 = 1):这个警报器被屏蔽了,就算它响了,总警铃也不会响。
  • 作用:这就让主机能够只订阅自己真正关心的通道事件。例如,在调试某个特定通道时,可以把其他通道的告警暂时屏蔽掉,只让出问题的通道产生中断,从而更专注地排查故障。

这些开关就放在 Page 10h 的表 8-71 寄存器里,主机可以随时按需调整。

总结

本文深入解读了 CMIS V5.0 协议中 Page 10h 的核心内容,重点阐述了暂存控制集(Staged Control Set)的“先写草稿,再审批,最后生效”安全配置流程、数据路径的灵活分配机制、信号完整性控制的双重安全锁设计,以及通道特定掩码的精细化告警管理功能。这些机制共同保障了光模块配置的可靠性、灵活性与安全性。欢迎有疑问的小伙伴在评论区留言讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值