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.

[参考译文] AM6548:我们如何启用 I2C 恢复补丁?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1509338/am6548-how-can-we-enable-i2c-recovery-patch

器件型号:AM6548

工具/软件:

尊敬的 TI:

我们将 AM654与 Linux RT SDK 7配合使用、因此遇到了 RTC 在启动至操作系统后无法正常工作的问题。

故障率非常低、需要重新启动器件才能重现此问题。

我们发现这可能是由 i2c 信号引起的。

我们还找到了一个 API"i2c_generic_scl_recovery"。

我们尝试将此 API 添加到 i2c-OMAP-Lc 中、但它似乎无法正常工作。

我们想知道是否直接调用 API、DTS 文件中是否有任何更改?

以下是用于 i2c 的 dts:

main_i2c1_pins_default:main-i2c1-pins-default{
pinctrl-single、pins =<
AM65X_IOPAD (0x0008、PIN_INPUT_PULLUP、0)/*(B21) I2C1_SCL */
AM65X_IOPAD (0x000c、PIN_INPUT_PULLUP、0)/*(E21) I2C1_SDA */
>;
};

&main_i2c1{
状态="正常";

pinctrl-names ="default";
pinctrl-0 =<&MAIN_i2c1_pins_default>;
时钟频率=<10000>;

s35390a:RTC@30
兼容="SiI、s35390a";
REG =<0x30>;
};
};

该补丁是否需要为 i2c 进行任何 GPIO 设置?

但我们对 i2c1使用了 B21和 E21、这两个引脚没有 GPIO 特性。

Eric

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

    您好、Eric、

    设定支持期望

    要设置支持期望:SDK 7太旧了、我们无法在论坛上提供支持。 我仍然会尝试帮助你,但我将无法在我自己的硬件上运行测试,等等.

    请提供有关您正在观察的行为的更多详细信息

    "RTC 无法正常工作"是什么意思? 您观察到什么行为? 是否存在任何错误代码? 等

    i2c_generic_scl_recovery 怎么办?  

    该功能是为了在 SDA 线路保持低电平时恢复 I2C 总线。 I2C 控制器在 SCL 线上发送9个时钟脉冲、然后将 SDA 保持为低电平的任何外设都应释放总线。 源代码位于 https://elixir.bootlin.com/linux/v6.12.6/source/drivers/i2c/i2c-core-base.c#L223 

    1)您的问题是否由 AM65x 将 SDA 线保持在低电平以外的其他原因引起? 如果是、则此功能对您没有帮助

    2)此功能已在 Linux SDK 7.x 中实现 尝试在 I2C 驱动程序中搜索"recover_bus":
    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/i2c/busses/i2c-omap.c?h=linux-5.4.y 

    此致、

    Nick

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

    您好 Nick Saulnier

    1、此问题发生在我们的开机/关机测试期间,重现率很低。 不幸的是,我们只有 dmesg 作为漂白。 它告诉 I/O 错误。

    [ 1.402878] OMAP-Li2c 2000000.i2c:100kHz 时总线2 rev0.12
    [ 3.424486] OMAP-Li2c 2010000.i2c:控制器超时
    [3.424502] RTC-s35390a 3-0030:重置芯片时出错
    [3.424991] RTC-s35390a:探测器3-0030失败、错误-5
    [ 3.425012] OMAP-Li2c 2010000.i2c:100kHz 时总线3 rev0.12

    2.根据我们的经验,它可以通过发送9个时钟脉冲释放总线来解决。

    在我们的测试中、AM65将保持通电/断电状态。 我们有一个电容器来保持 RTC 始终处于活动状态。 发生此问题时、我们怀疑 i2c 脉冲未正确结束、并且 RTC 可能会进入未知状态。  

    是的、我已经在 SDK7.x 中找到了它。  这就是为什么我问我们是否需要修改 DTS 文件才能正常工作。

    在这种情况下、您认为此函数可以提供帮助吗?

    谢谢。

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

    您好、Eric、

    有意思。 出于好奇心、这是受控断电(例如 Linux 的关断命令)、还是通过切断电源然后重新供电来对电路板进行下电上电?

    此致、

    Nick

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

    Nick Saulnier

    我们使用外部电源对 AM65进行下电上电、而不是使用 Linux 命令。

    Eric

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

    您好、Eric、

    我在 i2c-OMAP-Lc 探针函数中没有任何内容可检查 I2C 总线的状态并在需要时将其恢复。

    今天我没有时间查看任何 RTC 代码、但您可能需要检查该代码以了解它如何处理总线恢复。 如果它不调用 I2C 恢复函数、您可以尝试修改该驱动程序、并查看行为是否有所改善。

    此致、

    Nick

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

    您好 Nick Saulnier

    是、我尝试在源代码中添加 I2C 恢复功能、但似乎无法正常工作。

    但我没有尝试修改 dts 文件。

    这就是为什么我询问我们是否需要修改该线程中的 dts 文件。

    由于我们使用的是 专门用于 I2C 的 B21和 E21、因此我想知道它们是否适用于 I2C 恢复功能。

    因为它需要 SDA 和 SCL 作为 GPIO 角色来发送脉冲以释放总线。

    Eric