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.

[参考译文] MSP430F5438A:I2C SCL 一直处于低电平

Guru**** 2587365 points
Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/958836/msp430f5438a-i2c-scl-stuck-low

器件型号:MSP430F5438A

我们将 SoC 器件用作向 MSP430F5438A I2C 总线写入数据的主器件。   MSP430F5438A 是从器件。  我们偶尔会看到 SCL 一直保持低电平、直到发生超时。

我们在 以下位置看到了勘误表 USCI30:
我们尝试实施 DMA 方法和等待3时钟方法、但问题仍然偶尔出现。
出现问题时:  
将前2个字节的主器件写入 MSP430从器件看起来很好。
在第3个字节的第7个 SCL 时钟上:SCL 在15.54ms 内保持低电平(字节为8位加上确认位)  
然后出现第8个 SCL 脉冲  
然后在 SDA 为低电平时产生第9个脉冲(这是一个 ACK、而不是像 USCI30"2"状态那样的 NACK。  (那么、我们是否确实遇到了 USCI30条件?)
然后、第4个字节看起来不错。
然后、第5个字节的行为与第3个字节类似、SCL 在第7位被卡在低电平。
我们相信我们正在正确遵循用户指南 SLAU208Q 第38.3.4.1.2节 I2C 从接收器模式。
USCI30规定如下:
如果接收缓冲区未通过读取 UCBxRXBUF 来清除其内容
在接收到以下数据字节的第7位时的寄存器、这是一个错误条件
可能会发生在 I2C 总线上。 根据 USCI 配置、可能会出现以下情况
发生:

1) 1)如果 USCI 配置为 I2C 主接收器、则会意外重复启动
条件可被触发或者主器件切换至一个空闲状态(I2C 通信
已中止)。 在这种情况下、当前数据字节的接收不成功。

2) 2)如果 USCI 配置为 I2C 从接收器、从器件可以切换到空闲状态
停止 I2C 通信。 在中、当前数据字节的接收不成功
这种情况。 USCI I2C 状态机将通知主器件接收中止
一个 NACK。

请注意、上面描述的错误条件只在的一个有限窗口内发生
接收到的当前字节的第7位。 如果接收缓冲区被读取超出此范围
窗口(之前或之后)、则不会发生错误情况


问题:  
第一段和最后一段似乎有些冲突。  您能提供澄清吗?
2.由于我们看到 ACK 而不是 NACK、这意味着我们没有遇到勘误的 USCI30条件?
3."空闲状态 停止 I2C 通信"我们的 SCL 是否处于低电平状态?
4. 您有哪些想法和/或问题可以帮助我们确定为什么并防止 SCL 卡在低位?
我们非常感谢您的快速支持。
Lee
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.我也不太理解。 但我认为它可以描述的是、您需要确保 当 E 接收移位寄存 器接收7位数据时。 您需要确保 接收缓冲器 UC1RXBUF 为空。

    2.我不知道在会见 USCI30时会发生什么。 关键点是 MCU 频率无法处理高速 I2C 通信。 我的建议是:

    • 降低通信速度以查看它是否有帮助。 I2C 通信现在的速度是多少? 如果您成功使用 DMA。 我想您不会遇到 USCI30。
    • 您能布置波形了。 如果 I2C 驱动强度不强、也可能会遇到一些问题。

    伊斯天

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

    伊斯天、感谢您的及时响应。

    我们认为我们正在正确执行 DMA。  

    问题1:如果我们不满足 USCI30、那么还有什么可能导致 SCL 卡在低电平?

    我们以接近 I2C 快速模式慢速端的频率运行 SCL。   

    问题2:您提到" MCU 频率无法通过高速 I2C 通信进行处理"。 您开始以何种速度看到问题?

    问题3:我的原始问题3:当 USCI30状态为 "空闲状态 停止 I2C 通信"-是否是 SCL 卡在低电平状态的结果?

    您提到了 I2C 驱动强度:我们的 SCL 和 SDA 上升和下降时间小于300nS (~ 0至100%)。

    下面是我在第一篇帖子中描述的波形。  这是 SCL 卡在低电平时的情况

    SCL 在15.54ms 内一直处于低电平、然后出现以下情况:

    Lee

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

    问题1:我现在不知道原因。 通常、作为一个从器件、它不应拉伸 SCL、因为从器件上的 SCL 被设置为输入。 只有在主机发送地址后、才会发生 I meet 条件。  

    问题2:I2C 的最高速度为400kHz。  

    问题3:我不能回答这个问题、原因是你应用了变通办法。  不应发生 USCI30。  没有任何意义可以检查这句话的含义。

    让我们回到这个问题。 有四种可能:

    1.主设备:使用硬件或软件 I2C 的主设备吗? 传输速度如何?  

    2.连接:我认为可以。

    F5438中的软件:我建议您使用 I2C 从站示例代码、并以相同的速度运行、以检查是否会发生此问题。

    F5438中的硬件:如果软件仍然发生、请使用 MSP430与 F5438进行通信。

    我看不到图片。 抱歉。

    伊斯天