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 总线超时问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1446977/am62a7-i2c-bus-timeout-issue

器件型号:AM62A7

工具与软件:

您好!

SDK:09.01.00

EVM:AM62A SK

我们在基于 AM62A SK EVM 的定制电路板上使用了 I2C 总线2上的摄像头传感器。 电路板启动时、有时在 I2C 线路上未检测到传感器(通常15次中有1次发生)。 发生这种情况时、电路板会显示以下错误。

Fullscreen
1
2
[ 2.975722] omap_i2c 20020000.i2c: controller timed out
[ 2.975747] ar0235 2-0036: failed to read chip id 1850
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

检查 Saleae (协议分析器)器件上的信号后发现、当控制器在 SCL 未变低后将 SDA 线拉至低电平时、 由于不生成 i2c 协议的启动条件、可能是 i2c 事务正被超时。 下面是这种情况下 Saleae 的屏幕截图。

我正在附上 Saleae 完整的日志和票证。 此问题发生1次(15到20次尝试)的原因可能是什么?

e2e.ti.com/.../5430.logs.zip

如果需要其他信息、请告诉我。

此致、

Jay

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

    您好、Jay:

    同一摄像头是否能在 AM62A SK EVM 上可靠地工作?

    谢谢!

    建中

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

    尊敬的建中:

    我们在将摄像头传感器与 EVM 集成和测试时也发现了 EVM 上的相同问题。

    此致、

    Jay

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

    Jay、

    您的摄像头板可能在 I2C 设计方面存在一些问题。 我给 I2C 专家讲一讲、助您一臂之力。

    此致、

    建中

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

    您好、Jay:

    收集更多信息

    您在使用什么摄像头?

    该 I2C 总线上还有其他东西吗?

    看起来总线当前设置为400kHz。 您是否可以选择将时钟速度降低到100kHz、看看这是否会改变任何行为?

    分析 Saleae 波形捕获  

    您能给我们详细介绍一下您在 Saleae 波形中捕获的具体内容吗?

    该数据采集大约持续400秒。 从34秒开始、我看到一条 start 命令、它看起来像我预期的那样:

    然后、您指出的波形大约为396秒、即在最后一次 I2C 通信后40秒左右:

    只是为了确认、我们知道396秒标记处的最后一个波形与"控制器超时"消息相关联?

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

    需要注意的是、我在查看 I2C 波形方面没有太多经验、4毫秒对于启动条件来说是很长的时间。 在波形中其他地方"良好"情况下、电流大约为2usec。 我不知道如何用目前提供的信息来解释这一输出。

    如果您有兴趣添加 debug 语句、内核驱动程序将抛出该超时错误:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    drivers/i2c/busses$ vi i2c-omap.c
    /*
    * Low level master read/write transaction.
    */
    static int omap_i2c_xfer_msg(struct i2c_adapter *adap,
    struct i2c_msg *msg, int stop, bool polling)
    {
    ...
    /*
    * REVISIT: We should abort the transfer on signals, but the bus goes
    * into arbitration and we're currently unable to recover from it.
    */
    if (!polling) {
    timeout = wait_for_completion_timeout(&omap->cmd_complete,
    OMAP_I2C_TIMEOUT);
    } else {
    do {
    omap_i2c_wait(omap);
    ret = omap_i2c_xfer_data(omap);
    } while (ret == -EAGAIN);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    但 OMAP_I2C_TIMEOUT 值默认设置为1秒、因此我不确定它与 SDA 上没有任何时钟脉冲的4毫秒脉冲(假设总线上没有其他 I2C 主器件)的关系。

    此致、

    Nick

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

    您好、Nick。  

    感谢您的答复。

    仅为了确认、我们可以确定396秒标记处的最后一个波形与"控制器超时"消息相关联?

    是的、您回答正确。 最后一个脉冲与"控制器超时"消息相关联。  

    您是否可以选择将时钟速度降低至100kHz、看看这是否改变了任何行为?

    当然。 我们也会尝试这种方法。

    [报价 userid="280115" url="~/support/processors-group/processors/f/processors-forum/1446977/am62a7-i2c-bus-timeout-issue/5552304 #5552304"](假设总线上没有其他 I2C 主控器件)[/QUOT]

    正确。 只有一个主站(AM62A7处理器)。

    是的、正如您在最后一个脉冲中看到的、SDA 线被拉至低电平、但 SCL 线未变为低电平、因此未发生 I2C 启动条件。 那么、在将 SDA 线拉低后、主器件无法将 SCL 线拉低的原因可能是什么? 如果从器件尚未就绪、是否会发生这种情况? 或者可能还有其他任何原因? 如果可能还有其他原因、请告诉我们、以便我们可以根据其他可能进行调试。

    此致、

    Jay  

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

    您好、Jay:  

    您是否分享了 I2C 接口相关原理图。

    您是否具有所需的上拉电阻器。 我假设您已经读取了 I2C 异常、并添加了一个串联电阻器来控制下降时间。

    此致、

    Sreenivasa

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

    尊敬的  Sreenivasa:

    请查找 I2C 接口的原理图和下降和上升时间波形。  

    您是否具有所需的上拉电阻

    是的、我们使用了所需的上拉电阻器。

    [报价 userid="177086" url="~/support/processors-group/processors/f/processors-forum/1446977/am62a7-i2c-bus-timeout-issue/5553970 #5553970"]假设您已经阅读了 I2C 异常并添加了一个用于控制下降时间的串联电阻器。

    我们不知道这一点。 您能否提供与此相关的文档?

    e2e.ti.com/.../IMG_5F00_SENSOR_5F00_DET.pdf

    此致、

    Jay

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

    您好、Jay:  

    请参阅数据表的以下部分。

    7.10.5.12 I2C

    –例外情况:
    •与这些端口关联的 IO 不符合 I2C 中定义的下降时间要求
    因为它们是使用性能更高的 LVCMOS 推挽 IO (原来是这样)实现的
    旨在支持无法通过 I2C 兼容 IO 实现的其他信号功能。 。
    这些端口上使用的 LVCMOS IO 的连接方式可以对开漏输出进行仿真。 减少
    通过强制一个恒定的低电平输出并禁用输出缓冲器进入 Hi-Z 来实现仿真
    未定义状态。
    •I2C 规范定义了最大输入电压 VIH (VDDmax + 0.5V)、该值超过
    器件 IO 的绝对最大额定值。 系统的设计必须能够确保产生 I2C 信号
    切勿超过本数据表绝对最大额定值部分中定义的限值。

    此致、

    Sreenivasa

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

    尊敬的  Sreenivasa:  

    感谢您的分享。

    我想我找到了超时问题的原因。 这是 void 消息。 因此、 控制器处于锁定状态并提供超时错误。 我在下面从处理器的 TRM 中找到。

    当我 再次观察 Saleae 波形时、发现 i2c 在 第396秒的最后一个波形中出现超时错误时消息为空状态。 此映像来自之前共享的 Saleae 日志。

    专家可以提供如何防止 I2C 总线上出现 void 消息的建议吗?

    此致、

    Jay

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

    您好、Jay:  

    感谢您提供的意见。

    专家可以提供如何防止 I2C 总线上出现无效消息的建议吗?

    您能否启动新主题、更新后的标题将分配给合适的专家。

    此致、

    Sreenivasa

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

    您好、Jay:
    我还希望您从硬件方面验证一件事:您能否确认 void 消息实际上来自 AM62Ax、而不是 I2C 总线上的其他内容?

    我希望该测试看起来像是将一个电阻器与 SDA 线串联、并测量电阻器每一侧的电压。 电阻器的哪一侧先开始更改电压?

    您好、Sreenivasa、

    关于 Jay 如何设置上述测试、您是否还有其他意见? 例如、有任何关于电阻器设置的建议吗?

    此致、

    Nick

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

     嘿、Sreenivasa、

    我可以让您 在这里对 Jay 的后续问题发表评论吗?

    "我还希望您从硬件方面验证一件事:您能否确认 void 消息实际上来自 AM62Ax、而不是 I2C 总线上的其他内容?

    我希望该测试看起来像是将一个电阻器与 SDA 线串联、并测量电阻器每一侧的电压。 电阻器的哪一侧先开始改变电压?'

    您能否提供电阻值和一些原理图来测量数据? 另外、如果还需要测量任何其他内容、请告知我们。 我们的硬件团队希望再次验证这一点。  

    谢谢!

    Nick