概述
关键特性
- 双向 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 初始正常,挂起/恢复后失效
检查运行时电源管理(runtime PM)配置,验证电源域依赖关系,并添加适当的挂起/恢复处理程序。

