
图:接口工作流
识别接口状态
默认接口状态表示启动期间各接口的状态。要识别接口状态,请成功注册接口并获取已启用接口的列表。获取启动日志
要获取设备的启动日志,请执行以下操作:- 在 permissive 模式下打开 SSH shell,或使用 ADB shell。有关如何运行 SSH 的更多信息,请参阅 Use SSH 部分。
- 通过运行以下命令获取已启用接口的日志。
输出:
- 连接 UART 串行端口以登录控制台。
列出设备上已启用的接口
要获取已启用接口的列表,请执行以下操作:- 对于 UART,运行以下命令。
输出:
- 对于 I2C,运行以下命令。
将显示以下输出。
- 默认情况下,SPI 未启用。要启用 SPI,请参阅 SPI software device tree configuration。要验证 SPI 是否已启用,请运行以下命令。
将显示以下输出。
- 对于 PCIe,请获取枚举日志。有关 PCIe 探测日志的更多信息,请参阅 PCIe-related configurations 和 QPS615 switch support。
使用 Linux 内核加载 QUP v3 串行引擎固件
本文档介绍使用 Linux 内核的 QUP v3 串行引擎固件加载机制。它描述了从基于 TrustZone 的架构(协议分配固定且灵活性有限)到基于 Linux 的方式的转变,后者通过设备树配置实现动态协议分配、更轻松的调试和简化的开发。QUP v3 包含多个串行引擎,可配置为以下协议:- I2C
- SPI
- UART
默认配置
每个串行引擎的默认配置(包括所选的数据传输模式和所有权)位于_/TZ.XF.5.0/core.tz/2.0/settings/buses/qup\_accesscontrol/qupv3/config/lemans/QUPAC\_Access.c_ 文件中。
在默认配置中,Linux 拥有所有串行引擎。
加载固件
固件文件位于 /lib/firmware/qcom/<target-name>/qupv3fw.elf。-
通过检查平台设备树中的串行引擎节点来识别可用的串行引擎。串行引擎的名称和编号因平台而异。请使用平台定义的节点标签;例如:
注意您可以根据接口需求选择所需的协议。
- I2C:传感器、EEPROM、PMIC
- SPI:显示屏、闪存、ADC
- UART:控制台、GPS、蓝牙
-
通过在设备树文件中添加或修改串行引擎节点来配置设备树。
- I2C 配置示例:
- SPI 配置示例:
- UART 配置示例:
可选:为高吞吐量设备启用 GSI DMA。
- I2C 配置示例:
-
切换串行引擎协议。例如,从 I2C 切换到 SPI。
-
原始 I2C 配置:
-
新配置(SPI)
在启用 SPI 之前请先禁用原有的 I2C 节点,因为一个串行引擎同一时间只能使用一种协议。
注意请使用更新后的设备树重新构建并部署软件镜像,然后使用更新后的镜像启动设备。 -
原始 I2C 配置:
- 驱动程序实现的主要补丁系列:
- https://lore.kernel.org/all/20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com/
- 主要更改:固件加载基础设施、GSI DMA 支持、协议初始化、错误处理改进
- 设备树绑定和示例:
| 属性 | 类型 | 说明 | 是否必需 |
|---|---|---|---|
status | 字符串 | 启用/禁用 SE(okay/disabled) | 是 |
qcom,enable-gsi-dma | 布尔值 | 启用 GSI DMA 模式 | 否 |
clock-frequency | u32 | I2C 时钟频率(Hz) | 否 |
spi-max-frequency | u32 | SPI 最大频率(Hz) | 否 |
pinctrl-names | 字符串数组 | 引脚控制状态名称 | 建议 |
pinctrl-0 | phandle | 默认引脚配置 | 建议 |
- I2C
- 标准模式:100 kHz
- 快速模式:400 kHz
- 快速模式增强版(Fast mode plus):1 MHz
- SPI
- 低速:1–10 MHz
- 中速:10–50 MHz
- 高速:50–100 MHz
数据传输模式
QUP v3 串行引擎支持两种主要的数据传输模式:FIFO 模式和 GSI DMA 模式。FIFO 模式是默认模式,最适合小型、频繁的传输,配置需求极少。通用软件接口(GSI)DMA 模式利用 DMA 通道进行批量数据传输,需要额外配置。下表总结了每种模式的主要特性和适用条件。 表:FIFO 和 GSI DMA 模式特性| 属性 | FIFO 模式 | GSI DMA 模式 |
|---|---|---|
| 数据路径 | 使用内部 FIFO 缓冲区 | 使用 GSI DMA 模式 |
| 最适合 | 小型、频繁的传输;简单的设备通信 | 大型或批量传输;高吞吐量设备(触摸屏、显示屏) |
| 开销 | 较低的开销 | 较高的设置开销,但可为大型传输卸载 CPU 负担 |
| 配置 | 默认模式;无需特殊配置 | 需要在设备树中添加 qcom,enable-gsi-dma; 属性 |
| DMA 通道使用 | 不需要 | 需要可用的 DMA 通道;受平台限制 |
| 性能 | 大数据吞吐量较低;低延迟 | 大数据吞吐量较高;CPU 效率高 |
| 何时使用 | 当 DMA 通道有限,或用于低延迟/小型传输时 | 用于传输大小 > 32 字节,或批量/高速数据 |
| 限制 | 不适合大型或高速传输 | 受 DMA 通道数量限制;并非所有 SE 都支持 GSI DMA |
| 设备树示例 | 省略 qcom,enable-gsi-dma; 属性 | 添加 qcom,enable-gsi-dma; 属性 |
| 调试 | 标准 Linux 调试工具;内核日志 | 与 FIFO 类似,但还包括 DMA 分配日志 |
- 使用 GSI DMA 模式的 I2C
- 使用 GSI DMA 模式的 SPI
使用场景
-
多个串行引擎使用不同协议
-
多个 QUP 实例:
QUP 实例的名称和串行引擎分配因平台而异。请参考平台设备树以获取正确的节点标签。
-
引脚复用:确保正确的引脚配置:
-
性能优化
表:模式选择
模式 何时使用 GSI DMA 模式( qcom,enable-gsi-dma;)经常传输大小 > 32 字节、高吞吐量设备(触摸屏、显示屏)、批量数据传输、CPU 效率至关重要 FIFO 模式 小型、频繁的传输,低延迟要求,可用 DMA 通道有限,简单的设备通信
故障排查
- 调试命令
- 内核日志
- 设备树验证
| 问题 | 症状 | 解决方案 |
|---|---|---|
| 固件加载失败 |
|
|
| 串行引擎未探测 |
|
|
| 协议冲突 |
| 确保每个串行引擎只启用一种协议。 |
| DMA 分配失败 |
|
|
| 引脚复用冲突 |
|
|
启用所需接口
要启用接口,请执行以下操作:- 对于 UART,请参阅 UART software device tree configuration 部分。
- 对于 SPI,请参阅 SPI software device tree configuration 部分。
- 对于 I2C,请参阅 I2C software device tree configuration 部分。
- 对于 PCIe,请参阅 PCIe software driver configuration 部分。
- 对于 USB,请参阅 Configure USB boot loader 部分。
验证接口状态
要验证各接口是否正常工作,请执行以下操作:- 对于 UART,请参阅 Verify UART interface 部分。
- 对于 SPI,请参阅 SPI verification 部分。
- 对于 I2C,请参阅 Verify I2C interface 部分。
-
对于 PCIe,使用以下命令验证已连接的端点。
将显示以下输出。注意输出可能因底层硬件而异。
-
对于 USB,加载 USB 固件以检测设备连接,并按如下方式验证设备和主机:
- 设备:连接 USB Type-C 端口,并在主机 PC 上验证枚举日志。
将显示以下输出。
- 主机:连接鼠标或 U 盘等 USB 设备,并使用以下命令验证设备检测。
将显示以下输出。
- 设备:连接 USB Type-C 端口,并在主机 PC 上验证枚举日志。

