如何使用I2C接口

这篇文档介绍如何在Android和Ubuntu下使用I2C。

前提条件

  • Ubuntu V180531或更新版本
  • Android V180619或更新版本

连线

I2C A
Sensor SCL <-> I2C_SCK_A (PIN 22)
Sensor SDA <-> I2C_SDA_A (PIN 23)
Sensor GND <-> GND
Sensor VCC <-> 5V or 3.3V //取决于传感器供电
I2C B
Sensor SCL <-> I2C_SCK_B (PIN 25)
Sensor SDA <-> I2C_SDA_B (PIN 26)
Sensor GND <-> GND
Sensor VCC <-> 5V or 3.3V //取决于传感器供电

I2C A
Sensor SCL <-> I2C_SCK_A (PIN 22)
Sensor SDA <-> I2C_SDA_A (PIN 23)
Sensor GND <-> GND
Sensor VCC <-> 5V or 3.3V //取决于传感器供电
I2C B
Sensor SCL <-> I2C_SCK_B (PIN 25)
Sensor SDA <-> I2C_SDA_B (PIN 26)
Sensor GND <-> GND
Sensor VCC <-> 5V or 3.3V //取决于传感器供电

I2C 3
Sensor SCL <-> I2C0_SCK (PIN 22)
Sensor SDA <-> I2C0_SDA (PIN 23)
Sensor GND <-> GND
Sensor VCC <-> 5V or 3.3V //取决于传感器供电
I2C 4
Sensor SCL <-> I2C1_SCK (PIN 25)
Sensor SDA <-> I2C1_SDA (PIN 26)
Sensor GND <-> GND
Sensor VCC <-> 5V or 3.3V //取决于传感器供电

检测设备

Detect device on I2C A:

1
2
3
4
5
6
7
8
9
10
# i2cdetect -y -r 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- 1d -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Detect device on I2C B:

1
2
3
4
5
6
7
8
9
10
11
# i2cdetect -y -r 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Detect device on I2C A:

1
2
3
4
5
6
7
8
9
10
# i2cdetect -y -r 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- 1d -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Detect device on I2C B:

1
2
3
4
5
6
7
8
9
10
11
# i2cdetect -y -r 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Detect device on I2C 3:

1
2
3
4
5
6
7
8
9
10
# i2cdetect -y -r 3
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Detect device on I2C 4:

1
2
3
4
5
6
7
8
9
10
# i2cdetect -y -r 4
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- 0e --
10: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
20: UU -- 22 -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

如果连线正确并且所接传感器是正常的那么你会看到所接设备的地址,如:0x1d,0x18 and 0x51

注意

执行这些命令需要root权限。

从设备读取寄存器值

从挂载在I2C A上设备地址为0x1d的设备读取寄存器0x0d的值。

1
2
# i2cget -f -y 1 0x1d 0x0d
0x2a
注意

注意: 执行命令需要root权限。

更多用法请参考i2c工具帮助信息。