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.

[参考译文] MSP430F6736A:I2C 速度导致问题

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/934027/msp430f6736a-i2c-speed-causing-issues

器件型号:MSP430F6736A

你(们)好

我在中断模式下使用芯片上的 eUSCI_B0 i2c 外设与 FRAM 芯片进行通信。 。

我想确定为什么我必须将 i2c 时钟降至130KHz 才能与 Rohm FEDR44V100A fram 1MB 芯片"可靠"通信。

更确切地说、当我将 i2c 时钟设置为400kHz 时、FRAM 芯片的"特定时间"似乎仅发回0 (最佳情况或最坏的随机数据)、但当我将 i2c 时钟设置为130KHz 时、一切都运行得非常好。
我假设发送错误数据的是 FRAM 芯片、而不是接收错误数据的 i2c 端口、因为我无法"一致地"重现错误、以便在逻辑分析仪上进行捕获。

从 FRAM 数据表中可以看出、该芯片可在高达1MHz 的时钟速度下运行。
我的 MSP430以16.77MHz 运行

SCL 和 SDA 上的上升时间少于200nS。
上拉电阻为2K

 i2c 的设置为:
UCB0CTLW0 |= UCMST | UCMODE_3 | UCSSEL_SMCLK;
UCB0BRW_L = 128;. 这适用于130KHz
UCB0BRW_L = 40;................... 这适用于400kHz
UCB0BRW_H = 0;
UCB0I2COA0 = 0;  
UCB0I2CSA =销售地址;


 UCB0IE 的中断位在相关的时间被置位/清零。

我可能会指出、当以400kHz 的频率与 Microchip 47L16 EERAM 芯片通信时、我没有遇到任何问题、这表明问题出在 ROHM 芯片上(100%)...但为什么?
如果有任何关于我可以尝试和提高速度的指示、我们将不胜感激。

提前感谢

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

    >UCB0BRW_L = 40;................... 这适用于400kHz

    这实际上约为420kHz (+5%)。 BRW=42 (399kHz)时、它的行为是否有所不同?   

    这不是一个很好的理论、因为我不记得一个非常不好的器件、但谁知道呢?

    如果您有耐心、从400kHz 降压以查看实际断点是什么可能会有所帮助。

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

    你好 Bruce
    是的、速度是+/-我提供的...
    是的、我尝试了所有不同的速度、直到我最终发现的速度都有效。


    由于两个器件都能达到400K 以上、这让人感到非常困惑、而且我在不同芯片上使用它时没有任何问题、这确实表明 FRAM 芯片可疑。
    但我不能相信 ROHM 会在出现故障时销售这样的器件。。。。。。。。。。。。问:"什么是错误的?"。

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

    您可能需要检查上拉电阻器值。 越低、上升时间越短、但会对输出驱动器造成压力。

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

    这是一个有趣的 statement...can 您说过驱动器过载的症状可能是什么(除了奇怪的 i2c 行为)?

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

    TI 提供了有关选择 I2C 上拉电阻器的文档。 slva689

    电阻过小的主要问题是总线上的某些器件看不到逻辑低电平。 需要深入了解所有数据表、以查看是否存在问题。

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

    是的、我看到 doc & 2K 看起来还可以...尽管它没有提到任何关于对驾驶员施压的问题。

    尽管如此、我用4.7K 替代了2K、并将速度推回400K。。。但更大的电阻器在 all...in 上没有帮助、事实上上升时间可能太长、因此会导致更多问题。。。。。然而、这是一种伪装的祝福(我认为)。 由于我刚刚做了进一步的测试、并在示波器上注意到、一旦它开始出现错误行为、我就会看到 FRAM 芯片以全零进行响应(有时是针对几个 MS、有时是针对较长的长度)。

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

    您好 Moshe、

    这里是否有示波器捕获的 I2C 总线波形? 这些可能有助于我们讨论和分析问题。

    此致

    Johnson

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

    你(们)好,约翰逊

    我认为波形是 fine..see pic。 SCL...SDA 具有类似的形状。
    我开始怀疑问题在于 FRAM 芯片误解、甚至缺少要设置为读取的地址。。听起来可能很奇怪。
    我在每秒调用一次的函数中有2条读取语句、第1条语句可能显示无效数据、第2条语句(紧随其后)返回正确的数据。
    问题是它看起来是随机的。

    此致

    Moshe

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

    它也可能与您的代码有关。 I2C 相当复杂、我知道它适合我。 我对它的第一次使用是在8位 PIC 上进行了一些拆裂、但处理 MSP430 I2C 硬件要困难得多。

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

    是的...这始终是一种可能性、在大多数情况下也是一种可能性、但在这种情况下、我希望连续两次读取可以读取相同的结果-但仍然、我再次重新读取我的代码。

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

    您好 Moshe、

    有一些有关 I2C 的示例代码可能对您有所帮助:

    https://dev.ti.com/tirex/explore/node?node=AE87oPVbIejNDDlHj4jznw__IOGqZri__LATEST

    此致

    Johnson

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

    您好约翰逊...还有其他人在阅读此主题。

    我已经解决了我的问题。

    当我使用 Microchip EERAM 芯片时、我发现在设置 Tx 中断之前、我必须立即在 TxBUF 中放置一个虚拟字节...如下所示:

    UCB0TXBUF = 0x55;
    UCB0IE = UCTXIE0;

    如果我没有这样做,那么我要写入芯片中地址的第一个字节就没有被发送。

    然而、这条线路引起了 FRAM 芯片的问题、因为有时0x55实际上是作为第一个字节进行传输的、以设置我想要写入的芯片中的地址。

    我不清楚为什么这种情况只发生在某些情况下、而是通过使用逻辑分析器反复获取2秒的通信来发现的、并且、我注意到0x55应该是传输的不同值 (以及为地址传输了3个字节、而不仅仅是2个字节)。

    此外、在 ISR 中、在我清除 Tx 中断之前、我还有一行 UCB0TXBUF = 0xFF、就像这样

    UCB0TXBUF = 0xff;//防止 UCB0IFG 使 TXBUF 为空标志
    UCB0IE &=~UCTXIE0;//禁用 TX intr

    我现在已经更改了这个、现在在禁用中断后清除 IFG 设置...就像这样

    UCB0IE &=~UCTXIE0;
    UCB0IFG &=~UCTXIFG0;

    感谢所有努力提供帮助的人

    Moshe

    PS..I 现在以1MHz 的频率成功通信。