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.

[参考译文] LAUNCHXL2-RM57L:I2C 连接 RM57L Launchpad

Guru**** 2546960 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1052929/launchxl2-rm57l-i2c-connection-rm57l-launchpad

器件型号:LAUNCHXL2-RM57L
主题中讨论的其他器件:HALCOGEN

大家好、

你好。 您能帮助我们检查我们的客户问题、如下所示。 引用 TRM 无法解决问题。  

我的 RM57L Launchpad 有以下问题。 我正在尝试建立有效的 I2C 连接。

但是、当我想发送数据时、代码总是在 SendByte 方法中停止。

要发送的字节被正确写入 I2CDXR 寄存器。 但是、它不会从那里发送到总线。

您能帮我进一步解决问题吗? 数据写入 DXR 寄存器后、是否会自动发送到总线?

我已经附加了代码和 DXR 寄存器的屏幕截图、其中显示了写入该寄存器的正确值。

I2C-Code.txt

提前感谢您的支持。  

此致、

Jonathan

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

    您好、 Jonathan、

    SCL 和 SDA 线路都是漏极开路。 I2C 模块 可以将其输出驱动为低电平、 但无法将其驱动为高电平。  为了使线路能够变为高电平、您必须通过一个电阻器将 SCL 和 SDA 上拉至 VCCIO (3.3V)。 整个 I2C 总线只需要一组上拉电阻器、而不是每个器件都需要。

    https://www.ti.com/lit/pdf/slva689

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

    感谢您的回答。

     通过 HALCoGen 为 SDA 和 SCL 线路设置了上拉电阻(请参阅屏幕截图)。 不幸的是,问题仍然如上所述。 你还有其他建议吗?

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

    您好、Thilo、

    内部上拉电阻太弱、无法用于 I2C。 它们的强度足以防止引脚悬空。  您必须为 I2C 信号提供外部上拉电阻。

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

    感谢您的大力支持。 遗憾的是、连接一个外部上拉电阻器也不能解决这个问题。 我们现在已经切换到另一个板、使用相同的代码、字节被正确发送。 然而、在发送数据之后、在从器件的 ACK 之后、不会发送停止条件。 我们注意到 I2CCNT 寄存器在字节发送后没有递减计数。 根据我的理解、这就是不发送 STOP 条件的原因。 您能告诉我、寄存器未被计数的原因可能是什么?

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

    您好、Thilo、

    如果 STP 未被置位、则不会产生 STOP 条件。 如果设置了 RM (重复模式)、则不使用 I2CCNT。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="395704" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1052929/launchxl2-rm57l-i2c-connection-rm57l-launchpad/3903203 #3903203"]不幸的是,连接外部上拉电阻也没有解决问题。

    SDA 和 SCK 线路上的上拉电阻器的值是多少?

    如果上拉电阻值太小、则无法将 I2C 线路驱动为低电平。 如果上拉电阻值太高、 I2C 线路在被拉至低电平之前可能不会上升到逻辑高电平。

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

    STP 已设置、RM 未设置。 MODE 寄存器为0x0E20、因为已经生成了一个 START 条件。 上拉电阻为2.2k、总线上的 I2C 信号看起来正常。在示波器上检查后、发送数据、从器件确认数据。 但是、I2CCNT 寄存器始终保持起始值、不会递减计数。 因此、在访问结束时不会生成停止条件。  

    您是否知道 I2CCNT 寄存器为什么不递减计数?

    感谢你的帮助

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

    您的代码没有问题、因为它可以在另一个 HDK 上运行。 这是电路板问题或器件问题。 我不知道 I2CCNT 为什么不能倒计时。