3.I2C通讯

3.1 I2C引脚

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

I2C_0

I2C

引脚

功能

I2C3-SCL

5

I2C3 的时钟信号线

I2C3-SDA

3

I2C3 的数据线

I2C5-SCL

28

I2C5 的时钟信号线

I2C5-SDA

27

I2C5 的数据线

3.2 I2C接口使能

可以在arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-linux.dts中使能I2C3和I2C5(这两个接口默认已经使能)

1&i2c3{
2    status = "okay";
3};
4
5&i2c5{
6    status = "okay";
7};

3.3 挂载I2C设备

在注册 I2C 设备时,需要结构体 i2c_client 来描述 I2C 设备。然而在标准 Linux 中,用户只需要提供相应的 I2C 设备信息,Linux 就会根据所提供的信息构造 i2c_client 结构体。

用户所提供的 I2C 设备信息以节点的形式写到 DTS 文件中,如下所示:

1&i2c3{
2    nca9555:nca9555@20{
3        reg=<0x20>;
4        compatible = "novosense,nca9555";
5        status="okay";
6        gpio-controller;
7        #gpio-cells = <2>;
8    };
9};

驱动通过获取DTS中的节点信息将设备挂载

注意

NCA9555是一款24引脚CMOS器件,提供16位通用并行I2C总线数输入/输出GPIO扩展功能

3.4 检查I2C设备

通过以下命令查看i2c总线有没有开启

如图:

I2C_1

3.5 I2C测试工具

板卡中带有i2c测试命令,命令有i2cdetect、i2cdump、i2cset以及i2cget,用于扫描I2C总线上的设备、读写指定设备的寄存器等。

例如查看挂载在i2c5上的设备情况,输出内容如下:

 1# i2cdetect -y 5
 2    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 300:          -- -- -- -- -- -- -- -- -- -- -- -- --
 410: -- -- -- -- -- 15 -- -- -- -- -- -- -- -- -- --
 520: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 630: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 740: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 850: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
 960: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
1070: -- -- -- -- -- -- -- --

提示

其中“15”代表有设备地址为15的设备但是驱动未加载,UU代表设备地址为50的设备驱动已加载成功

其他常用命令使用案例如下:

 1#检测当前系统有几组i2c总线
 2i2cdetect -l
 3
 4#查看i2c-3接口上的设备
 5i2cdetect -a 3
 6
 7#读取指定设备的全部寄存器的值。
 8i2cdump -f -y 3 0x20
 9
10#读取指定IIC设备的某个寄存器的值,如下读取地址为0x68器件中的0x01寄存器值。
11i2cget -f -y 3 0x20 0x01
12
13#写入指定IIC设备的某个寄存器的值,如下设置地址为0x68器件中的0x01寄存器值为0x6f;
14i2cset -f -y 3 0x20 0x01 0x6f b