跳到主要内容

I2C通讯

I2C(Inter - Integrated Circuit) 是一种通用的总线协议。开发板的 I2C 控制器支持下列功能

  • 兼容 I2C 与 SMBus 总线
  • 支持主模式下的 I2C 总线
  • 软件可编程时钟频率支持到 400kbps, 最高可达 1000kbps
  • 支持 7 位和 10 位寻址模式
  • 一次中断或轮询至多 32 个字节的数据传输
Net nameNUMNUMNet name
I2C2_SDA_M4GPIO1_A0_3V312GPIO4_D5_3V3
I2C2_SCL_M4GPIO1_A1_3V334GPIO4_D4_3V3
I2C4_SDA_M3GPIO1_A2_3V356GPIO4_D3_3V3I2C8_SDA_M0
I2C4_SCL_M3GPIO1_A3_3V378GPIO4_D2_3V3I2C8_SCL_M0
GPIO1_B4_3V3910GPIO1_C6_1V8
GND1112GND
GPIO1_B3_3V31314SARADC_VIN2
GPIO1_B2_3V31516VCC3V3_SYS
GPIO1_B1_3V31718VCC12V_DCIN
VCC5V0_SYS1920VCC12V_DCIN

使用 i2c-tools 工具包提供了一些非常方便的工具来对系统的 I2C 总线进行调试

# 查看开启的 i2c 总线
ls /dev/i2c-*
# 安装i2c-tools工具进行i2c总线调试
sudo apt -y install i2c-tools
# 需要超级用户权限方可操作
# 扫描在 i2c-2 上的器件情况
i2cdetect -a 2

# 读取0x68设备的全部寄存器的值
i2cdump -f -y 2 0x68

# 读取指定 IIC 设备的某个寄存器的值,如下读取地址为 0x68 器件中的 0x01 寄存器值。
i2cget -f -y 2 0x68 0x01

# # 写入指定 IIC 设备的某个寄存器的值,如下设置地址为 0x68 器件中的 0x01 寄存器值为 0x6f
i2cset -f -y 2 0x68 0x01 0x6f

其他部分可以参考SDK中kernel 下面的 Documentation/i2c/dev-interface 文档