Skip to main content
集成电路间总线(I²C)是一种双向两线制串行总线,用于集成电路之间的短距离通信,设备通过分配的总线地址进行通信。

概述

主要特性

  • 双向 2 线串行总线(SDA + SCL)
  • 7 位或 10 位目标寻址
  • 支持多控制器模式

工作模式

通信时序

**数据包结构:**起始 → 地址帧(7/10 位)→ R/W 位 → ACK/NACK → 数据帧(8 位)→ 停止 信号规则:
  • 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

调试

启用调试日志

故障排除

**原因:**缺少上拉电阻、从设备无响应、时钟频率错误、总线卡在低电平。在 SDA/SCL 上添加 4.7 kΩ 上拉电阻;在设备树中调整 clock-frequency
症状:geni_i2c a94000.i2c: Invalid proto 1确认 QUPAC_Access.c 中设置了 QUPV3_PROTOCOL_I2CAC_HLOSbAllowFifo=TRUEbLoad=TRUE
确认 CONFIG_QCOM_GPI_DMA=m;检查设备树中的 dmasdma-names要在不使用 DMA 的情况下测试:

快速诊断命令

资源