This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM62A7:I2C 端口2无法使用 cmd "i2cdetect -y -2&quot 扫描器件;

Guru**** 2392905 points
Other Parts Discussed in Thread: AM62A7

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1496245/am62a7-i2c-port2-can-not-scan-the-device-using-cmd-i2cdetect--y--2

器件型号:AM62A7

工具/软件:

我使用 ti am62a7 EVM 板。 我通过 J20连接器将 imx219连接到 SCO。 这一行中没有串行器/解串器和解串器。
Imx219 MIPI 连接到 SOC MIPI dricty μ。  
器件树的设置如下。 问题是我无法使用 cmd "i2cdetect -y 2"在 i2c 总线中扫描 i2c 器件。

cmd "i2cdetect -y 2"之后找不到任何节点。我可以看到 EVM 电路板在硬件设计中具有开关板 tca9543。  

为什么我不能使用此 i2c。 我需要 在应用函数中读取传感器中的一些消息。 您能分享一下我应该如何实现该功能吗

&MAIN_i2c2{
#address-cells =<1>;
#size-cells =<0>;
状态="正常";

I2C 开关@71{
兼容="NXP、pca9543";
#address-cells =<1>;
#size-cells =<0>;
REG =<0x71>;

/* CAM 端口*/
I2C@1{
#address-cells =<1>;
#size-cells =<0>;
reg =<1>;

ov5640:相机@10 {
兼容="Sony、imx219";
reg =<0x10>;

Clocks =<&clk_imx219_FIXE>;
时钟名称="XCLK";

Reset-GPIOs =<&exp1 13 GPIO_ACTIVE_HIGH>;

端口{
csi2_cam0:端点{
远程端点=<&csi2rx0_in_sensor>;
链路频率=/bits/64 <456000000>;
时钟通道=<0>;
数据通路=<1 2>;
};
};
};
};
};
};

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    I2C 开关-您的代码看起来不错

    由于要连接到接头 J20上的 CSI_I2C2_SCL 和 SDA 信号、因此可以让信号通过 I2C 开关:

    您似乎已经执行了硬操作并在器件树文件中设置了 i2c-switch:
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1455331/am625sip-i2c-gets-set-up-but-does-not-output-anything/5605384#5605384

    看起来您已经将开关设置为使用输出1而不是输出0。

    引脚多路复用设置如何?  

    您没有在 &MAIN_i2c2{}器件树节点中包含任何 pinmux 设置。 这些是否包括在其他地方? 如果没有、您需要先添加 pinmux 设置、然后才能开始向 I2C 外设发送信号。

    您应该会在 Linux 引导期间在引导日志中看到 I2C 接口出现。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    pinmux 是定义的其他位置。 以下是定义:

    &MAIN_i2c2{
    状态="正常";
    pinctrl-names ="default";
    pinctrl-0 =<&MAIN_i2c2_pins_default>;
    时钟频率=< 400000>;
    };

    main_i2c2_pins_default:main-i2c2-default-pins{
    pinctrl-single、pins =<
    AM62AX_IOPAD (0x0b0、PIN_INPUT_PULLUP、1)/*(K22) GPMC0_CSn2.I2C2_SCL */
    AM62AX_IOPAD (0x0b4、PIN_INPUT_PULLUP、1)/*(K24) GPMC0_CSn3.I2C2_SDA */
    >;
    };

    处理。 我使用 示波器检查 sda 和 SCL。 运行命令"i2cdetect -r -y 2"时出现信号
    因此 i2c-switch 端口 设置似乎 正确。 要验证问题、我使用命令  
    "i2cset -y 2 0x71 0x01 0x01"来控制 i2c 开关。 并且可以设置寄存器、也可以读取寄存器。
    然后检查了复位引脚。 已将其设置为高电平。  
      

    顺便说一下。  i2cdetect -y 2。 将显示以下警告。
    警告:无法使用 SMBus 快速写入命令、将跳过一些地址

    您能告诉我应该改进的方面吗? 非常感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    通过更改器件树下方的来更改 i2c 开关。  它也找不到传感器。

    &MAIN_i2c2{
    #address-cells =<1>;
    #size-cells =<0>;
    状态="正常";

    I2C 开关@71{
    兼容="NXP、pca9543";
    #address-cells =<1>;
    #size-cells =<0>;
    REG =<0x71>;

    /* CAM 端口*/
    I2C@0{
    #address-cells =<1>;
    #size-cells =<0>;
    reg =<0>;

    ov5640:相机@77 {
    兼容="Sony、imx219";
    REG =<0x77>;

    Clocks =<&clk_imx219_FIXE>;
    时钟名称="XCLK";

    Reset-GPIOs =<&exp1 13 GPIO_ACTIVE_HIGH>;

    端口{
    csi2_cam0:端点{
    远程端点=<&csi2rx0_in_sensor>;
    链路频率=/bits/64 <456000000>;
    时钟通道=<0>;
    数据通路=<1 2>;
    };
    };
    };
    };
    };
    };

    root@am62axx-EVM:/opt/edgeai-gst-apps i2cdetect -y -r 2
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:-------- -----
    10:-------- ----- ----- --
    第20章:一个男人 ----- ----- --
    第30章:你是我的女人 ----- ----- --
    第40章:我是你的女人 ----- ----- --
    第50章:我是你的女人 ----- ----- --
    第60章:我是你的女人 ----- ----- --
    70:UU ---- UU ---- UU
    Root@am62axx-EVM:/opt/edgeai-gst-apps ^C

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我可能会误解一些事情。 看起来一切都正常。

    在您的第二个响应中、i2cdetect 似乎正好提供了我们预期的输出。 您在 I2C 总线上定义了2个外设(地址为0x71和0x77)、i2cdetect 告诉我们外设上连接了 Linux 驱动程序: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1373630/sk-am62b-p1-assistance-required-for-eeprom-i2c-0/5247131#5247131

    此致、

    Nick