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.

[参考译文] CCS/TMS320F28386D:CM-I2C 偶尔放置"nack"执行"主多字节读取"

Guru**** 2458360 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/970916/ccs-tms320f28386d-cm-i2c-occassionally-put-nack-while-doing-master-multi-byte-read

器件型号:TMS320F28386D

工具/软件:Code Composer Studio

你(们)好。

执行代码 ReadMultiBytesWithStartAddr()时遇到问题,如所附代码:e2e.ti.com/.../I2C_5F00_ReadTest.zip

有时它工作正常、但有时它会接收数据并发出"否定"信号。 经过逻辑分析,检查发现一些字节似乎“缺少时钟脉冲”,如下所示:

在正常情况下,您将看到如下所示:

当它工作异常时,您将看到如下所示:

为什么呢? 你有什么建议吗?

谢谢。

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

    当这种情况发生时、状态寄存器会说什么? 您能否捕获 I2CMCS 寄存器?

    惠特尼

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

    按照我的示例代码,软件认为整个过程已完成,这意味着它无法看到任何错误状态,如 ADRACK 或 DATACK ...等等

    今天我发现了另一个奇怪的问题。 CM-I2C 模块偶尔缺少时钟、如下图所示:

    我想、这似乎与我发布的原始问题相同。 但这次它使 EEPROM 芯片卡住、软件认为整个过程已经结束。

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

    亨利

    您可能使用的 I2C 总线速度的上拉电阻器有误?

    您的上拉电阻有多强? 您的 I2C 总线电容是多少? I2C 总线速度是多少?

    此致、

    曼诺伊

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

    Manoj、

    首先感谢您的建议。 我们的电路设计在 CPU1中的 I2CA 模块上运行良好、其速度与在 I2CA 模块上运行时保持100KHz。

    电阻器或电容器是否与 CM-I2C 不兼容、而是与 I2CA 模块不兼容? 为什么只有几个时钟丢失?

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

    亨利

    C28x 内核中的 I2CA 与连接管理器中的 CM-I2C 不同。由于设计差异、在同一电路板上工作的 C28x-I2CA 无法保证 CM-I2C 正常工作。

    根据我在过去2年中处理不同 I2C 问题的经验、我发现在许多情况下、通过更改上拉电阻器、修改总线电容和添加串联电阻器等、意外的 NACK 问题消失了 一般经验法则是、具有一个通常在1Kohm - 2Kohm 附近的较强上拉电阻比具有较弱的上拉电阻器更好。 这就是我提出这些问题的原因。

    此致、

    曼诺伊

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

    Manoj、

    供参考、我们的上拉电阻器为3.3千欧。 这是否说明了我所面临的状况? 我想知道为什么只有几个时钟会实现这一点?

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

    亨利

    3.3k 上拉电阻看起来正常。

    示波器图片中的第九个 SD-CX 时钟脉冲看起来像噪声干扰。 这可能会影响 I2C 状态机。 我想找到消除噪声干扰的方法来解决这个问题。

    在上拉电阻器看起来不错的情况下、我会尝试在 SCL / SDA 线路上添加串联电阻器(大约20 - 30欧姆)和50pF。这应该可以消除有噪声的干扰。

    此致、

    曼诺伊

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

    Manoj、

    根据您的噪声干扰猜测、我尝试将干扰抑制(I2CMTPR、PULSEL)从1个时钟设置为8个时钟。 幸运的是、它能正常工作! 我将对其进行长期测试。

    无论如何、感谢您的提醒。

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

    [引用用户="Henry Teng"]

    Manoj、

    根据您的噪声干扰猜测、我尝试将干扰抑制(I2CMTPR、PULSEL)从1个时钟设置为8个时钟。 幸运的是、它能正常工作! 我将对其进行长期测试。

    无论如何、感谢您的提醒。

    [/报价]

    我已经测试了3个级别:8个时钟、16个时钟、31个时钟。 只有8个时钟可以正常工作。 我仍然对此有疑问。

    CM 系统时钟为125MHz、我们应用的 SCL 速度为100KHz。 在31个时钟处设置为偶数毛刺脉冲抑制、这意味着可以抑制高于4MHz 的噪声频率。 带宽仍然是100 KHz 的4倍。

    为什么在毛刺脉冲抑制设置的16和31个时钟电平下会再次发生"SCL 脉冲丢失"?

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

    亨利

    我需要向设计团队核实干扰滤波器行为。此周转时间至少需要5 - 7个工作日才能与您联系。

    根据您的观察结果、8个 CMCLK (I2CMTPR.PULSEL = 5)工作正常、没有任何问题。 但是、16个时钟(或) 31个时钟不起作用。 对吧?

    您是否已经确保 SCL 时钟频率确实为100KHz?

    您能否分享您的 SCL/SDA 范围快照?

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

    Manoj、

    使用125 MHz 的 CM 系统时钟、SCL 速度约为95 KHz、而不是100 KHz、如您所见。

    我非常确信寄存器组与示例接口正确、例如:

    I2C_initMaster (I2C0_BASE、I2C_CLK_FREQ、false);

    另一件事、如果我设置干扰抑制、例如:

    I2C_configureMasterGlitchFilter (I2C0_BASE、I2C_MASTER_glitch_filter_16);

    I2C_configureMasterGlitchFilter (I2C0_BASE、I2C_MASTER_glitch_filter_31);

    有时、它会像之前观察到的那样重现此情况(尖峰大约为400ns)。 在程序的特定步骤中、时钟丢失的情况未得到修复。 它的发生是不可肯定的。

    希望这些消息有用、并感谢转发消息。

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

    亨利

    当 CMCLK 以125MHz 运行时、

    PULSEL = 5 (8个时钟)将能够产生低于(8/125MHz) = 64ns 的可消除噪声干扰

    PULSEL = 6 (16个时钟)将能够产生低于 (16/125MHz)= 128ns 的可消除噪声干扰

    PULSEL = 7 (31个时钟)将能够产生低于(31/125MHz)= 248ns 的可消除噪声干扰。

    如果您的噪声仅为400ns、这几乎是软件噪声滤波器的两倍。 因此、所有这些配置都不会始终如一地提供帮助。 您需要补充铁氧体磁珠、串联电阻和额外的总线电容。 添加额外的总线电容可能还需要您将拉电阻器的尺寸减小至1k (或) 2k

    此致、

    曼诺伊

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

    [引用用户="Manoj Santha Mohan"]

    如果您的噪声仅为400ns、这几乎是软件噪声滤波器的两倍。 因此、所有这些配置都不会始终如一地提供帮助。 您需要补充铁氧体磁珠、串联电阻和额外的总线电容。 添加额外的总线电容可能还需要您将拉电阻器的尺寸减小至1k (或) 2k

    [/报价]

    大家好、Manoj。

    我不同意尖峰来自其他器件。 在错过该尖峰后、您可以看到 SCL 在特定时间段内保持低电平、就像其他正常脉冲在后续占空比中保持低电平一样。 另一方面、CM-I2C 可能会将该总线耗尽400ns 并释放它。 即使是该信号的上升时间、如果您详细观看、也会熟悉正常脉冲。

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

    亨利

    我从未说过尖峰也来自其他器件。 它可能是由 EMI 噪声、交叉耦合、开关噪声、接地弹跳等引起的电路板/电缆伪差、这是产生噪声的可能原因。

    您是否怀疑 CM-I2C 产生噪音干扰?

    此致、

    曼诺伊

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

    大家好、Manoj。

    明白。 我将尝试在 I2C 总线上连接电容器。

    关于这些解释,我是否可以得出这样的结论:这种情况可能是 由噪音引起的,而不是由错误使用的寄存器引起的?

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

    您好、Henry、

    是否有任何慢速器件尝试延长时钟。 您能否以较低的时钟速率运行以进行测试?

    谢谢、

    Joe

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

    亨利

    当 PULSEL > 5时、当 CMCLK 以125MHz 运行时、它满足 I2C 规范。 因此、我不认为您的寄存器配置是原因。 您的噪声干扰约为400ns、远高于软件滤波器可能产生的干扰。 您需要通过添加串联端接电阻器和/或增加总线电容器来找到减少噪声干扰的方法。

    PULSEL = 5 (8个时钟)将能够产生低于(8/125MHz) = 64ns 的可消除噪声干扰

    PULSEL = 6 (16个时钟)将能够产生低于 (16/125MHz)= 128ns 的可消除噪声干扰

    PULSEL = 7 (31个时钟)将能够产生低于(31/125MHz)= 248ns 的可消除噪声干扰。

    此致、

    曼诺伊

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

    [引用用户="Joe Josn2"]

    您好、Henry、

    是否有任何慢速器件尝试延长时钟。 您能否以较低的时钟速率运行以进行测试?

    谢谢、

    Joe

    [/报价]

    我们设计系统中的整个通信过程都可以与 CPU I2CA 模块正常配合使用。 也就是说、我们将底部模块从 I2CA 模块移植到 CM-I2C0模块。 在我看来、您的猜测可能不是原因之一。
    此外、I2C 时钟速率仍保持在大约100KHz。 尽管建议将 CM 系统时钟设置为125MHz、但 I2C 时钟频率实际上设置为95 ~ 100KHz、比 I2CA 模块的原始时钟频率慢一点。

    无论如何、感谢您的建议。

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

    [引用用户="Manoj Santha Mohan"]

    亨利

    当 PULSEL > 5时、当 CMCLK 以125MHz 运行时、它满足 I2C 规范。 因此、我不认为您的寄存器配置是原因。 您的噪声干扰约为400ns、远高于软件滤波器可能产生的干扰。 您需要通过添加串联端接电阻器和/或增加总线电容器来找到减少噪声干扰的方法。

    PULSEL = 5 (8个时钟)将能够产生低于(8/125MHz) = 64ns 的可消除噪声干扰

    PULSEL = 6 (16个时钟)将能够产生低于 (16/125MHz)= 128ns 的可消除噪声干扰

    PULSEL = 7 (31个时钟)将能够产生低于(31/125MHz)= 248ns 的可消除噪声干扰。

    此致、

    曼诺伊

    [/报价]

    大家好、Manoj。

    我收到了您的建议。 当我们将上拉电阻器更改为1.6千欧时、"时钟丢失"仍然会发生。 关于电容器串行连接的建议尚未经过测试。 在我傲慢的看法中、如果它实际上是由 EMI 噪声引起的、那么电容器串行连接可能不会有所帮助。

    我在另一个电路设计(后来称为设计 A)中观察到 I2C 总线、该设计从未发生过意味 着"时钟丢失"的情况。 脉冲的上升时间似乎小于电路(后来称为设计 B)、而电路通常会发生这种情况。

    这种情况是否是"时钟丢失"的关键? TI 是否保证 CM-I2C 模块在 SCL 脉冲的特定上升时间内正常工作?

    谢谢。

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

    亨利

    与设计 B (使用3.3k Ω 拉电阻器)相比、设计 A (使用1.6k Ω 拉电阻器)具有更快的上升时间。 这种行为是预期的、因为较强的上拉电阻会更快地为总线电容器充电。 但是、它无助于降低噪声。 这只能通过包含铁氧体磁珠、串联电阻和增加总线电容器来实现、这些总线电容器用作低通滤波器。 当您增加总线电容时、通常需要具有更强的上拉电阻以缩短上升时间。

    我会尝试使用33欧姆的串联端接电阻器和50pF 的总线电容、看看问题是否消失。 否则、您可能需要尝试使用不同的串联电阻器/总线电容组合。

    RS1、RS2是串联端接电阻器。 这些串联电阻器必须尽可能靠近器件引脚放置。

    CP 是总线电容

    此致、

    曼诺伊