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.

[参考译文] PROCESSOR-SDK-J721S2:omap_i2c 2010000.i2c:控制器超时

Guru**** 2484615 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1442453/processor-sdk-j721s2-omap_i2c-2010000-i2c-controller-timed-out

器件型号:PROCESSOR-SDK-J721S2
Thread 中讨论的其他器件:TCA6408

工具与软件:

你(们)好

我们使用的是 J721s2处理器 SDK、我们的解串器地址为 max96714、从器件地址为0x50、解串器填充了电路板、而 i2c 总线为1
当我们使用 i2cdetect -y 1检查 i2c 时、得到
root@j721s2-evm:~# i2cdetect -y 1.
i2cdetect:警告:无法使用 SMBus 快速写入命令、将跳过一些地址
    0 1 2 3 4 5 6 7 8 9 A b c d  f
00:
10:
20:
30:----- ---
40:
50:--------- --- --- ——
60:
70:

我们已检查 i2cdetect -y 2
root@j721s2-evm:~# i2cdetect -y 2.
i2cdetect:警告:无法使用 SMBus 快速写入命令、将跳过一些地址
    0 1 2 3 4 5 6 7 8 9 A b c d  f
00:
10:
20:
30:[2038.378118] omap_i2c 2010000.i2c:控制器超时
--[2039.434018] omap_i2c 2010000.i2c:控制器超时
--[2040.490006] omap_i2c 2010000.i2c:控制器超时
--[2041.514006] omap_i2c 2010000.i2c:控制器超时
--[2042.570006] omap_i2c 2010000.i2c:控制器超时
--[2043.594006] omap_i2c 2010000.i2c:控制器超时
--[2044.650009] omap_i2c 2010000.i2c:控制器超时
--[2045.706005] omap_i2c 2010000.i2c:控制器超时
——
40:
50:UU [2046.762006] omap_i2c 2010000.i2c:控制器超时
--[2047.818004] omap_i2c 2010000.i2c:控制器超时
-[ 2048.874004] omap_i2c 2010000.i2c:控制器超时
--[2049.930004] omap_i2c 2010000.i2c:控制器超时
--[2050.986011] omap_i2c 2010000.i2c:控制器超时
-[ 2052.042012] omap_i2c 2010000.i2c:控制器超时
--[2053.098013] omap_i2c 2010000.i2c:控制器超时
--[2054.154011] omap_i2c 2010000.i2c:控制器超时
--[2055.210004] omap_i2c 2010000.i2c:控制器超时
--[2056.266010] omap_i2c 2010000.i2c:控制器超时
--[2057.322004] omap_i2c 2010000.i2c:控制器超时
--[2058.378004] omap_i2c 2010000.i2c:控制器超时
--[2059.434009] omap_i2c 2010000.i2c:控制器超时
--[2060.490008] omap_i2c 2010000.i2c:控制器超时
--[2061.546007] omap_i2c 2010000.i2c:控制器超时
——
60:
70:

输出 DTS

/dts-v1/;
/plugin/;

#include

&{/}{
   clk_ox05b1s_fixed:ox05b1s-inck{
       Compatible ="固定时钟";
       #clock-Cells =<0>;
       时钟频率=<24000000>;
   };
};

&MAIN_i2c1{
   状态="正常";
   #address-cells =<1>;
       #size-cells =<0>;
       
   ox05b1s:相机@50 {
        兼容="ovti、ox05b";
        REG =<0x50>;
        Clocks =<&clk_ox05b1s_fixed>;
        时钟名称="inck";

        端口{
            csi2_cam0:端点{
                远端端点=<&csi2rx0_in_sensor>;
                链路频率=/bits/ 64 <480000000>;
                时钟通道=<0>;
                data-channels =<1 2 3 4>;
            };
        };
    };
};

&csi0_port0{
   状态="正常";

   csi2rx0_in_sensor:端点{
       远程端点=<&csi2_cam0>;
       Bus-type =<4>;/* CSI2 DPHY */
       时钟通道=<0>;
       data-channels =<1 2>;
   };
};

请提供此方面的解决方案



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

    您好!

    几个申请:

    • 您是否在器件树中为 main_i2c1配置了引脚多路复用器? 如果是、您可以分享吗?
    • dmesg | grep i2c。 请分享命令的输出以获取确切的实例编号。  

    此致、

    基尔西  

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

    i2c1的引脚多路复用配置
      MAIN_i2c1_PINS_DEFAULT:MAIN-i2c1-PINS-DEFAULT{
                   PINCTL-SINGLE、PINS =<
                           J721S2_IOPAD (0x0c4、PIN_INPUT | PIN_OUTPUT、13)/*(AB26) ECAP0_IN_APWM_OUT.I2C1_SCL */
                           J721S2_IOPAD (0x0c8、PIN_INPUT | PIN_OUTPUT、13)/*(AD28) EXT_REFCLK1.I2C1_SDA */
                   >;
           }

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

    root@j721s2-evm:~# dmesg | grep i2c
    [   0.762946] i2c_dev:I2C /dev/entries 驱动程序
    [   0.912669] OMAP_i2c 42120000.i2c:400kHz 时的总线2版本0.12
    [   0.919302] omap_i2c 2000000.i2c:400kHz 时的总线3版本0.12
    [   0.925449] omap_i2c 2010000.i2c:10000kHz 时的总线1版本0.12
    [   0.931904] omap_i2c 2040000.i2c:400kHz 时总线4 rev0.12
    [   0.938166] omap_i2c 2050000.i2c:400kHz 时的总线5 rev0.12
    [   9.082443] debug_info:sizeof i2c_msg = 16
    [   9.318070] i2c_device_prob+0x138/0x30c
    [   9.353000] i2c_register_driver+0x48/0xd0
    [   9.357082] ox05b_i2c_driver_init+0x20/0x1000 [ox05b1s]
    [21.647238]  i2c 4-002c:延迟探测待定
    [  32.842281] omap_i2c 2010000.i2c:控制器超时
    [  33.898277] OMAP_i2c 2010000.i2c:控制器超时
    [  34.954273] OMAP_i2c 2010000.i2c:控制器超时
    [  35.978265] OMAP_i2c 2010000.i2c:控制器超时
    [  37.034268] omap_i2c 2010000.i2c:控制器超时
    [  38.090272] OMAP_i2c 2010000.i2c:控制器超时
    [  39.146271] omap_i2c 2010000.i2c:控制器超时
    [  40.202264] OMAP_i2c 2010000.i2c:控制器超时
    [  41.258263] omap_i2c 2010000.i2c:控制器超时
    [  42.314265] omap_i2c 2010000.i2c:控制器超时
    [  43.370264] OMAP_i2c 2010000.i2c:控制器超时
    [  44.426261] OMAP_i2c 2010000.i2c:控制器超时
    [  45.482262] omap_i2c 2010000.i2c:控制器超时
    [  46.538264] omap_i2c 2010000.i2c:控制器超时
    [  47.594262] omap_i2c 2010000.i2c:控制器超时
    [  48.650262] OMAP_i2c 2010000.i2c:控制器超时
    [  49.706262] omap_i2c 2010000.i2c:控制器超时
    [  50.762262] OMAP_i2c 2010000.i2c:控制器超时
    [  51.818262] omap_i2c 2010000.i2c:控制器超时
    [  52.874261] omap_i2c 2010000.i2c:控制器超时
    [  53.930261] OMAP_i2c 2010000.i2c:控制器超时
    [  54.986281] OMAP_i2c 2010000.i2c:控制器超时
    [  56.042271] omap_i2c 2010000.i2c:控制器超时

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="625323" url="~/support/processors-group/processors/f/processors-forum/1442453/processor-sdk-j721s2-omap_i2c-2010000-i2c-controller-timed-out/5534781 #5534781"][0.925449]   omap_i2c 2010000.i2c:10000kHz 时的总线1 rev0.12
    [报价]

    此配置在10 MHz 上进行。 这是奇怪的。 通常应使用400 KHz。

    您是否能够使用 devmem2读取 i2C1寄存器? 'evmem2 0x2010000 w'

    此外、是否从任何其他内核启用 MAIN_i2c1?

    -基尔西

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

    root@j721s2-evm:/sys/bus/i2c/devices dmesg | grep i2c
    [   0.763321] i2c_dev:I2C /dev/entries 驱动程序
    [   0.912872] omap_i2c 42120000.i2c:400kHz 时的总线2版本0.12
    [   0.919529] omap_i2c 2000000.i2c:400kHz 时的总线0版本0.12
    [   0.925663] omap_i2c 2010000.i2c:400kHz 时总线1版本0.12
    [   0.931950] omap_i2c 2040000.i2c:400kHz 时总线3版本0.12
    [   0.938186] omap_i2c 2050000.i2c:400kHz 时的总线4 rev0.12
    [   8.875892] debug_info:sizeof i2c_msg = 16
    [   9.122771] i2c_device_prob+0x138/0x30c
    [   9.158701] i2c_register_driver+0x48/0xd0
    [9.161783]    ox05b_i2c_driver_init+0x20/0x1000 [ox05b1s]
    [21.458290]  i2c 3-002c:延迟探测待定
    [  83.211130] OMAP_i2c 2010000.i2c:控制器超时
    [  84.267128] OMAP_i2c 2010000.i2c:控制器超时
    [  85.323122] omap_i2c 2010000.i2c:控制器超时
    [  86.379116] omap_i2c 2010000.i2c:控制器超时
    [  87.435115] OMAP_i2c 2010000.i2c:控制器超时
    [  88.491114] OMAP_i2c 2010000.i2c:控制器超时
    [  89.547115] OMAP_i2c 2010000.i2c:控制器超时
    [  90.603126] OMAP_i2c 2010000.i2c:控制器超时
    [  91.659122] OMAP_i2c 2010000.i2c:控制器超时
    [  92.683115] OMAP_i2c 2010000.i2c:控制器超时
    [  93.739113] omap_i2c 2010000.i2c:控制器超时
    [  94.795132] OMAP_i2c 2010000.i2c:控制器超时

    现在、我将频率从100kHz 更改为400kHz、仍然面临同样的问题

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="274047" url="~/support/processors-group/processors/f/processors-forum/1442453/processor-sdk-j721s2-omap_i2c-2010000-i2c-controller-timed-out/5535983 #5535983"]

    此外、是否从任何其他内核启用 MAIN_i2c1?

    [报价]

    您还能回答上述问题吗?

    -基尔西

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

    /dts-v1/;
    /plugin/;

    #include

    &{/}{
       clk_ox05b1s_fixed:ox05b1s-inck{
           Compatible ="固定时钟";
           #clock-Cells =<0>;
           时钟频率=<24000000>;
       };
    };

    &MAIN_i2c1{
       状态="正常";
       #address-cells =<1>;
           #size-cells =<0>;
           
       ox05b1s:相机@50 {
            兼容="ovti、ox05b";
            REG =<0x50>;
            Clocks =<&clk_ox05b1s_fixed>;
            时钟名称="inck";

            端口{
                csi2_cam0:端点{
                    远端端点=<&csi2rx0_in_sensor>;
                    链路频率=/bits/ 64 <480000000>;
                    时钟通道=<0>;
                    data-channels =<1 2 3 4>;
                };
            };
        };
    };

    &csi0_port0{
       状态="正常";

       csi2rx0_in_sensor:端点{
           远程端点=<&csi2_cam0>;
           Bus-type =<4>;/* CSI2 DPHY */
           时钟通道=<0>;
           data-channels =<1 2>;
       };
    };
    这里是 dtso、我们使用的是 MAIN_i2c1


    在 k3-j721s2-common-proc-board.dts 中、我们将启用它

    &MAIN_i2c1{
           状态="正常";
           pinctrl-names ="默认值";
           pinctrl-0 =<&MAIN_i2c1_PINS_DEFAULT>;
           /* i2c1用于 DVI DDC、因此我们需要使用100kHz */
           时钟频率=<400000>;

           扩展7:GPIO@50{
                   兼容="ti、tca6408";
                   REG =<0x50>;
                   GPIO 控制器;
                   #GPIO-CELLS =<2>;
           };

    };

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    main_i2c1_pins_default:main-i2c1-pins-default{
                   PINCTL-SINGLE、PINS =<
                           J721S2_IOPAD (0x0c4、PIN_INPUT | PIN_OUTPUT、13)/*(AB26) ECAP0_IN_APWM_OUT.I2C1_SCL */
                           J721S2_IOPAD (0x0c8、PIN_INPUT | PIN_OUTPUT、13)/*(AD28) EXT_REFCLK1.I2C1_SDA */
                   >;
           }

    引脚多路复用有多种选项。 在定制电路板上、您是否使用了相同的引脚?

    其他2个选项。 只需在电路板上仔细检查用于 I2C1的确切引脚即可。

    -基尔西

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



    root@j721s2-evm:~# i2cdetect -y -r 1.
    0 1 2 3 4 5 6 7 8 9 A b c d f
    00:[1082.281601] omap_i2c 2010000.i2c:控制器超时
    --[ 1083.337600] omap_i2c 2010000.i2c:控制器超时
    --[ 1084.393589] omap_i2c 2010000.i2c:控制器超时
    --[ 1085.417587] omap_i2c 2010000.i2c:控制器超时
    --[ 1086.473589] omap_i2c 2010000.i2c:控制器超时
    --[ 1087.529596] omap_i2c 2010000.i2c:控制器超时
    --^C[ 1088.585594] omap_i2c 2010000.i2c:控制器超时


    我们已根据原理图完成引脚多路复用配置  






    即使在收到此 i2c_controller 超时错误后也是如此

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

    上面的屏幕截图来自 i2c 调试器、当我们在 i2c 总线1上发出 i2cdetect 命令时、我们可以看到 SCL 和 SDA 正在切换、但仍然出现控制器计时错误

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

    问题已解决。 这是因为从器件没有响应。 当我们在 I2C 总线上添加另一个从器件时、便可检测到该从器件并对其进行读取。 谢谢。