概述
主要特性
- 双向两线制串行总线(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 - 总线卡在低电平 —— 对设备重新上电或发送时钟脉冲以释放总线
Invalid Protocol 错误
Invalid Protocol 错误
症状:步骤:
- 确认板卡类型:
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)配置,确认电源域依赖关系,并添加正确的挂起/恢复处理程序。

