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.

[参考译文] MCF8316C-Q1:地址恢复之后的 I2C 通信故障|持续 SCL 延展

Guru**** 2893300 points

Other Parts Discussed in Thread: MSPM0L1228

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1640914/mcf8316c-q1-i2c-communication-failure-after-address-recovery-persistent-scl-stretch

器件型号: MCF8316C-Q1
主题中讨论的其他器件: MSPM0L1228

我们与遇到 I2C 通信问题  MCF8316C  非常重要、希望提供任何指导。

测试设置

为了验证我们的 I2C 地址恢复策略、我们特意将主机 MCU 配置为使用不正确的默认 I2C 目标地址 (0x02) 启动通信。 预期的行为为:扫描→找到正确的器件地址→恢复正常运行。

观察到的行为(逐步)

  1. 系统初始化  –~105ms 功率稳定延迟正常完成。
  2. 地址错误的 I2C (0x02)  –收到 NACK;重试 50 次后、会发出 COMM 错误并且状态机进入停止/恢复状态。  (预期)
  3. I2C 地址扫描  –在找到设备  0x01 ;错误已清除、状态转换为 init/batch-init。  (预期)
  4. 批初始化开始  –然而、在起始字节上接收到正 ACK  然后 SCL 被延展为低电平  发生超时。 通信错误升高、状态进入有 I2C_NO_RESPONSE 原因的恢复状态。  (意外)
  5. 已执行总线恢复  –执行 SCL 切换;总线恢复成功、状态重新进入 INIT。  (部分预期,但根本原因不清楚)
  6. 问题循环重复  –在下一次尝试时、在第 1 个起始字节上发送 NACK、然后在第二次尝试时发送正 ACK  SCL 再次延展到低电平  →系统永远不会达到稳定的运行状态。

核心问题

在初始地址不匹配情况和后续地址扫描恢复之后、MCF8316C 似乎会输入  异常 I2C 状态 。 具体来说:

  • 器件间歇性地确认启动条件
  • 好了  保持 SCL 为低电平 防止进一步的 I2C 事务
  • 标准总线恢复(SCL 切换)会暂时清除症状、但会在下一次通信尝试时再次执行

问题

  1. 在 I2C 地址不匹配或总线错误事件后、MCF8316C 是否会将 SCL 保持为低电平?
  2. MCF8316C 是否需要 A  完整下电上电(PWM 移除+重新应用)  才能在发生此类事件后完全复位其内部 I2C 状态机? 如果是、所需的最短 PWM 关断持续时间是多少?
  3. 除了标准 9 时钟脉冲总线恢复之外、是否有特定于 MCF8316C 的建议 I2C 复位或重新初始化序列?
  4. 初始 NACK 风暴 (50 次重试至错误的地址 0x02) 是否使 MCF8316C I2C 外设处于锁定状态、即使在 SCL 恢复后也持续存在?

RecoveryF.zip 

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

    尊敬的 Sravan:

    如前所述、捕获了 AVDD、地址扫描和 GPIO 处理数据后、请在此处更新测试结果。

    谢谢、此致、

    Venkatadri S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如前所述、此处捕获并更新了 AVDD 捕获、I2C 地址扫描和 GPIO 处理数据。 请查看您的 feedback.e2e.ti.com/.../RecoveryF_5F00_AVDD.zip、告诉我您的姓名
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sravan:

    在该捕获中、我们没有看到任何问题、对吧? 即使扫描了 126 次错误地址、器件也会确认下一个正确地址。
    我们想捕获器件针对地址 0x1 执行 NAK 时的 AVDD 和 SPEED 引脚行为。 但是、这在当前共享的捕获中不可见。
    您能否进行相应的验证并重新捕获?

    谢谢、此致、

    Venkatadri S.

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

    尊敬的 Shantaram:

    经过几次测试后、我们确认软件不会报告地址 0x01 的 NACK、这与 RecoveryF.zip 中观察到的行为不同。 但是、SCL 延展仍然持续存在。

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

    尊敬的 Shantaram:

    在 I2C 地址不匹配的情况下、我们的软件现在能够成功恢复和恢复正常的电机运行。 但是、总恢复时间大约为  
    ~μ s (500-800) ms 这比我们的应用所能接受的时间更长。

    观察到的恢复序列(通过逻辑分析仪确认—随附捕获结果)

    1. 地址 (0x02) 错误时出现 NACK 风暴—~50 次重试
    2. PWM 下电上电~PWM 低电平→100ms ~PWM 高电平→30ms
    3. 完整 I2C 地址扫描 (0x01 至 0x7F)→中找到的器件  0x01
    4. 扫描→传输起始字节后的第一次通信尝试、MCF8316C  确认地址  但是  立即将 SCL 拉低
    5. 执行 I2C 总线恢复→9 个 SCL 时钟脉冲(GPIO 切换)
    6. 第二个 PWM 下电上电~PWM 低电平→100ms ~PWM 高电平→30ms
    7. 正常批处理初始化和操作恢复✓

    下面的逻辑分析仪捕获结果显示了完整的序列:

    • 0x02 上的 NACK 活动
    • 0x01 上的地址 ACK、后跟 SCL 延展低电平
    • 成功恢复和正常的批读取/写入事务恢复

    e2e.ti.com/.../Recovery_5F00_ID_5F00_Working.zip

    1. 根本原因:  在对错误地址持续发出 NACK 风暴后、正确地址上的第一个事务会在起始字节上产生 ACK、但 SCL 立即延展为低电平。 是由引起的这种拉伸  MCF8316C I2C 外设  还是处于异常状态、也可能是  MSPM0L1228 主机 I2C 控制器  正在生成延迟/失速时钟? 我们如何区分这两者?
    2. 恢复时间:  恢复时间约为 500ms-800ms、您能帮助我优化此延迟持续时间吗?  
    3. 缓解措施:  是否有建议的任一器件保护序列来防止在 NACK 风暴后进入此 SCL 延展状态(例如地址重试之间的最短空闲时间,主机侧外设软复位或特定的 MCF8316C 复位命令)?

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

    尊敬的 Sravan:

    请您在日志中澄清一下  RECOVERY_ID_0x02_0x7F  —地址 0x7F 是否为“ACK"?“? 我们是否更改了地址?
    指定  RECOVERY_ID_0x02_0x01_0x7F 、我只看到一个写命令、后面是在不重新启动的情况下发送的多个字节。 这似乎很好—我只是试图理解的行为。
    但是、如前所述、请寻找一种机制来隔离多个可疑部分、以便将问题定位。 可以在 M0 代码中注释哪些部分来帮助缩小此范围?
    如果您可以捕获此场景(发生问题的地方)以及、也会非常有帮助  AVDD  降低了噪声 和故障线、因为这些信号可能会揭示一些有用的线索。

    谢谢、此致、

    Venkatadri S.