当前位置: 首页 > news >正文

《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命令:

 

相关文章:

  • C++蓝桥杯基础篇(六)
  • 解锁 indexOf、substring 和 JSON.stringify:从小程序图片上传看字符串魔法 ✨
  • Flutter_学习记录_本地存储数据
  • 数据集笔记:新加坡traffic 照片
  • 虚拟化园区网络部署指南
  • 第十三届蓝桥杯大赛软件赛决赛C/C++ 大学 B 组
  • Linux下的网络通信编程
  • 2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(四级)真题 + 答案
  • 手撸大模型-基础篇 简单线性回归模型预测房价
  • 一周一个Unity小游戏2D反弹球游戏 - 球板的发球
  • 【03】STM32F407 HAL 库框架设计学习
  • 介绍微信小程序中页面的生命周期函数和组件的生命周期函数
  • Python:列表的定义和增删改查,推导式与嵌套
  • 蓝桥杯单片机第16届4T模拟赛三思路讲解
  • 计算机毕业设计SpringBoot+Vue.js汽车资讯网站(源码+文档+PPT+讲解)
  • Java支持多继承么,为什么?
  • 4-3自定义加载器,并添加功能
  • 本地部署大模型
  • 《动手学习深度学习》的笔记,将会持续更新。
  • vue3:三项目增加404页面
  • 建设部网站13清单/怎样能在百度上搜索到自己的店铺
  • 摄影做网站/郑州做网络营销渠道
  • 四川住房城乡建设部网站/百度联盟
  • 如何做销售直播网站/新品上市怎么推广词
  • 品牌设计全案/seo培训学院官网
  • 电子书推送网站怎么做/上海快速优化排名