《MODEM HOST INTERFACE》,第二章:MHI接口架构
1. 接口架构
MHI 基于以下关键特性作为支持 PCIe 总线的扩展接口:
- 通过内存映射(MMIO),从主机访问设备寄存器
- 从设备访问主机系统内存
- 设备向主机发送中断(MSI)
下表 定义了三个接口内存空间,它们构成了 MHI 的基础模块。
MHI的内存地址布局如下图所示:

1.1 MMIO(内存映射输入输出)概述
内存映射输入输出(MMIO,Memory-mapped I/O)是一种将外设寄存器映射到主机内存地址空间的方法,使主机能够通过标准的内存访问指令(如读取和写入内存)与外设进行通信。
在MMIO中,外设的寄存器被映射到主机的内存地址范围内。主机可以使用常规的内存访问指令来读取或写入这些寄存器,从而与外设进行交互。这种方法简化了硬件设计,因为主机无需使用专门的I/O指令或独立的I/O总线即可访问外设。MMIO的优势包括:
- 简化硬件设计:主机可以使用标准的内存访问指令与外设通信,无需额外的I/O指令或独立的I/O总线。
- 提高性能:通过直接内存访问,减少了CPU与外设之间的交互延迟。
- 统一的访问机制:主机可以使用相同的内存访问机制来访问内存和外设,简化了编程模型。
然而,MMIO也有一些限制:
- 地址空间限制:主机的内存地址空间需要预留一部分用于映射外设寄存器,这可能会限制可用的内存空间。
- 缓存一致性:由于外设寄存器的访问可能不经过缓存,可能需要采取措施确保缓存一致性。
PCIe 配置空间中的 BAR-0 指向 MHI 寄存器接口(MMIO 寄存器)的基地址。
以下表展示了 MMIO 组件:
1.2 数据结构
下表 列出了位于主机系统内存(主机 DRAM)中的接口数据结构:
1.3 PCIe 物理功能
该设备仅使用一个 PCIe 物理功能来支持 MHI,功能号为 0。MHI/BHI MMIO 寄存器映射到 BAR-0。
1.4 MHI 通道
MHI 通道是主机与设备之间的逻辑单向数据管道。MHI 中的通道概念类似于 USB 中的端点。
MHI 最多支持 256 个通道,但具体设备实现可能并不会用到全部通道。
部分通道用于控制或管理,其他通道则用于数据传输,包括用户进程数据(如 IP 包、位置信息以及其他协议)。
两个单向通道可以组合成一个双向数据管道,即一个用于发送(主机到设备),另一个用于接收(设备到主机)。
1.4.1 通道方向
通道表示通过 PCIe 链路传输数据的方向,可能是入站或出站:
- 入站:表示数据从设备传输到主机
- 出站:表示数据从主机传输到设备
通道方向由通道上下文结构中的通道类型字段(CHTYPE)指定。
1.4.2 通道 ID
MHI 定义了一个 8 位通道 ID(范围 0~255)作为通道的唯一索引。通道 ID 可能包含在数据消息中,用于让主机和设备双方识别通道。通道 ID 用于索引通道上下文数组。
1.5 传输
由传输描述符(TD)定义的“传输”负责组织主机和设备之间的数据传输。传输描述符中包含数据大小及数据所处或接收的内存地址。一个传输可以由多个传输描述符串联而成,以便处理更大规模的传输;当然,如果数据量较小,也可以只使用一个传输描述符来完成传输。

主机通过为传输环分配并初始化一个内存缓冲区来定义传输环。主机会在传输环的地址处设置写指针和读指针,并将这些指针存储到相应的通道上下文中。
当写指针与读指针相同时,传输环为空。读指针用于标识设备将要执行的下一个传输描述符(TD)地址;写指针用于标识主机可以放置新传输描述符(TD)的下一可用位置地址。
传输环的长度在通道上下文数据结构中定义。
1.5.1 事件环
从设备到主机的事件以事件环的形式组织,并在事件描述符(ED)中定义。事件环是位于主机内存中的事件描述符(ED)数组。

1.5.2 环元素
环元素是一种数据结构,用于在主机内存和设备之间(或反向)传输单个数据块。
传输环元素类型通常包含一个指向缓冲区的指针、缓冲区大小以及其他控制信息。其他类型的环元素可能仅包含控制和状态信息。
对于单一缓冲区的操作,一个环描述符只由一个环元素组成。对于需要多个缓冲区的操作(如分散/聚集传输),可以将多个元素链接起来形成更长的描述符。
长度字段用于标识缓冲区指针所引用的缓冲区大小。

如
上图所示,传输环中可能包含多个待处理的传输描述符(TD)。写指针指示了可以插入新工作项(TD)的下一个可用位置;读指针则指示设备将要执行的传输环中的下一个 TD。
传输完成后,其长度和状态会报告到事件环中。事件环的管理方式类似。
1.5.3 分散/聚集传输
通常,分散/聚集(scatter/gather)机制用于将不连续的内存缓冲区拼接为连续的逻辑数据传输。在 PCIe 环境下,主机可以使用多个环元素构建一个 TD,以定义逻辑上连续的内存传输。
对于不连续的数据传输,称为分散/聚集传输(scatter/gather transfers)。可以通过链接多个元素提供更多指针,以描述分散/聚集传输所需的全部信息。
分散/聚集传输的总大小等于该 TD 中所有环元素长度字段之和。

上图显示,除最后一个环元素外,该传输描述符(TD)中的所有环元素的链位(chain bit)都被设置为 1。设备会按顺序从读指针(顶部)到写指针(底部)依次解析 TD 中的环元素。通过此操作,能够将来自主机内存中不同缓冲区的数据拼接为一个连续的数据块。
1.6 命令接口
设备提供了一个命令环接口,供主机管理调制解调器(modem)接口。命令描述符(CD)用于命令环中,描述符中包含特定的命令及其参数。
命令环的操作方式类似于写(出站)传输环。主机发出命令,并将命令描述符添加到命令环中,然后设置命令门铃寄存器(command doorbell register)。
设备会在主事件环(primary event ring)中添加一个事件,用于通知主机某条命令已经完成。设备按照命令在命令环中的排队顺序依次执行这些命令。
下表展示了MHI命令: