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.

[参考译文] AM3352:I2C1探针失败

Guru**** 2587365 points
Other Parts Discussed in Thread: AM3352, BQ32000, TPS65217

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/629940/am3352-i2c1-probe-fails

器件型号:AM3352
主题中讨论的其他器件: BQ32000TPS65217

大家好、

我正在使用基于 AM3352的定制板。 我使用的是 TI SDK 4.0、并具有基于 AM335x EVM 的定制 uboot。  

我们没有电路板检测 EEPROM、也没有将 I2C0用于任何用途。 I2C1上有 TPS65217C 和 BQ32000。

我已经按照如下方式完成了引脚多路复用:

静态结构 MODULE_PIN_mux i2c1_PIN_mux[]={
{offset (spi0_D1)、(mode (2)| RXACTIVE |
PULLUP_EN | SLEWCTRL)}、/* I2C_DATA */
{offset (spi0_cs0)、(mode (2)| RXACTIVE |
PULLUP_EN | SLEWCTRL)}、/* I2C_SCLK *
{-1}、
};

我在 板级配置文件中调用 i2c_set_fbus_num (1)、以切换到 I2C1。

问题:


当我启动 U-boot 并尝试探测 I2C1上的芯片时。 U-boot 抛出以下错误。

按任意键停止自动引导: 0  
=> I2C DEV 1
将总线设置为1
=> I2C 探针
有效的芯片地址:WAIT_TO_EVENT 中的超时:STATUS=0100
检查总线的 PADS /上拉电阻是否配置正确
WAIT_TO_EVENT 中超时:STATUS=0000
检查总线的 PADS /上拉电阻是否配置正确
WAIT_TO_EVENT 中超时:STATUS=0000
检查总线的 PADS /上拉电阻是否配置正确
WAIT_TO_EVENT 中超时:STATUS=0000
检查总线的 PADS /上拉电阻是否配置正确
WAIT_TO_EVENT 中超时:STATUS=0000

同样、它在内核启动中显示以下错误:

[2.561037]   OMAP_i2c 4802a000。i2c:控制器超时
[2.591040]   tps65217 1-0024:从寄存器0x16读取失败
[2.596211]   VDDS_DPR:无法启用
[2.59999996]   tps65217 1-0024:注册 tps65217-PMIC 稳压器失败
[2.606711]   tps65217-PMIC:tps65217-PMIC 的探头失败、错误-110
[3.681025]   OMAP_i2c 4802a000。i2c:控制器超时
[3.711029]   tps65217 1-0024:无法读取修订版寄存器:-110
[3.717817]   tps65217:探测1-0024失败,错误-110
[3.724058]   OMAP_i2c 4802a000.i2c:总线1 rev0.11、频率为400kHz
[3.730731]   hctosys:无法打开 RTC 设备(rtc0)
[3.736579]   WLAN-en-regulator:正在禁用

请说明此问题的可能原因。

谢谢、

Divyeshkumar M

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    最新的 DISDK 还使用器件树进行 u-boot。 您能否共享位于 arch/arm/DTS 中的器件树的相关 i2c 部分?

    此致、
    Yordan

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

    Yordan、您好!

    感谢您的回答。

    以使引脚多路复用器独特。 我已经修改了 i2c1的引脚复用。 以下是 mux.c 中 i2c1的多路复用器详细信息以及 u-boot 的器件树:

    MUX.c:

    静态结构 MODULE_PIN_mux i2c1_PIN_mux[]={

    {offset (uart0_CTSN)、(mode (3)| RXACTIVE |

    PULLUP_EN | SLEWCTRL)}、// I2C1_DATA *

    {offset (uart0_rtsn)、(mode (3)| RXACTIVE |

    PULLUP_EN | SLEWCTRL)}、/* I2C_SCLK *

    {-1}、

    };

    U-boot 器件树:

    i2c1_pins:pinmux_i2c1_pins{

    pinctrl-single、pins =<

    0x168 (PIN_INPUT_PULLUP | MUX_MODE3)/* uart0_CTSN.i2c1_sda *

    0x16c (PIN_INPUT_PULLUP | MUX_MODE3)/* uart0_rtsn.i2c1_SCL *

    >;

    };

    i2c1{(&I)

    pinctrl-names ="default";

    pinctrl-0 =<&i2c1_PINs>;

    状态="正常";

    时钟频率=<100000 >;

    TPS:TPS@24{

    reg =<0x24>;

    };

    bq32k_RTC:RTC@68{

    兼容="ti、bq32000"、"Dallas、ds1307";

    reg =<0x68>;

    };

    };

    在进行这些更改后、我不会得到超时错误、但在检测到的芯片列表中也没有任何内容。 调查结果如下:

    U-boot:

    按任意键停止自动引导: 0  
    => I2C DEV 1
    将总线设置为1
    => I2C 探针
    有效芯片地址:
    =>

    Linux:

    root@AM335x-EVM:~# i2cdetect -r 1.

    警告! 该程序会使您的 I2C 总线混淆、导致数据丢失和更糟糕的情况!

    我将使用读取字节命令探测文件/dev/i2c-1。

    我将探测地址范围0x03-0x77。

    继续? [y/n] y

      0 1 2 3 4 5 6 7 8 9 A b c d e f

    00:      ------------ ------------ ------

    10:------------ ------------ ------------ --

    20:------------ ------------ ------------ --

    30:------------ ------------ ------------ --

    40:------------ ------------ ------------ --

    50:---------- ------------ ------------ --

    60:------------ ------------ ------------ --

    70:------------ ------             

    根目录@AM335x-EVM:~编号

    您能否告诉我 U-boot 中支持 I2C1上的 PMIC 所需的修改?

    谢谢、

    Divyeshkumar M

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

    尝试在 board/ti/am335x/board.c 中为 I2C1添加类似的内容:
    void do 板检测(void)

    enable_i2c0_pin_mux ();
    I2C_init (CONFIG_SYS_OMAP24_I2C_SPEED、CONFIG_SYS_OMAP24_I2C_SLAVE);

    IF (ti_i2c_EEPROM_AM_Get (-1、CONFIG_SYS_I2C_EEPROM_ADDR))
    printf ("ti_i2c_EEPROM_init 失败\n");


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

    Yordan、您好!

    我已经尝试过这样做。 不管用。

    由于 i2c0未在电路板上使用、我移动了 i2c0上的芯片以进行确认。 在 i2c0上检测到两个芯片。

    因此、我怀疑 i2c1存在一些问题。 您是否会指导我完成我需要在 u-boot 中进行的所有更改、以使 i2c1在 u-boot 级别工作、从而实现内核。

    谢谢、

    Divyeshkumar M

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

    让我在 BBB 上测试这一点、然后我将反馈给您。

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

    感谢你的帮助。

    此致、
    Divyeshkumar
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉耽误你的时间、我遇到了其他任务、无法测试。
    我只是想告诉您、我将在本周结束时尝试并更新。

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

    没问题、再次感谢您的帮助。 非常感谢。

    此致、
    Divyeshkumar M
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我已经成功在 BBB 扩展头上启用了 I2C1。
    [引述]您能否告诉我 U-boot 中支持 I2C1上的 PMIC 所需的修改?
    我实际上无法验证这一点、因为我没有动手操作外部 i2c 器件、该器件应连接到 i2c1。
    您是否在 board.c 的 gpi2c_init 中添加了 enable_i2c1_pin_mux ():
    void gpi2c_init (void)

    /*需要在 BSS 初始化之前调用时*/
    静态 bool first_time = true;

    if (first_time){
    -enable_i2c0_PIN_mux();
    + enable_i2c1_pin_mux ();
    I2C_init (CONFIG_SYS_OMAP24_I2C_SPEED、
    CONFIG_SYS_OMAP24_I2C_SLAVE);
    first_time = false;



    然后在 board.c 中搜索与 TPS 相关的代码、如果需要、将控制器更改为 I2C1。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、更改:
    #define CONFIG_SYS_OMAP24_I2C_SLAVE
    在 include/configs/ti_armv7_omap.h 中 目前有以下定义:
    #define CONFIG_SYS_OMAP24_I2C_SLAVE 1
    将其更改为2、这意味着 I2C_BASE2 0x4802A000

    此外、在 arch/arm/include/asm/arch-am33xx/i2c.h 中更改
    #define I2C_DEFAULT_BASEI2C_BASE1
    更改为
    #define I2C_DEFAULT_BASEI2C_BASE2

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

    感谢您的回答。 我已经在我的文件中尝试了上述所有更改。 我可以在 u-boot 中切换到 i2c1、但 u-boot 无法检测到其中的任何器件。 它显示未检测到设备。

    我认为我尚未在 i2c.h 文件中定义#define I2C_DEFAULT_base I2C_BASE2。 我会做这个更改并尝试一下。

    我将使用结果更新该线程。 我今天是 OOTO、因此我将在周一有机会做到这一点。

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

    我没有听到。 我认为此问题已解决、因此我要关闭此主题。

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

    很抱歉、我忙于其他任务。 我们还决定在下一版电路板中使用 I2C0而不是 I2C1。 如果我有一个空闲插槽、我将加载旧文件并尝试根据您的建议测试 I2C1。

    感谢您的支持。 非常感谢。

    此致、
    Divyeshkumar