文章目录8.2.0 总述8.2.1 管理信息字段Management Characteristics1SFF8024 IDSFF8024Identifier字节0bit 7~02支持的CMIS版本CmisRevision字节1bit 7~03内存模式MemoryModel字节2bit 74是否逐步配置SteppedConfigOnly字节2bit 65MCI接口最大速率MciMaxSpeed字节2bit 3~28.2.2 全局信息字段摘要此专栏主要介绍光模块通用管理接口规范(Common Management Interface Specification, CMIS)协议规范V5.0的解读。本文主要关注协议文档的8.2小节管理信息和全局信息的内容。不只是简单地翻译文档还剖析协议规定背后的深意。为了方便和协议文档内容相互对应本文的章节编号和协议文档一致。8.2.0 总述在 CMIS 的内存布局里低页内存Lower Memory00h–7Fh就像一个永远敞开的信息窗口。这 128 个字节采用静态寻址即每一个地址都固定指向同一个物理寄存器主机总能在第一时间、不加任何配置就读到它们。低页内存和高页内存的对比如下表所示。对于平坦内存模块必须支持低页内存和高页内存的Page 00h。CMIS文档的表8-2简要罗列了低页内存各个字节存储的内容如下所示。8.2.1 管理信息字段Management Characteristics主机通过管理信息字段可以知道”这个模块是否可以管理”和“如何管理”。该字段包含SFF8024 ID、支持的CMIS版本、内存模式、是否逐步配置、MCI接口最大速率。1SFF8024 IDSFF8024Identifier字节0bit 7~0在SFF-8024协议文档的表4-1中列举了00h~FFh代表的光模块类型。例如18h代表QSFP-DD19h代表OSFP26h代表XPO。主机根据这个字段对应SFF8024协议就可以知道这个光模块是哪种类型。2支持的CMIS版本CmisRevision字节1bit 7~0表明此光模块支持的CMIS版本。高四位bit7~4表示小数点前的数字。低四位bit3~0表示小数点后的数字。例如01h代表支持的CMIS版本为0.121h表示版本为2.1。3内存模式MemoryModel字节2bit 7表明此光模块的内存模式是平坦内存还是分页内存。0b分页内存高页包含00h~02h页和10h~11h页。1b平坦内存高页只包含00h页。4是否逐步配置SteppedConfigOnly字节2bit 6背景模块内部有一个数据路径状态机DPSMData Path State Machine它管理着模块从上电、初始化、配置到正常工作Activated的各个状态。当主机需要改变模块的工作模式比如从 400G SR4 切换到 100G FR1时就需要执行一次重配置让 DPSM 从当前状态安全地过渡到新状态。0b无干预重配置含义主机只需把新的配置参数写在内存页里准备好然后发一次 ApplyImmediate 或 ApplyDPInit 命令就可以了。模块会自己判断当前状态自动完成内部状态转换的全过程无需主机再逐步干预。特点自动化、一步到位、速度快、省去主机反复读写步骤。适用场景特别适合要求快速切换速率比如交换机之间自动协商链路速率的场景。1b逐步重配置含义模块不支持全自动切换需要主机严格按照 DPSM 状态的步骤一步一步下发命令来引导模块。典型流程比如主机必须先写命令让模块进入低功耗状态或复位某个模块等到状态确认后再写命令进行下一步配置最后再写激活命令。适用场景这类模块的硬件或固件较简单或者它的设计本身就不支持热切换复杂功能但更稳健。代价是重配置耗时较长。逐步配置存在两条关键约束ApplyDPInit 被“假接受”无论模块当前处于什么状态主机写入 ApplyDPInit 命令在总线通信上不会有错误但模块不会真的执行它DPSM 状态不会发生任何变化。这相当于一个安全保护防止一个不当命令把模块打乱。ApplyImmediate 被忽略模块完全不支持这个即时应用命令。意味着主机不能指望一键切换必须遵循固定步骤。注意有些高速互联标准比如 InfiniBand 或 Fibre Channel在和有源光缆AOC或有源模块对接时需要做时间非常敏感的速率协商。如果采用逐步重配置这个协商过程可能因响应太慢而超时失败。所以任何声称支持这类应用的模块强制要求实现 0b无干预重配置保证协商能一次命令瞬间完成。字节2bit 5~4保留。5MCI接口最大速率MciMaxSpeed字节2bit 3~2表明此光模块MCI接口通常为I2C总线支持的最大速率。00b最大速率400kHz。01b最大速率1MHz。10b 和 11b保留。字节2bit 1~0保留。将管理信息字段汇总如下表所示。8.2.2 全局信息字段描述光模块的一些全局信息。平坦内存模块的ModuleState要求始终上报为ModuleReady。因为平坦内存模块不存在复杂的状态切换过程所以它永远直接返回ModuleReady告诉主机“我不需要什么复杂切换流程你可以随时管理我。”并不是所有的状态都能被观测到。因为有些非常短暂、自动跳转的过度状态主机要去读取时这些状态可能就已经跳过了。因此主机只需要关注模块当下的状态而不需要捕获所有中间状态才做决策不必纠结“为什么没看到状态 2直接从状态 1 跳到了 3 ”。这就是本篇文章的全部内容欢迎有疑问的小伙伴在评论区留言讨论。下篇将解读CMIS 规范中关于“标志、掩码和中断”的总纲。