工具/软件:Code Composer Studio
你(们)好。
执行代码 ReadMultiBytesWithStartAddr()时遇到问题,如所附代码:e2e.ti.com/.../I2C_5F00_ReadTest.zip
有时它工作正常、但有时它会接收数据并发出"否定"信号。 经过逻辑分析,检查发现一些字节似乎“缺少时钟脉冲”,如下所示:
在正常情况下,您将看到如下所示:
当它工作异常时,您将看到如下所示:
为什么呢? 你有什么建议吗?
谢谢。
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.
工具/软件:Code Composer Studio
你(们)好。
执行代码 ReadMultiBytesWithStartAddr()时遇到问题,如所附代码:e2e.ti.com/.../I2C_5F00_ReadTest.zip
有时它工作正常、但有时它会接收数据并发出"否定"信号。 经过逻辑分析,检查发现一些字节似乎“缺少时钟脉冲”,如下所示:
在正常情况下,您将看到如下所示:
当它工作异常时,您将看到如下所示:
为什么呢? 你有什么建议吗?
谢谢。
亨利
C28x 内核中的 I2CA 与连接管理器中的 CM-I2C 不同。由于设计差异、在同一电路板上工作的 C28x-I2CA 无法保证 CM-I2C 正常工作。
根据我在过去2年中处理不同 I2C 问题的经验、我发现在许多情况下、通过更改上拉电阻器、修改总线电容和添加串联电阻器等、意外的 NACK 问题消失了 一般经验法则是、具有一个通常在1Kohm - 2Kohm 附近的较强上拉电阻比具有较弱的上拉电阻器更好。 这就是我提出这些问题的原因。
此致、
曼诺伊
[引用用户="Henry Teng"]
Manoj、
根据您的噪声干扰猜测、我尝试将干扰抑制(I2CMTPR、PULSEL)从1个时钟设置为8个时钟。 幸运的是、它能正常工作! 我将对其进行长期测试。
无论如何、感谢您的提醒。
[/报价]
我已经测试了3个级别:8个时钟、16个时钟、31个时钟。 只有8个时钟可以正常工作。 我仍然对此有疑问。
CM 系统时钟为125MHz、我们应用的 SCL 速度为100KHz。 在31个时钟处设置为偶数毛刺脉冲抑制、这意味着可以抑制高于4MHz 的噪声频率。 带宽仍然是100 KHz 的4倍。
为什么在毛刺脉冲抑制设置的16和31个时钟电平下会再次发生"SCL 脉冲丢失"?
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 并释放它。 即使是该信号的上升时间、如果您详细观看、也会熟悉正常脉冲。
亨利
当 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 是总线电容
此致、
曼诺伊