i2cdetect 无法识别 TCA9548A I2C 多路复用器后面的 VL6180X 传感器
i2cdetect does not recognize VL6180X sensors behind TCA9548A I2C multiplexer
我有 2 个 VL6180X 距离传感器正确连接到 TCA9548A 多路复用器,但它只能识别多路复用器本身,而不是 0x70 中看到的 2 个传感器。有什么方法可以配置 i2c 地址吗?
i2cdetect -y 1
给我以下输出
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
Ofc,我已经在网上搜索了解决方案:
我安装了
sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools
我在内核中启用了 i2c (https://raspberrypi.stackexchange.com/questions/66145/raspberry-pi-3-not-detecting-i2c-device)
已将所有内容添加到 config.txt,如下所示:
Luca 的回答比这更好,尽管这应该仍然有效。
不是这样的。您无法通过多路复用器 "see" 连接的设备。
相反,您打开多路复用器并向其写入 "control byte",告诉它应将以下数据转发到哪个设备。
为了在 Linux 中的多路复用器后面正确实例化 VL6180X,您应该在设备树中描述它们。看看 I2C MUX documentation.
因此您应该像这样描述整个设置(I2C mux + 2x VL6180X):
&i2c1 { // the SoC bus controller
mux@70 {
compatible = "nxp,pca9548";
reg = <0x70>;
#address-cells = <1>;
#size-cells = <0>;
i2c@3 {
#address-cells = <1>;
#size-cells = <0>;
reg = <3>;
gpio1: gpio@29 {
compatible = "st,vl6180";
reg = <0x29>;
};
};
i2c@4 {
#address-cells = <1>;
#size-cells = <0>;
reg = <4>;
gpio1: gpio@29 {
compatible = "st,vl6180";
reg = <0x29>;
};
};
};
};
这将实例化两个新总线(用 i2cdetect -l
列出它们),每个总线下方将出现一个 vl6180 传感器,并被描述为常规 IIO 设备。
以上代码是 i2c-mux and for the VL6180X sensor 的设备树绑定文档的简单组合,可在内核源代码中找到。
我有 2 个 VL6180X 距离传感器正确连接到 TCA9548A 多路复用器,但它只能识别多路复用器本身,而不是 0x70 中看到的 2 个传感器。有什么方法可以配置 i2c 地址吗?
i2cdetect -y 1
给我以下输出
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
Ofc,我已经在网上搜索了解决方案:
我安装了
sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools
我在内核中启用了 i2c (https://raspberrypi.stackexchange.com/questions/66145/raspberry-pi-3-not-detecting-i2c-device)
已将所有内容添加到 config.txt,如下所示:
Luca 的回答比这更好,尽管这应该仍然有效。
不是这样的。您无法通过多路复用器 "see" 连接的设备。
相反,您打开多路复用器并向其写入 "control byte",告诉它应将以下数据转发到哪个设备。
为了在 Linux 中的多路复用器后面正确实例化 VL6180X,您应该在设备树中描述它们。看看 I2C MUX documentation.
因此您应该像这样描述整个设置(I2C mux + 2x VL6180X):
&i2c1 { // the SoC bus controller
mux@70 {
compatible = "nxp,pca9548";
reg = <0x70>;
#address-cells = <1>;
#size-cells = <0>;
i2c@3 {
#address-cells = <1>;
#size-cells = <0>;
reg = <3>;
gpio1: gpio@29 {
compatible = "st,vl6180";
reg = <0x29>;
};
};
i2c@4 {
#address-cells = <1>;
#size-cells = <0>;
reg = <4>;
gpio1: gpio@29 {
compatible = "st,vl6180";
reg = <0x29>;
};
};
};
};
这将实例化两个新总线(用 i2cdetect -l
列出它们),每个总线下方将出现一个 vl6180 传感器,并被描述为常规 IIO 设备。
以上代码是 i2c-mux and for the VL6180X sensor 的设备树绑定文档的简单组合,可在内核源代码中找到。