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.

[参考译文] TM4C1294KCPDT:I2C SCL 频率

Guru**** 2550550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1011700/tm4c1294kcpdt-i2c-scl-frequency

器件型号:TM4C1294KCPDT

大家好、团队、

我的客户使用具有外部16MHz 振荡器和120MHz 系统时钟的器件。

客户使用快速模式(400kbps)和快速模式增强版(1000kbps) I2C。

客户测量了 I2C 信号的时钟频率、但他们观察到的是快速模式下为387kHz、超快速模式下为922kHz。

您能告诉我在这些条件下的典型(或目标) SCL 频率吗?

如果还提供其变体数据、那将会有所帮助。

此致、

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

    首先、您没有提到客户是在主模式还是从模式下使用 I2C。 假设 TM4C1294是主器件、SCL 频率将与时钟源一样准确。 使用一个外部16MHz 晶振应该会使它非常精确。 那么、以下是我认为您的客户可能测量不同频率的可能原因。

    1) 1) PLL 配置不正确、系统时钟不是120MHz (我认为这种情况不太可能、但应该仔细检查)

    2) 2)从器件正在进行时钟扩展

    3) 3)客户正在使用频率计或示波器的频率功能测量 SCL 时钟。 I2C 时钟是不连续的、并且在两次传输之间可能保持高电平。 这会导致测量的平均时钟速率低于每个位的时钟速率。 让客户在传输过程中测量位的时钟周期并计算周期中的频率。

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

    您好、Bob-San、

    感谢您的评论。

    >首先,您没有提到客户是在主模式还是从模式下使用 I2C。

    很抱歉、缺少信息。 客户使用 TM4C1294作为主设备、正如您所设想的那样。


    我从客户那里得到波形。 有关快速模式 SCL、请参阅下面的附件。

    我不认为(2)从器件的时钟拉伸或(3)测量方法是频率差异的原因。

    关于(1) PLL 配置、客户观察到 SPI 时钟(TM4C1294是主器件)的频率符合预期。 因此系统时钟似乎配置正确。 客户将确认这一点、以防万一。


    我让客户确认 I2C 毛刺脉冲滤波器设置、但 MTPR 寄存器的脉冲配置为零。

    如果你能提出其他可能的理由,我将不胜感激。

    此致、

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

    如果不是时钟拉伸、而不是测量技术、则很可能是配置问题或晶体问题。 您提到它们使用的是外部16MHz 晶体。 它们能否测量外部晶体的频率?  应在连接到 OSC1引脚89的一侧测量该值。

    他们如何配置 PLL? 是:

        g_ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_16MHZ |
                                           SYSCTL_OSC_MAIN |
                                           SYSCTL_USE_PLL |
                                           SYSCTL_CFG_VCO_240), 120000000);
    

    此示例仅对 TivaWare 版本2.2.0.295有效。 如果他们不使用此版本、他们使用的是哪个版本?

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

    您好、Bob-San、

    感谢您的评论。 客户测量了 OSC1、引脚89并在波形下方提供。

    它以16MHz 运行。(客户提到波形舍入可能是由于探头电容、实际波形可能优于它)

    您能否检查此波形将导致 I2C 频率差异?


    关于 PLL 配置、客户现在正在与软件工程师确认、并将提供反馈。

    此致、

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

    波形的形状与我无关。 频率看起来是正确的。 我将等待 PLL 配置信息。

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

    您好、Bob-San、

    感谢您确认分机16MHz。

    客户已确认以下 PLL 配置、120MHz 系统时钟由外部16MHz 生成。 返回值为120MHz、因此客户认为没有问题。

    它们使用的是 Tivaware 版本2.2.0.295。

    如果您发现任何问题、请告诉我。

    此致、

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

    遗憾的是、我没有使用由16MHz 外部晶振供电的 TM4C129器件的硬件。  配置 I2C 后,您是否会要求他们在 I2C 主机定时器周期(I2CMTPR)寄存器中提供该值?

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

    您好、Bob-San、

    客户确认并提供了以下图片。 I2C2用于1M (0x5)、其他用于400k (0xE)。

    此致、

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

    这些是主时钟时间周期寄存器的正确值。 波特率是系统时钟的数字分频。 它将与系统时钟一样准确。 时钟生成中没有频率的模拟偏斜。  我唯一能想到的是即使 SysCtlClockFreqSet()函数正确选择了主振荡器,PIOSC 也被切换到 PLL 时钟源。 这可以通过查看 RSCLKCFG 寄存器中的值来检查。 PLLSRC 位、27-24、应该等于0x3。

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

    您好、Bob-San、

    客户确认 RSCLKCFG-PLLSRC 位和 MOSC 是 PLL 时钟输入源。 请参见下图。


    客户还移除了从器件并确认了 I2C 时钟、但客户仍然看到不同的时钟频率。

    您能否告诉我是否存在导致频率差异的其他可能性?

    此致、

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

    我仍然看不出差异的位置。 我没有带16MHz 晶体的硬件、但我将在下周上班时使用120MHz 系统时钟和25MHz 晶体测量 I2C 时钟频率。 我目前仍在家里工作、无法访问准确的范围。

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

    您好、Bob-San、

    如果您在办公室时能够检查您身边的行为、我将不胜感激。

    此致、

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

    您好、Bob-San、

    您是否有机会确认该行为?

    此致、

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

    我能够重复您的客户看到的内容。 它是时钟扩展、但不是从器件扩展的。 周期差异是由上拉电阻器的上升时间引起的。 对于主器件、从释放时钟到上拉电阻器将时钟线引入 VIH 的时间看起来像是时钟拉伸、并且将增加时钟低电平周期。 您可以通过增大上拉电阻器的电阻来验证这一点、您将看到 SCL 周期增加。  

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

    您好、Bob-San、

    感谢您的确认。

    我知道它是由主器件进行的时钟拉伸。 如何消除时钟拉伸? 如果减小上拉电阻可以校正 SCL 频率、您能告诉我上拉电阻的适当值吗?  

    此致、

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

    时钟拉伸无法移除。 它是 I2C 协议固有的。 使用强上拉电阻器可以将其最小化、但这会增加功耗。 客户在387KHz 下沟通时是否有困难、或者他只是想知道差异的原因吗?

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

    您好、Bob-San、

    感谢您提供信息。 我知道时钟拉伸无法消除。

    客户想知道它显示与数据表不同频率的原因。 我将向客户告知此信息、并确认时钟速度是否存在任何问题。 当我遇到任何具体问题时、我会再向您回复。

    此致、

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

    您好、Bob-San、

    我与客户确认、降低 I2C 频率没有什么特别问题、因为他们看不到任何问题。

    他们希望了解以下内容。

    • 主器件的时钟扩展是否旨在通过扩展时钟低周期来保持通信稳健性、从而在硬件配置导致上升沿四舍五入的情况下也放宽时序裕度?
    • 您是否有参考信息、上升时间会延长多长时间的时钟低电平周期?

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="109338" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1011700/tm4c1294kcpdt-i2c-scl-frequency/3758875 #3758875"]主器件的时钟拉伸目的是通过拉伸时钟低周期来保持通信稳定、从而在硬件配置导致上升沿四舍五入的情况下也可放宽时序裕度?

    我不能说这是原始意图的一部分。 确实、它会延长低电平时间、以缩短时钟的上升时间。 时钟拉伸电路的设计固有的特性是、它将在高电平周期内保持对时钟的计数、直到在 SCL 引脚上看到高电平。 它无法判断从 SCL 开漏驱动器关断到 SCL 引脚上的电平变为高电平之间的延迟是由电阻器-电容器延迟引起的、还是由主动将 SCL 线路保持在低电平的从器件引起的。

    [引用 userid="109338" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1011700/tm4c1294kcpdt-i2c-scl-frequency/3758875 #3758875"]您是否有参考信息,说明上升时间会延长多长时间的时钟低电平周期?

    它是上拉电阻器强度、SCL 网络上的电容和 SCL 引脚的 VIH 阈值这三个方面的函数。 该阈值将介于0.5V 和2.4V 之间、通常接近1.5V、但会随工艺、温度和电源电压的变化而变化。

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

    您好、Bob-San、

    如您所述、客户观察到 SCL 频率随上拉电阻器一起变化。

    上拉电阻器[欧姆] 470 1.1k 2.4k 4.7K
    周期时间[us] 1.034 1.052 1.084 1.138.
    频率[kHz] 967.118 950.5703 922.5092 878.7346
    高电平时间[ns] 436 450 484 546
    低电平时间[ns] 591. 591. 591. 590
    上升时间[ns]
    (1.14V~2.14V)
    6.4. 17. 36. 80

    客户看到 SCL 低电平周期是固定的、高电平周期随上拉电阻器一起变化、而您说低电平周期将发生变化。

    在器件的时钟拉伸过程中、客户观察结果是否正确?

    此致、

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

    是的、这是由上拉电阻器的上升时间引起的时钟拉伸。 我将其称为拉伸的低电平周期、因为器件中的主 I2C 电路会将其视为低电平周期、直到 SCL 线路上升到 VIH。 在这种情况下、上升时间实际上随着上拉电阻的增加而延长。 主器件将 SCL 保持为低电平的时间是恒定的。 SCL 在再次变为低电平之前高于 VIH 的时间是恒定的。 SCL 释放到达到 VIH 之间的时间是增加的时间。