PCIe配置与VPD管理 - 页码153
深入分析:PCIe Memory Read 和 PCIe Memory Write
PCIe Memory Read(图159、图160 和图161)
PCIe Memory Read 命令允许管理控制器读取与 NVMe 控制器相关联的 PCIe 内存空间。该命令使用 PCIe Request Dwords 0、1 和 2 字段。
- PCIe Request Dword 0(图159):
- Base Address Register (BAR):指定要读取的 PCIe 内存空间的基本地址寄存器(BAR)。对于 64 位的 BAR,指定该字段的值应该对应于 BAR 的低 32 位。
-
Length (LENGTH):指定要读取的字节数,即读取的数据长度。
-
PCIe Request Dword 1(图160):
-
Offset Lower (OFFSETL):指定内存空间读取操作的低 32 位偏移量。
-
PCIe Request Dword 2(图161):
- Offset Upper (OFFSETU):指定内存空间读取操作的高 32 位偏移量。
工作原理: - Base Address Register (BAR):指定要读取的 PCIe 内存区域的起始位置。 - Length:指定读取的字节数。 - Offset Lower/Upper (OFFSETL/OFFSETU):用来表示内存空间中的偏移量,支持 64 位偏移。
错误处理: - 如果 BAR 字段没有对应到指定的 NVMe 控制器,或者指定的 Base Address Register 不属于内存区域,管理端点将响应“无效参数错误”。 - 如果 Offset + Length 超出了 BAR 指定的地址范围,也会返回“无效参数错误”。
PCIe Memory Write(图162、图163 和图164)
PCIe Memory Write 命令允许管理控制器向与 NVMe 控制器相关联的 PCIe 内存空间写入内容。该命令使用 PCIe Request Dwords 0、1 和 2 字段。
这一命令的处理方式类似于 PCIe Memory Read 命令,差别在于 Request Data 字段包含了要写入的数据,而不是读取的内容。
- PCIe Request Dword 0、1 和 2 中的 Length 和 Offset 字段用于确定写入操作的内存区域和数据长度。
- 数据写入 PCIe BAR 指定的内存区域,并根据 Offset 字段定位数据写入的起始位置。
错误处理: - 如果 Base Address Register 字段不对应 NVMe 控制器的内存空间,或者 Offset + Length 超出内存地址范围,将返回“无效参数错误”。
总结
- PCIe Memory Read 和 PCIe Memory Write 允许管理控制器对 NVMe 控制器的 PCIe 内存进行精确的读取和写入操作。
- 使用 Base Address Register (BAR)、Length 和 Offset 来精确控制操作的内存区域和数据的偏移量。
- 错误处理机制确保了如果读取或写入操作超出了有效内存范围,系统能够响应错误。
这些命令的使用确保了可以安全、准确地访问和管理 PCIe 内存区域。如果你需要更多细节或对某一部分的进一步解释,随时可以问我!