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.

[参考译文] TM4C129XNCZAD:TM4C I2C 主器件生成短 SCL 时钟脉冲/毛刺脉冲

Guru**** 2424730 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/711562/tm4c129xnczad-tm4c-i2c-master-generates-short-scl-clock-pulses-glitches

器件型号:TM4C129XNCZAD

您好!

我知道这一主题已经在几个主题(e2e.ti.com/.../569566)中讨论过

e2e.ti.com/.../1799603

但是、我仍然缺少问题根源的解释、因此我的情况如下。

我将 TM4C129用作 I2C 主设备。 毛刺脉冲滤波器设置为8 (在120MHz 的系统时钟下运行)、I2C 的频率为100kHz

那么、我在这里看到的情况与其他具有短 SCL 脉冲的线程中描述的情况相同:

我知道信号质量相当差、时钟的上升时间超出限制。

但我不理解的是、主器件中止启动时钟边沿并将其拉低的原因。 此时、我100%确定主器件将 SCL 通道保持在低电平、因为从属器件在执行时钟扩展时使用不同的低电平。

我的电流假设是、SCL 的上升时间对于主器件来说太慢、因此它假定一个从器件将时钟保持在低电平。 然后主器件将 SCL 自身保持为低电平、以保持 SCL 切换的常规时序。 但是、我在数据表中找不到有关此行为的任何信息。

那么、您能否确认我的理论、或者如果错误、您能否解释 TM4C 主器件在中止时钟边沿后将时钟保持在低电平的情况?

非常感谢

Fabian

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

    要更好地了解确切的系统设置、请回答以下几个问题:

    总线上是否有其他主器件? 如果是、干扰是否可能来自另一个主器件?

    您使用的是什么值的上拉电阻器?

    另外、为了便于阅读、我们的 I2C 应用手册的第6部分还对干扰抑制提出了一些意见(与您的问题没有直接关联、但对扩展 DS 内容很有用): www.ti.com/.../spma073.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、感谢大家的快速共振。

    我们有一个4k7上拉电阻器、我知道它太高了。 正如我说过的、我知道上升时间超出了限制。 因此、我们将对其进行肯定的调整

    但是、我想理解的是、在上升沿期间、TM4C 会再次将时钟拉低。

    我们使用的是单主系统、因此我100%确定干扰来自 TM4C。

    关于毛刺脉冲抑制、数据表对我来说并不完全清楚:据我所知、当数据移入/移出 IO FIFO 时、它会影响输入(或写入期间的输出)路径。

    我不希望它影响时钟生成。 或者、我在这种解释中错了吗?

    此致

    Fabian

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

    是否可以询问"允许的 SCL 脉冲"是否始终出现在该特定的"位位置"-或(仅限)这两个 I2C SDA 代码事务?    

    您是否可以将 SDA 输出更改为"两个其他(合法) SDA 代码-并注意(是否有任何变化)?   (特别是位位置-在该位置 SCL 变为"允许的"。)

    如果您将完全相同的 I2C 事务应用于 不同的 I2C 芯片、会发生什么情况?   (使用的模型不同)  实际上、从器件应该具有"有限的能力"来影响 SCL -但"发生了"(我们已经看到过-两次了!) -和表示"非法"从属方行为。   

    此处提出的建议旨在:

    • 尽可能删除"有效/非法"从器件响应
    • 深入了解 MCU (以某种方式)对 特定的"位位置或 SDA 序列"具有"敏感"状态-这可能会导致此类(不必要)行为。

    为了确保" MCU I2C 模块的最稳定性能"-我们认为需要 在(进一步)使用之前执行'I2C 模块复位功能"- 这应该确保'适当的初始运行条件..."

    和您一样、我们倾向于选择"MCU 问题"、此处的方法旨在"公平"地确定"MCU 独自"是否位于可疑名单之上...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SCL 通道中的毛刺脉冲随机分布在不同的位位置以及不同的寻址从器件上。

    我在这种 SCL 干扰上注意到的是、SCL 的上升沿存在一些失真(由于外部噪声)、这会导致它的上升速度比正确生成 SCL 的其他情况慢一些。

    这就是我假设 MCU 中止脉冲并再次将 SCL 拉至低电平的原因。 在我看来、这是一位主器件的合法行为、例如、当它假定/检测到有人将 SCL 拉低时、例如执行时钟拉伸的从器件。
    在这种情况下、我假设 MCU 会将 SCL 保持在低电平、直到其内部计时器进入下一个周期以生成新的有效时钟脉冲。
    如果是这种情况、我看不到这种行为有任何问题、因为这一切似乎都是有效的 I2C 总线。 在这种情况下、问题的根源是我们无论如何都必须处理的不良信号质量。 如果情况不是这样、我们必须寻求另一个解释。

    那么、您能不能对这一理论进行反驳或反驳。

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

    我同意问题源于不良的信号质量。 您对 TM4C 端的 I2C 行为的描述理解没有任何缺陷

    我认为 CB1和我自己都更关注如何帮助您解决这个问题、以便故障不再困扰您的系统。

    更改上拉电阻器将是手头的最大任务、有望解决该问题。 此外、您还可以分离从器件以验证 MCU 是否也不会导致任何不良行为。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在第一个通过的'DA 字节'中、是否出现这些"被破坏的"SCL 时钟(任何一个)?   (即、在生成'ACK'之前-一个正确寻址的从器件-此从器件正在正常运行)

    在我看来、I2C 主设备施加"上升 SDA 信号"的能力令人怀疑。   提供 SCL 的"适当"电流监控几乎肯定会有所帮助-以及在"正常与运行" SCL 事件期间测量的对比度。

    您将4K7指定为上拉 R 值-是否(实际)和(最近)测量过该值?    除非您的 I2C 总线上有许多器件(使其充满电容)- 4K7是我们(通常)的经验证明的成功。   还必须注意的是、这还没有解释、那就是"同样的4K7价值如何成功发挥作用-绝大多数  时间!"

    您的 I2C 总线上驻留了多少个器件-并且必须全部"加电和供电"-即使在-尤其是-只有一个器件将(立即)被寻址的情况下也是如此?  (许多 I2C 器件可由单个 MCU GPIO 供电-当然也可由驱动到 xstr 的 GPIO 供电。 缓冲器...)

    而且-临时切换到另一个 I2C 端口-以及"测试这种情况的重叠吗?"   我不认为完全正确的" MCU 供电"已经过验证-"电源"始终是"第一个也是最重要的部分"-来"测试/验证!"   如果可能、并且您同意尝试此类测试、则应从 MCU 的 A 侧"监听侧"使用 I2C 引脚!   (MCU 的每一侧(有些)由内部电源路由方案隔开...)

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

    您好、Ralph、您好、CB1

    我们已将上拉电阻降低至1k、从而得出上升时间处于所需限制范围内。 我们还将串行电阻器(从100R 降低到47R)与 TVS 结合使用、以防止外部 ESD 脉冲。

    从器件周围有一些东西。 我们之所以具有如此高的负载、是因为 I2C 总线的布线穿过多个 PCB 和多个连接器。 所有从器件均持续供电。 我不认为电源是瓶颈、因为电源被高估了。

    随着上拉电阻的降低、到目前为止我们还没有发现任何问题。 但这不是可靠的信息、因为很难触发三振毛刺脉冲。 因此、我需要一些时间、希望下周能为您提供更好的测量结果。 因此、这是预期中的明显解决方案、到目前为止非常清楚、但我仍想了解 SCL 通道在上升沿被拉低的原因和原因

    @ CB1:

    "还必须注意的是、这种情况还没有解释、那就是"同样的4K7价值如何成功地发挥作用-绝大多数  时间都是这样!"

    这并不是完全正确的:正如我在上一篇文章中所说: "我在这种 SCL 干扰上注意到的是、SCL 的上升沿存在一些失真(由于外部噪声)、这会导致它的上升速度比正确生成 SCL 的其他情况慢一些。" 总之:使用4k7电阻器时、我们位于规格的边缘、上升时间(~1000ns)、并且有一点噪声、我们将超过1000ns 的指定上升时间。 当 MCU 意识到上升时间明显受到违反时、这就是将 SCL 再次拉低的理论。

    因此、我不会说 I2C 主器件会强加较慢的 SCL 上升时间、而是具有4k7上拉电阻的系统已经超过或至少接近要求的边缘。

    此致

    Fabian

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

    我(现在)-必须接受您对4K7上拉电阻"可能"不足的解释。

    也就是说-已经"在这个领域"了一段时间(并且享受到了"某些"的成功)-您的描述、"I2C 信号-跨多个 PCB 和多个连接器"-"非常关心我!"   我们知道"为何选择了这样的(要求使用 I2C 路径)"-但这种设计面临"高风险"-可能会遭受"加速"故障。    (这是我公司(重复)的调查结果、也是我们(许多)客户的调查结果。)

    在这种情况下、"多板和直通板互连"条件下、人们认为、战略性放置的"I2C 总线放大器/中继器"和"质量板对板互连"通常会"提高"扩展"I2C 系统的稳健性"(以及性能)...  有些甚至会定期通过电路板互连驱动"更高的电流"、以保持连接器的导电性"湿性"。   (但电路板尚未"启动并完全运行/运行"!)    也应抵制@高'I2'数据速率(始终存在)的诱惑。    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们不需要运行高数据速率。 100kHz I2C 模式完全满足了我们的需求。
    我们知道这种系统的问题、但由于 PCB 上缺少空间、一组 I2C 放大器不是一个选项。

    我们可以通过将上拉电阻降至1k 来很好地处理系统。

    我只需要了解、由于上升时间差、毛刺脉冲下的突然下拉低 SCL 通道来自 MCU、以接受这种解决方案。 如果出现这些故障的另一个原因、我们必须进一步深入研究系统、因为我们无法假设1k 上拉电阻器将解决此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    建议的 "使用(另一个) MCU 的 I2C 通道" (即使是一个临时被黑客攻击) 重复这种"跳动的 SCL 谐振"-实际上可能证明了"预期的 MCU 对有缺陷的"非线性上升时间"的响应!"   "应用此类 MCU 行为"-通常是"意图证明"-(看起来)是 您所寻求的"正是...

    也许——更有资源/灵感——提高上拉 R 的价值——应该“夸大这种“运行的 SCL 信号”的到达!   (如果确实是这样的 SCL "钳位"、则是出于设计目的。)   仍然-切换到第二个 I2C 通道(暂时)证明是理想的。   ("实际"确认"意向"。)    没有别的-提供这种程度的确认...

    这可能需要您进行实验。   (只有您-拥有您的独特系统-因此可以在这些(高度)独特的条件下进行"测试/验证"。)

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

    如果上升沿在正确的时间范围内未成功完成、则从您的图像中可以看到这种情况、这只是 TM4C 主站尝试纠正通信的结果。 SCL 线路被拉低、就像主器件负责总线时那样、目的是使通信恢复到适当的时序模式。

    失败上升沿的可能原因包括我们之前讨论的上拉电阻。

    由于减少下拉电阻器已解决问题、因此这似乎是根本原因。 测试时还应跟踪总线上的容性负载、因为这也会限制上拉电阻器的尺寸。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很酷、感谢大家确认主器件将 SCL 拉至低电平以重新建立适当的时序。

    我没有看到过减少上拉电阻的任何问题、因此我假设这是唯一的根本原因、没有其他副作用。

    感谢你们两人在本主题上提供的广泛帮助

    此致
    Fabian