7. I2C 使用¶
7.1. 简介¶
主控芯片 RK3588S 上有9个I2C控制器,I2C总线上的数据在标准模式下可以以高达100k位/秒的速率传输,在快速模式下可以以高达400k位/秒的速率传输。 AIO-3588SG开发板引出2路I2C供用户自行配置。
本文主要描述如何调试i2c
7.2. i2cdetect 命令¶
查看系统已安装的 I2C 总线列表
rk3588s_firefly_aio_3588sg:/ # i2cdetect -l
i2c-10 i2c DP-AUX I2C Adapter
i2c-8 i2c rk3x-i2c I2C Adapter
i2c-6 i2c rk3x-i2c I2C Adapter
i2c-4 i2c rk3x-i2c I2C Adapter
i2c-2 i2c rk3x-i2c I2C Adapter
i2c-0 i2c rk3x-i2c I2C Adapter
i2c-9 i2c fde50000.dp I2C Adapter
i2c-7 i2c rk3x-i2c I2C Adapter
查看i2c6下的设备
rk3588s_firefly_aio_3588sg:/ # i2cdetect -y 6
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
可以看到i2c6上加载了两个设备的驱动,设备地址是0x48、0x5dUU表示此地址已经加载了驱动,具体有没有设备不一定
7.3. i2cdump 命令¶
查看i2c4下,0x64设备 0x00 - 0xff 的寄存器的值
rk3588s_firefly_aio_3588sg:/ # i2cdump -f -y 4 0x63
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 0d 00 34 3a 63 26 81 00 00 00 40 8a aa 50 0f f5 ?.4:c&?...@??P??
10: 3c 00 00 00 00 00 00 00 b0 c4 bf b9 9b 97 e0 cf <.......????????
20: c1 cd bb 9d 88 7c 65 56 52 50 4e 97 79 d2 de ff ?????|eVRPN?y???
30: e5 b4 71 7c b0 c5 ae 93 9d b5 cf d5 c6 b0 99 89 ??q|????????????
40: 82 85 91 a8 c1 c9 b0 43 00 00 90 02 00 00 00 00 ???????C..??....
50: 00 00 64 00 00 00 00 00 00 00 00 00 00 00 00 a2 ..d............?
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
a0: 00 00 00 00 00 00 64 00 00 e6 00 00 00 00 00 00 ......d..?......
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
可以看到寄存器
地址: 0x00 值: 0x0d
地址: 0x01 值: 0x00
地址: 0x02 值: 0x34
地址: 0x03 值: 0x3a
…
以此类推
7.4. i2cget 命令¶
获取 i2c4 下 0x63 设备的 0x0d 寄存器的值
rk3588s_firefly_aio_3588sg:/ # i2cget -f -y 4 0x63 0x0d
0x50
7.5. i2cset 命令¶
对 i2c4 下 0x63 设备的 0x0d 寄存器写入数据, 0x51 是数据,b表示数据长度为8bit
rk3588s_firefly_aio_3588sg:/ # i2cset -fy 4 0x63 0x0d 0x51 b
rk3588s_firefly_aio_3588sg:/ #
rk3588s_firefly_aio_3588sg:/ # i2cget -f -y 4 0x63 0x0d
0x51
对 i2c4 下 0x63 设备的 0x0c 寄存器写入数据, 0xff00 是数据,w 表示数据长度为16bit
rk3588s_firefly_aio_3588sg:/ # i2cset -fy 4 0x63 0x0c 0xff00 w
rk3588s_firefly_aio_3588sg:/ #
rk3588s_firefly_aio_3588sg:/ # i2cget -f -y 4 0x63 0x0c
0x00
rk3588s_firefly_aio_3588sg:/ # i2cget -f -y 4 0x63 0x0d
0xff