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.

[参考译文] TCA9555:I2C 总线问题

Guru**** 1151720 points
Other Parts Discussed in Thread: TMP275, TCA4307, TCA9555, TCA9534A, TM4C129ENCPDT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1208878/tca9555-issue-with-i2c-bus

器件型号:TCA9555
主题中讨论的其他器件: TCA9534A、TMP275、 TM4C129ENCPDT、TCA4307

您好!

我正在使用 TCA9555三个芯片、它们连接到同一 I2C 总线和另一个 I2C 温度检测芯片 TMP275AID。 因此、基本而言、我总共有四个板载 I2C 芯片、其中三个是 TCA9555。 所有 TCA9555芯片均采用默认配置、并用作输入端口。 因此我没有更改默认配置寄存器。 我使用的是 TI 的 TM4C129ENCPD Cortex ucontroller。

我看到 SDA 线不会随机地恢复为高电平。 请记住、我编写的代码与先前项目的代码相同、在该项目中、同一 uController 正在与 TCA9534A 芯片进行通信、我们从未遇到过任何 问题。

我确认我们在 SCL 和 SDA 线路上有4.75kR 上拉电阻。 当我对 SDA 和 SCL 线路进行示波时、我可以看到 SDA 线路不会恢复到高电平的时间(从低电平到高电平)。

我删除了两个 TCA9555芯片并在板上只留下一个 TCA9555芯片、我仍然看到相同的问题。

SCL 以100kHz 的频率运行。

四个芯片的 A2:A1:A0行设置的地址为:

Chip1 (TCA95555):0b000

Chip2 (TMP275AID):0b010

Chip3 (TCA95555):0b011

Chip4 (TCA95555):0b100

有什么想法吗?

谢谢

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

    Sahil、

    有趣。 当看到 SDA 被锁定时、您是否有机会共享示波器视图的图像? SCL 是否继续切换?

    这是否会在 TCA9555正在控制 SDA 或 TMP275 TM4C129ENCPDT 正在控制 SDA 时发生?

    此致!

    Danny

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

    大家好、Sahil:

    感谢您的提问。  

    非常感谢您列出了每个 IC 的地址。 这是我的第一个建议,因为起初听起来好像是一个总线争用的问题。  

    我删除了两个 TCA9555芯片、只留下一个板载 TCA9555芯片、我仍然看到同样的问题。

    您是否曾尝试使全部三个 TCA9555都正常运行、但移除 TMP 传感器以查看这是否解决了问题?  

    [quote userid="163081" url="~/support/interface-group/interface/f/interface-forum/1208878/tca9555-issue-with-i2c-bus 我确认我们在 SCL 和 SDA 线路上有4.75kR 上拉电阻。 当我打开 SDA 和 SCL 线路时,我看到 SDA 线路不会恢复到高电平(从低电平到高电平)的时间。

    上拉电阻似乎得到了很好的重视。 我认为您的电阻选择没有问题。

    问题:I2C 通信距离是什么样子的? 您是否要通过长电缆进行通信以到达温度传感器?  

    问题:您能否提供您看到的错误的示波器屏幕截图? 您是否还能提供您的系统原理图? 3个 TCA9555和 TMP275传感器之前是否有任何 I2C 缓冲器?  

    此致、

    泰勒

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

    您好!

    请在下面查看我的答案;

    我移除了所有芯片、包括 TMP 传感器以及两个 TCA9555、这样电路板在0b000地址处只有一个 I2C 芯片。

    芯片位于距离 uController I2C 总线约4英寸的同一电路板上。 上拉电阻器位于芯片旁边。

    不存在缓冲器或任何隔离器芯片。 在4英寸距离处、可将芯片与微控制器直接连接。  

    调试时、我没有看到微控制器报告错误、因为 DATAACK、ADDRACK 和错误位均为零。 但我看到 BUSY 位始终为高电平。 捕捉事件很棘手、因为在首次事务处理后、当控制器启动时、SDA 处于低电平、不会从低电平转换为高电平、微控制器不会发起另一个 I2C 事务。 我确实在初始 I2C 几个时钟期间看到 SDA 从低电平到高电平转换几次。  

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

    您好、我可以收集快照。 请注意、对于以下快照、控制器正在与地址 A2:A1:A0:0b011的 TCA9555芯片通信、并且我正在读取位于0x00地址的芯片的 IO 端口0。

    我看到两个不同的问题。

    第一个图像显示芯片正在将 ACK 置位3次并开始向微控制器发送数据。 但是、微控制器在事务结束时不会使 ACK 有效。 在数据包结束时、SDO 成功地从低电平转换为高电平。 但微控制器不会使 ACK 有效。

    以下快照显示了芯片未使 ACK 有效且 SDO 线路保持低电平。 我还注意到其中一个时钟信号缺失/中途。 请记住、芯片的距离为4英寸、没有缓冲器或隔离器。 芯片和微控制器之间采用引脚对引脚直接连接。

    正在等待您的帮助。

    谢谢

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

    一旦 SDO 变为低电平、微控制器将不再能够进行进一步通信。

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

    上图中的时钟速率为100kHz。 我也尝试了400kHz 频率。

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

    这是原理图。 请注意、原理图上的芯片地址是针对芯片1 (地址0b000)、而上述快照是针对芯片2 (地址0b011)。

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

    在第一个映像中、最后缺失的 ACK 是可以的;这就是主器件如何向从器件发送信号、表明它不想读取更多字节。

    在第二个图像中、是时钟线上的尖峰。 我怀疑从器件会将此作为时钟脉冲读取、而主器件不会、并且两者都不同步。

    这种尖峰来自哪里? TCA9555不进行时钟扩展;主器件的 μ I²C 实现肯定出错。 线路上的低通滤波器可能会有所帮助。

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

    我测量了相邻时钟脉冲的尖峰宽度、这似乎不是尖峰、而是中途时钟。 这意味着 TCA9555芯片无法识别该中途时钟、因此它还需要一个时钟来结束事务并释放 SDO 线路。 问题是、为什么这个中途时钟会发生一段时间。 有什么想法吗?

    此外、您可能已经注意到 SDO 上的一些数据脉冲不是正确的脉冲、但看起来像是尖峰。

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

    Sahil、

    此外,您可能注意到 SDO 上的一些数据脉冲不是正确的脉冲,但看起来像峰值。

    第一幅图显示了在 SCL 线为低电平时发生的剧烈 SDA 尖峰。 我认为这不会导致 I2C 数据传输中出现错误、但有趣的是、它们确实存在。 您是否看到这些尖峰出现在400kHz 和100kHz 频率下? 更慢的速度、例如10kHz 怎么办?  

    我测量了邻居时钟脉冲的峰值宽度,似乎这不是一个峰值,而是一个半路时钟。 这意味着 TCA9555芯片无法识别该中途时钟、因此它还需要一个时钟来结束事务并释放 SDO 线路。 问题是、为什么这个中途时钟会发生一段时间。 有任何想法吗?

    是的、我认为您的解释是正确的。 TCA9555芯片无法识别中途时钟信号、因此又需要一个时钟信号来结束事务。  

    您是否可以在此处尝试通过向 SCL 线路发送8个时钟脉冲来恢复序列、以查看这是否释放了总线?  

    TCA9555不包含内部时钟。 该器件无法根据 Clemens 注释支持时钟扩展。 这意味着 SCL 仅作为 TCA9555的输入。 TCA9555无法驱动时钟输出信号、而只接收时钟信号输入。 因此、我认为这个半路时钟的异常不是来自 TCA9555、而是来自生成时钟信号的器件 TM4C 器件。  

    此致、

    泰勒

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

    你好,谢谢你的答复。 我还有一些进一步的信息要分享。 我看到、即使使用半路尖峰时钟、SDO 线路在某些情况下也会恢复。 这是否意味着该问题与半路尖峰时钟无关,或者在某些情况下可能只是在阈值边缘,设备才会释放 SDO 线路?

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

    示波器可能无法对假时钟边沿的高点进行完整采样。 该脉冲似乎会产生阻塞总线的情况。 通常有50ns 抗尖峰脉冲滤波器、因此如果脉冲宽度低于50ns、所有器件都应忽略类似这样的脉冲。  在我看来、似乎 MCU 认为已生成一个时钟脉冲(在最后一个事务中仅生成8个时钟脉冲)、而在这种情况下、I2C 器件正在跟踪并等待下一个时钟脉冲。  

    您应该能够通过切换 SCL 线路来取消这个操作。 如果您从软件的角度无法做到这一点、TI 销售的器件具有总线阻塞恢复功能(TCA4307)、它会检测总线阻塞、并通过为您切换 SCL 来解决问题。

    -鲍比

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

    您好!

    我觉得问题跟芯片无关。 我正在通过发送芯片上不存在的 A2A1A0地址与虚拟芯片交谈、我仍然看到不时随机产生的尖峰时钟脉冲。 您认为这可能是布局问题吗?

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

    否;该尖峰由主器件的硬件通过在短时间内将时钟输出驱动为高电平而产生。

    作为一种权变措施、在时钟线路上添加一个低通滤波器(例如、RC 电路)、使得尖峰不会超过 VIL

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

    大家好、Sahil:

    您是否有时间处理我们在这里提出的所有要点? 您是否已经找到解决方案?

    此致、

    泰勒

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

    您好!

    感谢你的帮助。 问题似乎与接地环路有关。 我还在做这件事。

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

    Sahil、

    收到更新时、请在此处回复。

    此致、

    泰勒

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

    大家好、我看到这个问题与电路板布局有关。 不知何故、微控制器 I2C 时钟对噪声耦合更敏感。 我对电路板做了一些临时修改、电路板开始工作。 感谢您投入宝贵的时间给予大力支持。