i2cdetect не распознает датчики VL6180X за мультиплексором TCA9548A I2 C - PullRequest
1 голос
/ 12 февраля 2020

У меня 2 датчика расстояния VL6180X, правильно подключенных к мультиплексору TCA9548A, однако он распознает только сам мультиплексор, а не 2 датчика, как вы можете видеть с 0x70. Есть ли способ настроить адреса i2 c?

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 -- -- -- -- -- -- -- 

из c, я уже искал в Интернете, чтобы найти решение для этого:

Я установил

sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools

Я включил i2 c в ядре (https://raspberrypi.stackexchange.com/questions/66145/raspberry-pi-3-not-detecting-i2c-device)

Добавил все в config.txt как здесь: I2 C не обнаруживает? проблемы в оборудовании или любые другие?

Ответы [ 2 ]

3 голосов
/ 13 февраля 2020

Для правильной установки VL6180X за мультиплексором в Linux вы должны описать их в дереве устройств. Посмотрите документацию I2 C MUX .

Таким образом, вы должны описать всю установку (I2 C 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.

Приведенный выше код представляет собой простое сочетание устройств документация по связыванию дерева для i2 c -mux и для датчика VL6180X , доступная в исходных кодах ядра.

1 голос
/ 12 февраля 2020

Ответ Луки лучше, чем этот, хотя это все равно должно работать.

Это не работает так. Вы не можете «видеть» подключенные устройства через мультиплексор.

Вместо этого вы открываете мультиплексор и записываете «управляющий байт» , чтобы сказать это устройство, на которое следует переслать следующие данные.

...