概述
主要特点
- 双向 2 线串行总线(SDA + SCL)
- 7 位或 10 位目标寻址
- 支持多控制器模式
工作模式
通信时序


- SCL 为高电平时:SDA 必须保持稳定
- SCL 为低电平时:SDA 可以变化
- 例外:START 和 STOP 序列可以在 SCL 为高电平时改变 SDA
按子系统划分的传输模式
接口组件
设备树源文件
API
软件设备树配置
Linux 设备树示例
QUPAC 访问控制
确保在QUPAC_Access.c 中设置了正确的协议:
配置步骤
1
启用内核配置
编辑
kernel_platform/kernel/arch/arm64/configs/qcom_defconfig:2
在设备树中启用 I2C 节点
3
编译并烧写
编译内核和设备树变更,然后将镜像加载到设备。
验证
检查设备节点
使用 i2c-tools
调试
启用调试日志
启用 I2C 跟踪
检查时钟与 GPIO
故障排查
未检测到 I2C 设备
未检测到 I2C 设备
症状: 检查内核模块:检查时钟:检查 GPIO pinmux:
i2cdetect 未显示任何设备;/dev/i2c-X 不存在。检查设备树状态:I2C 传输超时
I2C 传输超时
症状:原因与解决方法:
- 缺少上拉电阻 — 在 SDA/SCL 上添加 4.7 kΩ 上拉电阻
- 从设备无响应 — 确认从设备电源和复位;检查初始化时序
- 时钟频率错误 — 在设备树中调整
clock-frequency - 总线卡死在低电平 — 对设备重新上电,或发送时钟脉冲以释放总线
协议无效错误
协议无效错误
症状:步骤:
- 确定板卡类型:
dmesg | grep "CDT Version" - 在
QUPAC_Access.xml中查找平台 ID - 确认
QUPAC_Access.c中设置了QUPV3_PROTOCOL_I2C、AC_HLOS、bAllowFifo=TRUE、bLoad=TRUE - 如做了修改,重新构建 TEE 固件
数据损坏
数据损坏
症状: 读取的数据不正确;间歇性失败。解决方法:
- 降低总线速率
- 缩短线缆长度;添加 22–100 Ω 串联电阻
- 在设备附近添加去耦电容
- 使用示波器验证建立时间和保持时间
DMA 传输失败
DMA 传输失败
症状:解决方法: 确认
CONFIG_QCOM_GPI_DMA=m;检查 DMA 通道分配;确保内存对齐满足 DMA 安全要求。在不使用 DMA 的情况下测试:时钟拉伸 / 慢速从设备超时
时钟拉伸 / 慢速从设备超时
I2C 初期正常但在挂起/恢复后失败
I2C 初期正常但在挂起/恢复后失败
检查运行时 PM 配置,验证电源域依赖关系,并添加正确的挂起/恢复处理程序。

