ASF:Alert Standard Format,警报标准格式
IPMB : Intelligent Platform Management Bus
IPMI : Intelligent Platform Management Interface
SMBus : System Management Bus
UDID : unique device identifier
6 MCTP over SMBus/I2C 传输
MCTP over SMBus/I2C 传输绑定定义了如何使用 SMBus 事务通过物理 SMBus 或 I2C 介质传送 MCTP 数据包。这包括如何使用物理地址、如何容纳固定地址、如何为热插拔或其他需要动态物理地址分配的设备完成物理地址分配,以及如何发现 MCTP 支持。还给出了总线和 MCTP 控制操作的时序规范,并定义了“公平性”协议,以避免 MCTP 端点之间的死锁和饥饿/锁定情况。
该绑定旨在能够与使用早期 SMBus/I2C 管理协议(如警报标准格式 (ASF) 和 IPMI)的设备共享同一总线,以及与使用 SMBus/I2C 协议的供应商特定设备共享同一总线。这些规范还允许给定设备将非 MCTP SMBus 功能与 MCTP 合并。这在 6.21 中有更详细的描述。
6.1 术语
根据 SMBus,SMBus 设备分为以下几类,其中地址解析协议 (ARP) 是指 SMBus 地址解析协议(一种动态从地址分配协议),UDID 是指“唯一设备标识符”,即设备在 ARP 过程中用于唯一标识自身的 128 位值。由于这些协议是通过在 SMBus 物理规范上运行的命令事务实现的,因此可以在支持 I2C 物理接口的设备上使用这些协议。
- 支持 ARP。SMBus 术语,表示支持所有 SMBus ARP 命令(可选 Host Notify 命令除外)的设备。从属地址是可分配的。该设备支持两种 Reset 命令。
- 固定且可发现 。SMBus 术语,表示设备支持 Prepare to ARP、directed Get UDID、general Get UDID 和 Assign Address 命令。从地址是固定的;设备将接受 Assign Address 命令,但不允许重新分配地址。该设备支持两种 Reset 命令。
- 固定- 不可发现 。SMBus 术语,指示设备支持定向 Get UDID 命令。从地址是固定的。
- 不支持 ARP 。SMBus 术语,表示设备不支持任何 ARP 命令。从地址是固定的。
- 固定地址。对于本规范,此术语用于指代使用固定从地址的任何设备,而不区分它是“固定且可发现”、“固定、不可发现”还是“不支持 ARP”。
6.2 传输绑定与 I2C
本规范中定义的传输绑定也被设计为能够与使用 7 位寻址的标准模式快速模式 (400 kHz) 和快速模式 Plus (1MHz) I2C 总线一起工作;不支持 10 位寻址。此绑定未指定用于高速 I2C 规范。
6.3 MCTP 数据包封装
所有 MCTP 事务都基于 SMBus Block Write 总线协议。前 8 个字节构成数据包标头。前三个字段 — Destination Slave Address、Command Code 和 Length — 直接映射到 SMBus 功能字段。其余的标头和有效负载字段映射到 SMBus Block Write 的“Data Byte”字段,如图 1 所示。因此,报头中包含源从地址是由 MCTP 而不是 SMBus 指定的。这样做是为了便于寻址,以便于建立与消息发起方的通信所需的地址。
图 1 – MCTP over SMBus/I2C 数据包格式
表 1 – 数据包标头字段描述
Byte | 块写入字段 | 描述 |
1 | Slave Address Wr | [7:1] SMBus 目标从地址:本地 SMBus 链路的目标设备的从地址。 [0]:SMBus R/W# 位:应设置为 0b,因为所有 MCTP 消息都使用 SMBus 写入事务。 |
2 | Command Code | 命令代码:SMBus 命令代码 所有基于 SMBus 的 MCTP 消息都使用 0x0F 命令代码。 |
3 | Byte Count | 字节计数:承载 MCTP 数据包内容的 SMBus Block Write 协议事务的字节计数。此值是 Byte Count 字段后面的字节数,但不包括 PEC 字节。例如,如果 MCTP 数据包负载长度(从字节 9 开始)为 64 字节,则字节计数字段中的值将为 69。(计数 69 表示 64 字节的 MCTP 数据包负载加上 5 个字节 [字节 4 到 8,包括字节数],这些字节构成了 Byte Count 字段后面的 SMBus 特定报头和 MCTP 报头的字节。 |
4 | Data Byte 1 | [7:1] :SMBus 源从地址:对于本地 SMBus 链路,源设备的从地址。 [0]:此位应设置为 1b。该值使 MCTP 能够与基于 SMBus 的 IPMI 和 IPMB (基于 I2C 的 IPMI) 协议区分开来。 |
5 | Data Byte 2 | [7:4] 保留 MCTP:此半字节保留供 MCTP 基本规范定义。 [3:0] MCTP 标头版本:对于符合 MCTP 基本规范 1.0 和此版本的 SMBus 传输绑定的 MCTP 设备,设置为 0001b。所有其他值 = Reserved。 |
6 | Data Byte 3 | 目标端点 ID (*) |
7 | Data Byte 4 | 源端点 ID (*) |
8 | Data Byte 5 | [7] SOM:消息开始标志 (*) [6] EOM:消息结束标志 (*) [5:4] 数据包序列号 (*) [3] 标签所有者 (TO) 位 (*) [2:0] 消息标签 (*) |
9 | Data Byte 6 | [7] IC:完整性检查位 (*) [6:0] 消息类型 (*) |
10:N-1 | Data Byte 7:M | 消息标头和数据 (*) |
N | PEC | 数据包错误代码 (PEC):SMBus 2.0 规范中定义的 PEC。所有 MCTP 交易都应包含一个 PEC 字节。PEC 字节应由源传输,并由目标检查。 |
(*) 表示由 MCTP 基本规范定义的字段。 |
6.4 桥接和数据包格式化
当 MCTP 数据包通过网桥从一个 SMBus/I2C 端口传输到另一个 SMBus/I2C 端口时,网桥会保留所有数据包头、消息头和数据字段,但源和目标从地址除外,该地址应修改为通过预期的总线/链路进行路由。当 MCTP 网桥将消息从输入端口转发到输出端口时,它会将目标从地址替换为目标总线上的目标从地址,并将源从地址替换为网桥的从地址。
MCTP SMBus/I2C 桥接器应重新计算 PEC 字节,以考虑源和目标从地址字段的变化。
在不同媒介之间桥接时,使用类似的过程。桥接会更改物理寻址和报头信息,以匹配目标总线的要求,并且任何数据包级完整性检查信息也会更新。
6.5 MCTP 支持发现
所有支持 MCTP 端点和特定 SMBus/I2C 接口的 SMBus 获取 UDID 命令的 SMBus 设备(即具有支持 ARP、固定和可发现或固定 - 不可发现接口的设备)都需要通过get UDID 命令使其 MCTP 支持可被发现。为此,端点应在 Get UDID 命令的 Interface 字段中的第 5 位(ASF 位)中返回值 1b。
一旦指示对 ASF 的支持,就可以向设备发出 MCTP 控制消息(例如,获取 MCTP 版本支持),以确定它是否支持 MCTP。MCTP 数据包的 SMBus 命令字节使用 DMTF 分配给 MCTP 使用的值,并且不会与用于 ASF 的值重叠。这样,就可以查询指示 ASF 支持的旧设备以获取 MCTP 支持,而不会发生冲突。这在 6.6 中有更详细的描述。不支持 Get UDID 命令的设备需要将其对 MCTP 的支持配置到总线所有者中,如 6.6 中所述。
I2C 设备还可以支持 SMBus 协议和命令,成为支持 ARP 的设备,也可以作为 MCTP 设备发现。这对于使用 MCTP 的热插拔 I2C 设备是必需的。
6.6 支持固定地址设备
MCTP 总线所有者应包括非易失性选项,以记录他们拥有的 SMBus/I2C 总线上的固定地址设备使用的地址,以及哪些设备支持 MCTP。
对于非 MCTP 设备,MCTP 总线所有者需要此信息,以了解在为总线执行 SMBus ARP 时应避免使用哪些固定地址。(或者,总线所有者可以配置允许总线所有者分配的 SMBus 从地址范围。
对于 MCTP 设备,总线所有者需要此信息来执行 EID 分配,如果总线所有者也是 MCTP 网桥,则需要路由表初始化和操作。
对于不支持 Get UDID 命令的固定地址 MCTP 设备(即不支持 ARP 的设备),还需要为总线所有者配置信息,以将设备标识为支持 MCTP。
对于支持 SMBus Get UDID 命令的固定地址设备(即具有 ARP-capable、Fixed and Discoverable 或 Fixed-Not Discoverable SMBus 接口的设备),总线所有者可以使用 6.5 中描述的发现方法发现设备是否支持 MCTP,也可以在提供固定地址设备的从地址信息的同时配置此信息。
建议作为 MCTP 总线所有者的通用设备允许配置为为其拥有的每条 SMBus/I2C 总线支持至少 16 个不同的固定地址设备。此数量将包括 MCTP 和非 MCTP 设备。
6.7 支持的媒介
此物理传输绑定旨在与 DSP0239 中指定的媒介一起使用。表 2 引用了 DSP0239 中的相关物理介质标识符。如有任何矛盾,DSP0239 应作为规范性定义。此规范不涉及将此绑定与其他类型的物理介质一起使用。应支持至少 1 个 表2 中列出的物理介质标识符,以符合此规范。
表 2 – 支持的媒介
物理介质标识符 | 描述 |
0x01 | 兼容 SMBus 100 kHz |
0x02 | 兼容 SMBus + I2C 100 kHz |
0x03 | 兼容 I2C 100 kHz |
0x04 | 兼容 I2C 400 kHz |
0x05 | 兼容 SMBus + I 2C 1 MHz |
6.8 MCTP 控制消息的物理地址格式
表 3 中所示的地址格式应用于 MCTP 控制命令,这些命令需要为使用此传输绑定的总线返回物理地址参数,该总线与 6.7 中列出的受支持媒介类型之一一起使用。这包括 Resolve Endpoint ID(解析端点 ID)、Routing Information Update(路由信息更新)和 Get Routing Table Entries(获取路由表条目)命令等命令。
表 3 — 物理地址格式
格式大小 | 布局和描述 |
1 byte | [7:1] 从地址位 [0] 0b |
6.9 获取端点 ID 介质特定信息
表 4 中所示的介质特定信息应用于响应“Get Endpoint ID MCTP 控制”消息中返回的介质特定信息字段。
表4 – 介质特定信息
描述 |
[7:1] 保留 [0] 公平性仲裁支持(请参阅 6.13) 0b = 不支持 1b = 支持 |
6.10 总线所有者地址
为了成为 SMBus Notify ARP Master 协议交易的目标,MCTP 总线所有者应配置为在 SMBus 主机从地址访问。如果总线实现不包含任何需要动态分配其从地址的 MCTP 设备,则无需使用此配置。有关更多信息,请参阅 6.11.4。
总线所有者可以将不同的第二个从地址用于所有其他 MCTP 通信功能。
6.11 总线地址分配
本条款描述了使用 SMBus/I2C 作为通信介质的 MCTP 端点之间通信的配置、设置和操作。
6.11.1 从地址
SMBus/I2C 上的每个器件都应有一个从地址,作为总线主控器交易的目标。MCTP 传输协议仅利用主写入事务在 MCTP 端点之间传输 MCTP 数据包。为了让端点 “A” 向端点 “B” 发送 MCTP 数据包,端点 A 应控制总线并向端点 B 的从地址发出 Block-Write 交易。同样,对于端点 B 向端点 A 发送 MCTP 数据包,它应控制总线并向端点 A 的从地址发出 Block-Write 交易。因此,MCTP 数据包的双向传输要求通信的两端都有从地址。
设备对从地址的支持可以有两种常规类型:固定或可分配。具有可分配地址(也称为“ARP-capable”或“ARP-able”)的设备可以使用 SMBus ARP。将从地址分配给支持 ARP 的设备使用的实体称为“ARP 主站”。
总线可以包括固定地址设备和支持 ARP 的设备的组合。大多数固定地址器件不包括发现机制,SMBus 和 I2C 都不需要。因此,对于支持 ARP 设备(例如 SMBus 到 PCI/PCIe 连接器)的通用总线实现,ARP 主设备需要知道固定地址设备使用的地址范围,以便它不会为支持 ARP 的设备提供与固定地址设备冲突的地址。
此传输绑定允许非 MCTP 设备(固定地址和支持 ARP)驻留在用于 MCTP 设备的同一总线段上。因此,从属地址的使用和分配应与预先存在的设备兼容。为此,使用以下方法管理支持 MCTP 的总线上的设备。
6.11.2 知名和保留的从属地址
SMBus 和 I2C 规范定义了某些从地址,这些地址要么应由设备避免使用,要么被保留(不用作通用设备从地址),因为这些地址与 MCTP 使用的功能相关。表 10 中列出了这些地址。
6.11.3 为设备制造商提供的固定地址建议
MCTP 可用于典型的计算机系统应用,其中主板/底板可能来自一个供应商,机箱可能来自另一个供应商,并且可能来自另一个供应商的附加模块。
6.21 MCTP over SMBus/I2C 协议抗锯齿(反混叠)
MCTP over SMBus 旨在允许一个端点支持多种协议,例如 ASF、IPMI 或具有单个从地址的传统设备特定协议。以下条款描述了有助于支持在还需要支持其他 SMBus 或 I2C 协议的设备中通过 SMBus 实施 MCTP 的条款。
6.21.1 IPMI
SMBus 的 IPMI 协议 (IPMI over SMBus) 和 I2C (Intelligent Platform Management Bus, IPMB) 使用事务的第四个字节作为源从地址字节,SMBus 上的 MCTP 也是如此。但是,IPMI 协议要求该字节的最低有效位为 0b,而 SMBus 上的 MCTP 要求该位为 1b。因此,需要区分 MCTP over SMBus 和 IPMI SMBus/I2C 协议的设备可以使用该位来实现。
6.21.2 ASF
SMBus 上的 MCTP 使用 ASF 规范保留值 0x0F 作为命令字节。因此,使用SMBus块写入协议的ASF定义的命令可以使用命令字节值与SMBus块写入上的MCTP区分开来。如有必要,可以根据事务的长度将其他 ASF SMBus 写入事务(例如用于传统传感器和控制访问的事务)与 MCTP 数据包区分开来。ASF 传输都更短。
6.21.3 将 MCTP 与传统的 SMBus 功能集成
此条款描述了一些可能的选项,如果 MCTP 被添加到设备中,该设备还应支持使用非 MCTP SMBus 接口的功能。
通常,如果传统的 SMBus 操作不需要生成或接受使用 MCTP 值 0x0F 的写入事务,那么这些功能与 MCTP 共存应该没有问题。
如果 SMBus 设备当前将 0x0F MCTP 命令值用于特定于设备的用途,并且它希望使用相同的从地址,则可以执行以下操作:
- 特定于设备的命令可以移动到不同的命令值。如果可以支持,这通常是最直接的方法。
- 根据特定于设备的命令定义,可以根据其他差异(如命令的总长度或命令的第 4 个或第 5 个字节中的值之间的差异)来区分命令数据包和 MCTP 数据包。(MCTP 始终使用 1b 作为第四个字节的最低有效位,第五个字节保存 Header Version 的固定 4 位值。
- 该设备可以在与传统功能不同的从地址上通过 SMBus 实现 MCTP。