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.

[参考译文] MSP430F5514:当使用 Master0 (UCB.S、UCB0SDA)时、I2C 总线长时间处于繁忙状态。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/785486/msp430f5514-i2c-bus-is-busy-for-a-long-time-when-master0-ucb0scl-ucb0sda-is-being-used

器件型号:MSP430F5514

你(们)好

我们使用的是 I2C 通信。  之前我们使用的 Master1 (UCB.S.、UCB1SDA)运行正常。  现在、我们尝试在 P3.0、3.1上使用 Master0 (UCB.S、UCB0SDA)、并使用一个从器件。 在代码中、如果在从器件响应之前发生超时、STOP 被发送到从器件。  我们等待总线空闲、然后返回。 总线在最终释放之前很长时间处于忙状态。  

UCB0CTL1 |= UCTXSTP;
while (UCB0STAT 和 UCBBUSY){}; //长时间卡在这里
返回 I2C_TIMEOUT;

请问总线为什么会很忙? 需要完成的两个主器件的配置是否存在差异?

(这是我第一次在这个论坛上发布问题。 请原谅我的任何错误、如果需要更多信息、请告诉我)。

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

    您好!

    根据 件用户指南中的寄存器说明、考虑到 USCI_B0和 USCI_B1模块在功能方面是相同的、这两者之间的性能不应存在任何差异。

    为了成功地从一个模块切换到另一个模块、您必须梳理您的应用、以确保所有对"UCB1"的引用都正确修改为"UCB0"、同时确保端口引脚初始化被正确修改。 移植软件后、需要根据使用的新引脚来更改芯片周围的硬件。

    由于知道使用 USCI_B1在应用的先前版本中可以正常工作、因此我认为硬件或软件移植的某些方面出错了。

    此致、

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Matt、是我问这个问题的。 对拖延答复表示歉意。 (TI 网站不允许在另一天注册新用户-是否有错误? 我被迫从我的账户中提出这个问题。 你是对的。 对于主器件0、没有上拉电阻器。 这导致 UCSCLLOW 被置为高电平一段时间。 一旦它变为低电平、UCBBUSY 也变为低电平。

    尽管内部上拉电阻器只能用于 GPIO 引脚、但我尝试通过使用内部上拉电阻器来缓解这一问题。 在执行此操作时、我观察到以下结果。 在开始条件被发送后、UCNACKIFG 立即被置位。 即使相应的中断标志被禁用、它也会被置位。

    这是否仅仅是因为使用了具有专用外设功能的内部上拉电阻器? (P3SEL |= 0x11)
    是否有任何方法可以这样使用它?

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

    您好!

    是的、当您尝试注册时、网站可能暂时关闭、很抱歉给您带来不便!

    我们始终建议 MCU 在 I2C 时钟和数据线路上使用外部上拉电阻器、以确保正确处理开漏信号、并能够根据线路上的电容来定制上拉强度。 请参阅 此 e2e 帖子 、了解有关我们为什么建议使用外部上拉电阻器的更多信息、如回复中 Priya 所述。

    客户发现、有时 I2C 通信会使用内部上拉电阻器、有时则不会。 有许多因素会影响 I2C 通信的正常运行、其中一个因素是上拉电阻的大小。 对于 MSP430、其电阻约为35k 欧姆、这对于您的设置可能太大。 下面是另 一篇 探索这一概念的 e2e 文章。

    此致、

    Matt

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

    感谢您的回复。 我刚才看过其中一篇,现在也看过另一篇。

    我的问题是、理论上甚至可以使用具有专用外设功能的内部上拉电阻器吗? 我看到有人通过将其与 GPIO 引脚结合使用来实现、他在这些引脚上编写了所有代码来处理信息、发送原始数据、检查 ACK 等、而不是使用

    我观察到的行为(接收 UCNACKIFG)是否仅仅是由于您提到的因素-大上拉电阻器尺寸、布线长度、总线电容-或者它是否是一个错误(考虑到这是一个 TI 产品、我不太可能知道)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    根据 MSP430F5xx 器件的器件系列用户指南、即使为引脚选择了专门功能、理论上也可以激活上拉电阻器电路:

    这是因为 P3REN 和 P3OUT 直接控制开关和多路复用器逻辑以启用上拉/下拉。

    无论这种情况如何、仍然强烈建议为 I2C 信号上拉使用内部电阻器、因为上升时间太慢会导致 I2C 总线上的无效信号。 这可能会导致错误标志、例如您在 UCNACKIFG 中看到的错误标志。 下面的示波器截图显示了我们在启用内部上拉的情况下在2个 Launchpad 之间进行通信的 I2C 示例、您可以看到模拟波形几乎没有足够快的上升速度、无法使通信正常工作。

    任何比图示速度更快的 I2C 速度都可能导致通信失败。 有关错误的任何查询、请参阅 器件的勘误表。 在这里、您可以找到所使用器件的所有已记录错误以及可能的解决方法(如果可用)。

    此致、


    Matt