在Beaglebone Black上使用SMBus进行设备接口连接

时间:2016-10-13 17:14:18

标签: linux beagleboneblack i2c serial-communication device-tree

我正在使用ADM1032ARMZ-2R温度传感器(作为初学者,我不允许在这里发布超过2个链接,我已经发布了2个链接用于下面的图像 - 对于数据表,请谷歌ADM1032ARMZ-2R)与Beaglebone Black Rev C预装了Debian(内核--3.8.13)。 ADM1032的数据表显示该芯片可通过SMBus协议在地址0x4D进行通信。我之前从未使用过SMbus,但发现I2C与SMBus的兼容性为100 KHz以下。我试着做以下事情

  1. 我写了一个设备树叠加层。它看起来像跟随(我保持频率为100 KHz)

    // I2C1的器件树覆盖使用引脚P9.17(SCLK)& P9.18所(SDA)

    /dts-v1/;
    /plugin/; 
    / {
            compatible = "ti,beaglebone", "ti,beaglebone-black";
            part-number = "BBB-I2C1-4D";
            version = "00A0";
            exclusive-use =
                    "P9.18",        /* i2c1_sda */
                    "P9.17",        /* i2c1_scl */
                    /* the hardware ip uses */
    
            fragment@0 {
                    target = <&am33xx_pinmux>;
                    __overlay__ {
                            bb_i2c1_pins: pinmux_bb_i2c1_pins {
                                    pinctrl-single,pins = <
                                            0x158 0x72      /* spi0_d1.i2c1_sda, SLEWCTRL_SLOW | INPUT_PULLUP | MODE2 */
                                            0x15c 0x72      /* spi0_cs0.i2c1_scl, SLEWCTRL_SLOW | INPUT_PULLUP | MODE2 */
                                    >;
                            };
                    };
            };
    
            fragment@1 {
                    target = <&i2c1>;
                    __overlay__ {
                            status = "okay";
                            pinctrl-names = "default";
                            pinctrl-0 = <&bb_i2c1_pins>;
    
                            clock-frequency = <100000>;
                            #address-cells = <1>;
                            #size-cells = <0>;
    
                            /* adding adm1032 as i2c child device on the bus here */
    
                            tempsense: tempsense@4d {
                                    compatible = "onsemi,adm1032";
                                    reg = <0x4d>;                    
                            };
                    };
            };
    };
    
  2. 编译此文件,将生成的.dtbo文件复制到/ lib / firmware目录中,并使用echo命令将其成功插入/sys/devices/bone_capemgr.9/slots中的虚拟披肩。 It looks like this

  3. 我尝试使用以下命令

  4. 观察上述工作的正确性
      

    dtc -f -I fs / proc / device-tree |少

    Intended things are happening and it looks like this(请注意,对于i2c1,图片中的&#34; ti,hwmods&#34;字段显示&#34; i2c2&#34;,但实际上是i2c1所以请不要&#39我担心它。我已经读过它,确保无论它显示的是什么都是正确的)

    1. 现在我正在尝试
    2.   

      i2cdetect -r 1

      但我无法发现任何事情

      在0x02,有一个可用于读取的状态寄存器

        

      i2cget -y -f 0x4d 0x02

      读取失败的 响应

      我哪里错了?请帮忙。

0 个答案:

没有答案