Включение i2c1 на beaglebone black с помощью dtb

Я включил шину I2C 2 на Beagle Bone Black, используя следующие строки в dtb.

i2c2: i2c@4819c000 {
    pinctrl-names = "default";
    pinctrl-0 = <&i2c2_pins>;
    status = "okay";
    clock-frequency = <100000>;
};    

i2c2_pins: pinmux_i2c2_pins {
    pinctrl-single,pins = <
        0x178 0x73  
        0x17c 0x73
    >;
};

Но когда я то же самое, чтобы включить шину I2C 1, используя код ниже

i2c1: i2c@4802a000 {
    pinctrl-names = "default";
    pinctrl-0 = <&i2c1_pins>;
    status = "okay";
    clock-frequency = <100000>;
};

i2c1_pins: pinmux_i2c1_pins {
    pinctrl-single,pins = <
        0x154 0x72  /* i2c1_scl.i2c1_scl */
        0x15c 0x72  /* i2c1_sda.i2c1_sda */
    >;
};

Шина указана в команде i2cdetect -l. Но проверка шины с помощью команды i2cdetect -r 1 дает мне следующую ошибку

 0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          [   18.322700] omap_i2c 4802a000.i2c: timeout waiting for bus ready
-- [   19.342694] omap_i2c 4802a000.i2c: timeout waiting for bus ready
-- [   20.362695] omap_i2c 4802a000.i2c: timeout waiting for bus ready

Я использую пакет ZCZ чипа AM3359. Может ли кто-нибудь указать мне на ошибку, которую я делаю в файле dtb?


person Prajosh Premdas    schedule 18.07.2014    source источник


Ответы (3)


Проблема решена Я включил не ту линию. Ссылка на неверный техпаспорт. Должен быть

+               i2c1_pins: pinmux_i2c1_pins {
+                       pinctrl-single,pins = <
+                               0x158 0x72      /* uart1_ctsn.i2c2_sda, SLEWCTRL_SLOW | INPUT_PULLUP | MODE2 */
+                               0x15c 0x72      /* uart1_rtsn.i2c2_scl, SLEWCTRL_SLOW | INPUT_PULLUP | MODE2 */
+                       >;
+               };
person Prajosh Premdas    schedule 23.07.2014
comment
Привет, @Prajosh, не могли бы вы опубликовать код полного наложения .dts дерева устройств, пожалуйста? У меня возникли проблемы с включением I2C1 на контактах 24 и 26. В настоящее время я использую это дерево устройств здесь, на github. При использовании i2cdetect для моего StrongLink SL030 RFID адрес 0x50 остается пустым. - person RobHurd; 06.10.2014
comment
спасибо за ваш ответ, но не могли бы вы объяснить немного больше о том, что такое dtb и какой именно файл вы редактируете? - person user391339; 20.12.2014

@РобХёрд

Я использовал файлы, найденные по этому адресу https://git.ti.com/ti-linux-kernel/ti-linux-kernel/trees/ti-linux-3.12.y/arch/arm/boot/dts< /а>

Пожалуйста, найдите патч, который я добавил

diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
index a0efb06..835c973 100644
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
@@ -31,6 +31,7 @@
                0x58 (PIN_OUTPUT_PULLUP | MUX_MODE7)    /* gpmc_a6.gpio1_22 */
                0x5c (PIN_OUTPUT_PULLDOWN | MUX_MODE7)  /* gpmc_a7.gpio1_23 */
                0x60 (PIN_OUTPUT_PULLUP | MUX_MODE7)    /* gpmc_a8.gpio1_24 */
+               0x164 (PIN_OUTPUT_PULLUP | MUX_MODE7)
            >;
        };

@@ -41,6 +42,20 @@
            >;
        };

+       i2c1_pins: pinmux_i2c1_pins {
+           pinctrl-single,pins = <
+               0x158 0x72      /* uart1_ctsn.i2c2_sda, SLEWCTRL_SLOW | INPUT_PULLUP | MODE2 */
+                                0x15c 0x72      /* uart1_rtsn.i2c2_scl, SLEWCTRL_SLOW | INPUT_PULLUP | MODE2 */
+           >;
+       };
+
+       i2c2_pins: pinmux_i2c2_pins {
+           pinctrl-single,pins = <
+               0x178 0x73  /* uart1_ctsn.i2c2_sda, SLEWCTRL_SLOW | INPUT_PULLUP | MODE3 */
+               0x17c 0x73  /* uart1_rtsn.i2c2_scl, SLEWCTRL_SLOW | INPUT_PULLUP | MODE3 */
+           >;
+       };
+
        uart0_pins: pinmux_uart0_pins {
            pinctrl-single,pins = <
                0x170 (PIN_INPUT_PULLUP | MUX_MODE0)    /* uart0_rxd.uart0_rxd */

@@ -202,6 +223,20 @@
            };

        };
+
+       i2c1: i2c@4802a000 {
+           pinctrl-names = "default";
+           pinctrl-0 = <&i2c1_pins>;
+           status = "okay";
+           clock-frequency = <400000>;
+       };
+
+       i2c2: i2c@4819c000 {
+           pinctrl-names = "default";
+           pinctrl-0 = <&i2c2_pins>;
+           status = "okay";
+           clock-frequency = <400000>;
+       };
    };
diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts
index 2f64afa..0954ac1 100644
--- a/arch/arm/boot/dts/am335x-boneblack.dts
+++ b/arch/arm/boot/dts/am335x-boneblack.dts
@@ -69,6 +69,15 @@
    };
 };

+&i2c2 {
+   touchcontroller: atmel_maxtouch@4b  {
+       compatible = "atmel,maxtouch";
+       reg = <0x4b>;
+       interrupt-parent = <&gpio2>;
+       interrupts = <1 8>; // gpio2[1] 8
+   };
+};
+
 &lcdc {
    pinctrl-names = "default", "off";
    pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
person Prajosh Premdas    schedule 16.10.2014

Следующая команда активирует i2c1 на BeagleBone Black. (Ядро 3.8 -- более новые ядра не поддерживают bone_capemgr.* пока)

echo BB-I2C1 > /sys/devices/bone_capemgr.8/slots

Примечание. Вытягивание вниз включено.

Справочник

person Mahendra Gunawardena    schedule 05.08.2014
comment
Мне нужно иметь шину i2c при запуске, так как мой сенсорный чип подключен к этой шине. Поэтому мне нужно включить его через dtb - person Prajosh Premdas; 07.08.2014
comment
Похоже, это включает I2C1 как I2C2. Однако при использовании i2cdetect он не распознает мой считыватель RFID SL030 по адресу 0x50. Я использую контакты 24 и 26. - person RobHurd; 06.10.2014