Проблемы с двойным I2 C на CM3 + - PullRequest
0 голосов
/ 27 мая 2020

, поэтому я пытаюсь заставить работать два I2 C на моем модуле, но работает только один из них.

Я возился с деревом устройств уже несколько дней, но я не может заставить его работать.

i2cdetect -l возвращает две конечные точки I2 C

$ i2cdetect -l
i2c-1   i2c             bcm2835 (i2c@7e804000)                  I2C adapter
i2c-2   i2c             bcm2835 (i2c@7e805000)                  I2C adapter

и i2cdetect 1 находит все подключенные к нему устройства, но i2cdetect 2 занимает больше времени и не передает данные по строкам (измерено с помощью осциллографа).

Мое дерево устройств:

// Example overlay for PCF8523 RTC device
/dts-v1/;
/plugin/;

/ {
  compatible = "brcm,bcm2708";

  // brcm-explanation
  /*
  Optional subnode-properties:
  - brcm,function: Integer, containing the function to mux to the pin(s):
    0: GPIO in
    1: GPIO out
    3: alt4
    2: alt5
    4: alt0
    5: alt1
    6: alt2
    7: alt3
  - brcm,pull: Integer, representing the pull-down/up to apply to the pin(s):
    0: none
    1: down
    2: up
  */

  //
  // Set up GPIOs:
  //  I2C1 on GPIO44,45
  //  I2C2 on GPIO28,29
  fragment@0 {
    target = <&gpio>;
    __overlay__ {
      i2c2_pins: i2c2 {
        brcm,pins = <44 45>;
        brcm,function = <6>; /* alt2 */
      };
      i2c1_pins: i2c1 {
        brcm,pins = <28 29>;
        brcm,function = <4>; /* alt0 */
      };
    };
  };

  //
  // I2C Device(s)
  //
  fragment@1 {
    target = <&i2c2>;
    __overlay__ {
      #address-cells = <1>; /* needed to avoid dtc warning */
      #size-cells = <0>; /* needed to avoid dtc warning */
      pinctrl-names = "default";
      pinctrl-0 = <&i2c2_pins>;
      clock-frequency = <100000>;
      status = "okay";
    };
  };

  fragment@3 {
    target = <&i2c1>;
    __overlay__ {
      #address-cells = <1>; /* needed to avoid dtc warning */
      #size-cells = <0>; /* needed to avoid dtc warning */
      pinctrl-names = "default";
      pinctrl-0 = <&i2c1_pins>;
      clock-frequency = <100000>;
      status = "okay";
    };
  };
};

Редактировать: raspi-gpio get вывод:

$ raspi-gpio get
BANK0 (GPIO 0 to 27):
GPIO 0: level=1 fsel=6 alt=2 func=PCLK
GPIO 1: level=1 fsel=6 alt=2 func=DE
GPIO 2: level=1 fsel=6 alt=2 func=LCD_VSYNC
GPIO 3: level=0 fsel=6 alt=2 func=LCD_HSYNC
GPIO 4: level=0 fsel=6 alt=2 func=DPI_D0
GPIO 5: level=0 fsel=6 alt=2 func=DPI_D1
GPIO 6: level=0 fsel=6 alt=2 func=DPI_D2
GPIO 7: level=0 fsel=6 alt=2 func=DPI_D3
GPIO 8: level=0 fsel=6 alt=2 func=DPI_D4
GPIO 9: level=0 fsel=6 alt=2 func=DPI_D5
GPIO 10: level=0 fsel=6 alt=2 func=DPI_D6
GPIO 11: level=0 fsel=6 alt=2 func=DPI_D7
GPIO 12: level=0 fsel=6 alt=2 func=DPI_D8
GPIO 13: level=0 fsel=6 alt=2 func=DPI_D9
GPIO 14: level=0 fsel=6 alt=2 func=DPI_D10
GPIO 15: level=0 fsel=6 alt=2 func=DPI_D11
GPIO 16: level=0 fsel=6 alt=2 func=DPI_D12
GPIO 17: level=0 fsel=6 alt=2 func=DPI_D13
GPIO 18: level=0 fsel=6 alt=2 func=DPI_D14
GPIO 19: level=0 fsel=6 alt=2 func=DPI_D15
GPIO 20: level=0 fsel=6 alt=2 func=DPI_D16
GPIO 21: level=0 fsel=6 alt=2 func=DPI_D17
GPIO 22: level=0 fsel=6 alt=2 func=DPI_D18
GPIO 23: level=0 fsel=6 alt=2 func=DPI_D19
GPIO 24: level=0 fsel=6 alt=2 func=DPI_D20
GPIO 25: level=0 fsel=6 alt=2 func=DPI_D21
GPIO 26: level=0 fsel=6 alt=2 func=DPI_D22
GPIO 27: level=0 fsel=6 alt=2 func=DPI_D23
BANK1 (GPIO 28 to 45):
GPIO 28: level=1 fsel=4 alt=0 func=SDA0
GPIO 29: level=1 fsel=4 alt=0 func=SCL0
GPIO 30: level=1 fsel=0 func=INPUT
GPIO 31: level=1 fsel=0 func=INPUT
GPIO 32: level=0 fsel=0 func=INPUT
GPIO 33: level=1 fsel=0 func=INPUT
GPIO 34: level=1 fsel=0 func=INPUT
GPIO 35: level=1 fsel=0 func=INPUT
GPIO 36: level=1 fsel=0 func=INPUT
GPIO 37: level=0 fsel=0 func=INPUT
GPIO 38: level=0 fsel=0 func=INPUT
GPIO 39: level=0 fsel=0 func=INPUT
GPIO 40: level=0 fsel=0 func=INPUT
GPIO 41: level=1 fsel=0 func=INPUT
GPIO 42: level=0 fsel=0 func=INPUT
GPIO 43: level=0 fsel=0 func=INPUT
GPIO 44: level=1 fsel=6 alt=2 func=SDA1
GPIO 45: level=1 fsel=6 alt=2 func=SCL1
BANK2 (GPIO 46 to 53):
GPIO 46: level=1 fsel=0 func=INPUT
GPIO 47: level=1 fsel=1 func=OUTPUT
GPIO 48: level=0 fsel=4 alt=0 func=SD0_CLK
GPIO 49: level=1 fsel=4 alt=0 func=SD0_CMD
GPIO 50: level=1 fsel=4 alt=0 func=SD0_DAT0
GPIO 51: level=1 fsel=4 alt=0 func=SD0_DAT1
GPIO 52: level=1 fsel=4 alt=0 func=SD0_DAT2
GPIO 53: level=1 fsel=4 alt=0 func=SD0_DAT3

Значит, выводы правильно установлены DT, но почему мы не видим подключенных к нему устройств и почему он не выводит никаких данных при сканировании шины I2 C?

...