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/TM4C1290NCPDT:I2C SCL 周期偏差。

Guru**** 2460960 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/653826/ccs-tm4c1290ncpdt-i2c-scl-period-deviation

器件型号:TM4C1290NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

工具/软件:Code Composer Studio

测量 I2C 时钟周期、显示了使用数据表中提到的公式计算出的偏差:SCL_PERIOD = 2×(1 + TIMER_PRD)×(SCL_LP + SCL_HP)×CLK_PRD

我们使用了快速模式和 60MHz 的系统时钟、计时器周期设置为7。 计算结果为375kHz、但我们在铲斗上测量了365kHz。

计算出的乘法因子为160。 为了达到365kHz 的频率、乘法因子应为164。 使用上述公式无法实现这一点。

您对此偏差是否有任何可能的解释?

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

    如果您描述"为什么您需要如此高的精度?"、您的"问题"是否会更具吸引力(甚至更如此)?
    您的 I2C 从设备(受此影响)是否完全偏离10/375的"偏差?"

    这种准确度是否有(真实的)理由-您的"确认您的系统时钟频率"是否证明"调查的第一顺序?"   您可以使用 MCU 计时器向您的(假定的)外部晶体电路输出一个"系统时钟"的正确(已知)"分频复本"、同时避免"任何/全部干扰"。。。  (几乎"保证"会发生-您是否"探测"外部 xtal。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    您是让示波器自动计算频率还是用手测量两个边沿之间的 SCL 时钟周期?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    海报的示波器盖板上注明了以下内容(可能证明有兴趣):

    • 触发器未设置为 I2C 时钟通道
    • 通道电压电平的设置方式差别很大(10:1 -可能表示不同/不匹配的示波器探头)
    • 左边"测量光标"-对我的眼睛而言-(我接近-但我还没有、"合法盲")与信号边线不"重合"
    • 触发电平设置为4.80V -当此类信号(似乎)"达到"至30V 时-值得(部分)解释-它不是吗?

    您的身份/问题确实是合理的-与任何"太小"或(手动)样本采集相比、我"更信任""范围的频率计算"(在合理的采样周期内)...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    测量 I2C 波特率时需要考虑的另一个因素是时钟扩展的影响。 I2C 主设备必须在 SCL 变为高电平时进行采样、并根据 SCL 读取为高电平的时间重新计算位时间、而不是在释放 SCL 时重新计算位时间。 从器件的时钟扩展、例如在确认位之前、或仅 SCL 线路的电容可能会导致波特率的3%差异。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ***喜欢*** 很棒-而且以前所有人都不承认!   

    仍然-无法解释(是否)这种速度的理由-我(单独)是否(视在图)质疑超过30V (偶数)的 Ch2信号?

    可以通过什么方法将触发器设置为80-90%(最大值)或10-20%(最小值)-但在30V 电压下设置为4.8V -这是可以接受的?

    我继续认为,如果海报被(有些)指示"证明--至少解释"他们(通常是可疑的)的愿望,论坛将"得到帮助"。

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

    我不需要该精度、但我只想知道它的行为为何不同于 规格中所述的行为。

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

    测量了10个时钟脉冲的时间并计算了频率。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、很抱歉、示波器捕获显示的值不正确、但相信我、我测量了几次时钟频率、每次我得到365kHz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bob。

    虽然我不能准确理解时钟展宽、但我可以想象、这种现象会导致额外的主时钟周期。
    您是否认为有可能导致4个额外的主时钟周期?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、不完整的迹线、但问题与时序有关、不在电压电平上。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的朋友-没有悲伤,也没有期待。

    的"Ch_2"(青色)代表您的 I2C 时钟(但它不用作"SCL"测量的"触发源")、这是"奇怪的"、您不同意吗?     相反、Ch_1 (可能为"SDA")被设置为触发器-并揭示了10:1的"电压或示波器探头变化"-当要求高精度时、这可能会证明不是最佳。

    通过将"SCL"示波器通道设置为在 SCL 的"低电平有效持续时间"(可能"计算或测量的"时间"高5-10%)时触发、可以最好地检测到"从时钟拉伸"的任何"入侵"。    (我认为"从器件"将 SCL 保持在低电平"-直到其运行"完成"-然后"释放"。)    

    IIRC -这种"拉伸"可能会因特定从器件、上拉电阻器值总线负载施加到从器件上的特定"操作"而异...

    您可以通过传输到"Ghost Slave"来"挑战并确认" MCU 的能力、"符合您的 SCL 频率预期!"   (即无从器件)   这种情况应允许在"ACK"失败之前进行此类 I2C 传输。    (您可能会注意到、这里的一些人"足够狂热"来设计提供 A、"假 ACK "的逻辑、但证明不能进行任何/所有"时钟拉伸!")   在 MCU 的(实际) SCL 频率上发光(非常)明亮的光线。    这种"强光"证明了任何/所有"不需要的、MCU 之外的 "影响/失真!"的"强大的杀虫剂"。

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

    我进行了另一条迹线、在该迹线中、我在 SCL 的下降沿触发并测量到下一个下降沿的时间。

    时间似乎为2.73us、并且在多条布线上非常稳定。

    因此、时钟拉伸不太可能成为偏差的原因。

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

    嗯-这是一种方法-但我怀疑它是否有效、正如之前详细介绍的"扩展 SCL 低电平状态"的"自动检测"。

    您可能会注意到、"在这里"-发出警报-针对 "激励 MCU 的频率偏差" (正如您检测到并报告的那样)-将"窦性/外部力"归咎于(而不是)!

    自动测量-如建议-存在是有充分理由的-我相信 "您的服务..."中证明"最佳"(到目前为止)

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

    Jan Stoter 说:
    因此时钟拉伸不太可能成为偏差的原因。

    基于什么推理?

    问题您是否已经验证过 DIVE 实际上可以全速响应而不进行时钟拉伸? 数据表应揭示器件的任何上限速度限制(应该、不应该)。 CB1建议在不影响器件影响的情况下进行测量。

    可能还有其他可能。 根据布局和上拉电阻、波形的形状可能会因 微控制器和器件而异。 器件可能会发现有必要延长时钟以满足其最短 时间。 微控制器和器件 可能具有更高的速度、但您的布局可能会阻止这种速度。 如果是这样,那么就要感谢 IIC 的实施,以使这项工作在不利的条件下进行。

    Robert

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

    我真的认为它是时钟拉伸、以及由独立于从器件的 SCL 上升时间引起的拉伸。 我将 EK-TM4C1294XL Launch Pad 配置为以60MHz 运行并生成400kHz I2C 时钟。 实际 TPR 值最终为7。 计算出的 SCL 周期为:

    SCL_PERIOD = 2 *(1 + TPR)*(SCL_Low + SCL_High)* SYS_PERIOD

    SCL_PERIOD = 2 *(1 + 7)*(6 + 4)*(1/60MHz)

    SCL_PERIOD = 160/60MHz = 2.67uS (375KHz)

    使用 SCL 上的3.3K 欧姆上拉电阻、我测量了未连接从器件时的 SCL 周期、如下图所示:

    测得的周期为2.78us、这与360KHz 波特率相关(与计算出的375KHz 波特率相对)。 这与原始海报的结果类似。

    接下来、我将3.3K 上拉电阻替换为330欧姆上拉电阻。 由于器件无法将信号拉至低电平、这对于实际使用而言太强了、但它确实为 SCL 信号提供了非常急剧的上升时间、如下所示:

    在上升时间急剧的情况下、我测量了相同的计算位时间2.66uS。

    我的结论是、由于 SCL 线路上升时间引起的时钟拉伸、I2C 的实际波特率将比计算出的波特率慢。 该上升时间是上拉电阻器和 SCL 线路电容的函数。 如果需要、从器件可以进一步拉伸时钟信号。

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

    这是一个有趣且资源丰富的实验系列-但我们被教导说、"I2C 时钟拉伸"是"从属设备"的"通常/习惯"省份-完全是!  

    前面提到(此处)上拉电阻器和/或 I2C 总线负载可能会影响 I2C"时钟频率"、但这种情况并非"正常"认为是"I2C 时钟拉伸"。   

    飞利浦是 I2C 的发起者,是"I2C"的"控制法律权威"(感谢 Al Gore),相信他们的文档最好地定义了这样的“基于 I2C 的时钟拉伸”,这证明了: "故意机制- I2C 从器件启动-确保从器件有时间 对 "主器件命令 !"进行完全/正确的"处理和响应"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    我同意从器件使用时钟扩展的目的、 但是、主设备(即使是飞利浦的一个设备)如何分辨与从设备引起的小延迟和 SCL 线路 RC 上升时间引起的小延迟之间的差异? 主器件唯一能做的就是等待其输入缓冲器看到 SCL 为高电平、然后开始下一个时钟脉冲的时序。

    虽然这很有趣、最好了解与我们预期行为的任何差异、但您在早期就提出了一个非常重要的问题。 为确保正常运行、这无关紧要。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    我会回答-正如您经常在这里建议的-"合适的术语"有其位置-"时钟拉伸"是(并保持)其发明人所说的...

    用户"预期"会设计(也像您在这里经常指导的那样)适当的组件选择和放置-这"最大限度地减少了"I2C 总线问题-同时满足从器件(需要)"处理和稍后响应"的需求。    它(实际上)被称为"时钟拉伸"(但我们(两者)都同意)- I2C 主设备(这里是 TM4C)几乎不关心...   (和-对此类计时精度的兴趣证明、"比(实际)值更好奇。")

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

    感谢 Bob。

    这就是我要找的。 这很好地解释了时钟频率低于预期的原因。 显然、主器件一直等到 SCL 被拉至高电平、然后再继续其自己的时钟周期。

    感谢您努力进行本实验。 它非常有用。

    此致、Jan Stoter