管理端点缓冲区操作 - 页码193
NVMe-MI 1 min read

管理端点缓冲区操作 - 页码193

Blog Author

你正在深入分析 NVM Express® Management Interface Specification, Revision 2.0 中关于 SMBus 读取操作I2C 读取操作 的多个示例。这里的操作描述了如何通过 SMBusI2C 协议读取设备数据,以及如何进行 仲裁 操作,特别是在多个设备共享同一 SMBus 通道 的情况下。以下是对这些示例的详细分析,以帮助你理解它们的工作原理和应用场景。

一、SMBus 块读取示例

示例 2:SMBus 块读取驱动器的静态数据(VID 和序列号)

在这个例子中,主机SMBus 地址 D4h 发送写命令,并开始读取驱动器的 静态数据(厂商 ID(VID)和序列号)。数据传输按以下步骤进行:

  1. 启动传输:主机发送 SMBus 地址 D4h,然后传送 命令代码 08h
  2. 读取数据
  3. 设备返回 VID(例如 1234h)和 序列号(例如 AZ123456),这些数据以字节形式逐步传输。
  4. 数据块传输:在此过程中,主机与设备之间的交互是通过 确认(ACK)非确认(NACK) 信号来完成的,确保数据正确传输。

过程概述: - 读取 序列号厂商 ID。 - 在整个读取过程中,主机和设备通过 ACK/NACK 信号保证数据的正确性。

示例 3:SMBus 发送字节以重置仲裁位

此示例展示了如何通过 SMBus 向设备发送字节来 重置仲裁位(Arbitration bit),以便多个设备共享同一 SMBus 通道 时进行仲裁。

  1. 发送字节:主机发送字节 FFh 来清除所有 管理端点 中的 仲裁位
  2. 仲裁过程
  3. 当多个设备在同一地址上竞争时,主机通过 I2C 读取 来执行仲裁操作。
  4. 设备会根据响应内容判断哪个设备优先获取访问权限。
  5. 最终,仲裁成功的设备会将仲裁位设置为 1,表示它赢得了仲裁,并且其他设备将在下次读取时优先响应。

示例 4:I2C 读取状态和厂商内容

在此示例中,主机使用 I2C 协议读取多个驱动器的状态信息,包括 厂商信息序列号。I2C 允许跨越 SMBus 块边界 进行读取,因此驱动器的序列号信息可以跨越多个数据块。

过程概述: - I2C 读取SMBus 块读取 的基础上,继续读取多个数据块(例如,序列号和健康状态)。 - 设备返回的每个字节都是按照 ACK 信号发送的,确保传输的完整性。

二、SMBus 仲裁操作

仲裁机制概述

多个设备 共享同一 SMBus 通道 时,必须进行 仲裁 来决定哪个设备首先获得访问权限。以下是 SMBus 仲裁 的工作流程:

  1. 主机发送字节:主机通过 SMBus 写命令 发送字节 FFh 来清除所有设备的 仲裁位,确保新的仲裁周期开始。
  2. I2C 读取:主机通过 I2C 读取 从设备获取数据,在读取过程中进行仲裁。设备会根据仲裁结果设置 仲裁位
  3. 如果设备 发送 0 字节 而其他设备发送 1,则该设备获胜并设置 仲裁位为 1
  4. 重复读取:主机继续读取数据,直到 仲裁位为 1,表示设备已经获得优先访问权。

仲裁优先级

  • 警告设备优先:在 仲裁 过程中,如果有设备处于 警告状态(例如温度过高或其他问题),这些设备会在仲裁中优先处理。这是因为 0 在仲裁中胜出,因此当设备存在警告时,它会优先响应读取请求。

注意事项

  • 在多个设备共享 SMBus 时,必须确保读取操作不会 短暂读取 相似的数据,避免产生仲裁错误。
  • 如果多个设备返回相同的数据,则会触发重新仲裁,直到能够确定哪一个设备优先响应。

三、总结与应用

  1. SMBus 块读取 提供了一种简单的 数据读取 机制,适用于获取设备的 静态信息(如 VID序列号)以及 健康状态 等信息。它的优势在于使用 SMBus 协议进行通信,适用于简单的 管理任务

  2. I2C 读取操作 扩展了 SMBus 块读取 的功能,允许跨越多个 数据块 进行读取。这对于需要从多个设备或多个数据块中获取信息的场景非常有用。

  3. 仲裁机制 使得 多个设备共享同一 SMBus 通道 时能够正确管理访问权限,确保设备能够根据 警告状态仲裁规则 正确响应请求。它在 多设备环境 中保证了 数据读取的稳定性系统的可靠性

  4. 应用场景

  5. 多设备存储系统嵌入式系统 中,使用 SMBusI2C 进行 设备管理,确保设备能够在共享 通道 的情况下有序地进行通信。
  6. 高可用性系统 中,仲裁机制能够确保 警告设备 优先响应,避免因设备故障而影响系统性能。

这些操作和机制确保了 设备管理 的稳定性,并为 系统恢复设备健康监控 提供了可靠的支持。如果你有任何关于 SMBusI2C 读取操作 的问题,或希望更深入了解其实现,随时告诉我!