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.

[参考译文] Linux/AM3359:如何强制使用 I2C 时钟

Guru**** 2559820 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/597578/linux-am3359-how-to-force-the-i2c-clock

器件型号:AM3359

工具/软件:Linux

您好!

在我的板上、我使用 I2C0与一个组件通信(使用 PRU)。 软重新启动后出现问题。 I2C 组件未复位、并且将信号 I2C0_SDA 保持在低电平。

结果是寄存器 I2C_STAT_RAW 的标志 BB 始终为1。  这是我的结论。

解决方案是什么? 可能会强制时钟允许 I2C 器件传递数据?

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

    是否确定是 AM335x 将 SDA 保持在低电平、而不是外部器件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为是外部器件来保持 SDA 信号(抱歉、我的英语说得很好)、我正在尝试找到解决方案来解决这种情况。

    是否有方法强制使用时钟? 这样、外部器件将完成传输。 还是另一种解决方案?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我发现:

    为剩余的传入位计时8次、然后发送 NACK 和 STOP 使从器件释放 SDA 线路
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这是总线清零操作。 请参阅 AM335x TRM Rev. P 第21.3.8节中的注释。只有 SCL 上的9个脉冲。 这可以通过将 SCL 引脚切换为 GPIO 输出并切换9次来实现。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将使用该寄存器:I2C_SYSTEST。

    这是寄存器 I2C_SYSTEST 的值:110100000:
    SDA_O_FUNC=1
    SCL_O_FUNC =1
    SCL_I_FUNC=1

    IL 会将 ST_EN =1和 TMODE 置于模式="测试 SCL 计数器",因为我之前已经配置了时钟,所以如果我启用此模式,SCL 将自动驱动? 我会尝试!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于寄存器 I2C_SYSTEST,不可能切换 SCL 9时间,因为我可以强制设置0值或高阻抗状态,但不能设置为1:

    SCL 线路驱动输出值。
    在正常功能模式下(ST_EN = 0)、该位无关。
    它始终读取0、写操作被忽略。
    在系统测试模式下(ST_EN = 1且 TMODE = 11)、A 0强制 A
    SCL 线路上的低电平、1将 I2C 输出驱动器置于 A
    高阻抗状态。
    复位后的值为低电平。
    0x0 =在 SCL 数据线上强制0
    0x1 = SCL 输出驱动器处于高阻抗状态
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "处于高阻抗状态的 SCL 输出驱动器"意味着外部上拉电阻器将 SCL 线路拉至1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Thx 用于帮助、通常为:

    在 SYSTEST 寄存器中的0xB005和0xB001之间切换应该会切换 SCL 线路? 我将 SDA 线置于高阻抗状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、应该这样做、除非我认为位14也应该被设置为1。