3.I2C通讯
3.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 的数据线 |
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总线有没有开启
如图:
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