I2C 接口
1. I2C引脚
在40PIN引脚中有两组I2C可使用,分别是i2c-3,i2c-5

I2C | 引脚 | 功能 |
---|---|---|
I2C3-SCL | 5 | I2C3 的时钟信号线 |
I2C3-SDA | 3 | I2C3 的数据线 |
I2C5-SCL | 28 | I2C5 的时钟信号线 |
I2C5-SDA | 27 | I2C5 的数据线 |
2. I2C接口使能
可以在arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-linux.dts中使能I2C3和I2C5(这两个接口默认已经使能)
&i2c3{
status = "okay";
};
&i2c5{
status = "okay";
};
3. 挂载I2C设备
在注册 I2C 设备时,需要结构体 i2c_client 来描述 I2C 设备。然而在标准 Linux 中,用户只需要提供相应的 I2C 设备信息,Linux 就会根据所提供的信息构造 i2c_client 结构体。
用户所提供的 I2C 设备信息以节点的形式写到 DTS 文件中,如下所示:
&i2c3{
nca9555:nca9555@20{
reg=<0x20>;
compatible = "novosense,nca9555";
status="okay";
gpio-controller;
#gpio-cells = <2>;
};
};
驱动通过获取DTS中的节点信息将设备挂载
注意
NCA9555是一款24引脚CMOS器件,提供16位通用并行I2C总线数输入/输出GPIO扩展功能
4. 检查I2C设备
通过以下命令查看i2c总线有没有开启
如图:

5. I2C测试工具
板卡中带有i2c测试命令,命令有i2cdetect、i2cdump、i2cset以及i2cget,用于扫描I2C总线上的设备、读写指定设备的寄存器等。
例如查看挂载在i2c5上的设备情况,输出内容如下:
# i2cdetect -y 5
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- 15 -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Tips
其中“15”代表有设备地址为15的设备但是驱动未加载,UU代表设备地址为50的设备驱动已加载成功
其他常用命令使用案例如下:
#检测当前系统有几组i2c总线
i2cdetect -l
#查看i2c-3接口上的设备
i2cdetect -a 3
#读取指定设备的全部寄存器的值。
i2cdump -f -y 3 0x20
#读取指定IIC设备的某个寄存器的值,如下读取地址为0x68器件中的0x01寄存器值。
i2cget -f -y 3 0x20 0x01
#写入指定IIC设备的某个寄存器的值,如下设置地址为0x68器件中的0x01寄存器值为0x6f;
i2cset -f -y 3 0x20 0x01 0x6f b