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.

[参考译文] TMS320F28379D:使用 I2C 模块的正确方法

Guru**** 2609285 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1028631/tms320f28379d-proper-way-of-working-with-i2c-module

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

我对在 C2000微控制器上使用 I2C 模块的正确方法有点困惑。 我必须使用非常简单的 I2C 从设备。 为了与它通信、我需要发送一个单字节命令并接收一个单字节响应。 我已经为320f2839d 准备了 TRM (修订版 I)、在我看来、此交易应该包含两个阶段:

1) 1)主机传输模式、在该模式下我发送命令

2) 2)主机接收模式、在此模式下、我接收到响应

根据 TRM 的理解、我需要在这两个级之间将 MDR.TRX 位从1切换到0。 是这样吗?

在我看来、将 MDR.TRX 从1切换到0意味着重新配置 I2C 模块。 因此、我需要 通过清除 MDR.IRS 来重置模块。 因为 TRM 状态:

配置或重新配置 I2C 模块时、IRS 必须为0。

(TRM 第20.5部分)。 是这样吗? 将 IRS 从1切换到0时是否会生成停止条件? 还是控制器继续控制总线? SCL 线会发生什么情况?

无论如何、当在 TRX 从1切换为0后将 IRS 从0切换为1时、模块将释放 I2C 总线

正如我所理解的、释放总线意味着任何其他主器件都可以捕获它、因此我需要在尝试从器件获取响应之前检查总线是否空闲。 但是、在 BB 位有效之前、我应该在离开复位状态后等待一段时间:

BB 位将会
当 I2C 外设处于复位状态(IRS = 0)时、保持在已清除状态(BB = 0)。 I2C 外设
复位后(IRS 设为1)、BB 位在启动或之前不会正确反映 I2C 总线状态
检测到 STOP 条件

在使用 I2C 启动首次数据传输之前、请执行以下步骤:
1.通过将 IRS 位设置为1来使 I2C 外设退出复位后、等待一个大于总周期的时间
应用程序中最长数据传输所需的时间....

因此、从从器件读取一个字节响应的整个过程对我来说非常奇怪。

我错过或误解了什么?

我已经检查了 C2000ware 中的样片、但发现这些样片太复杂、不适合我的用途。 它们都使用 FIFO、中断和状态机-在我的例子中、这是一种过度设计。

看起来、example_2837xDI2C_EEPROM.c (来自 device_support\f2837xd\examples\cpu1\i2c_EEPROM\cpu01)是最简单的示例、但我也对此有一些疑问。 例如、我看到 MDR 寄存器有几处更改。 每次更改都会设置 IRS 位。 为什么? 我没有找到清除代码的位置。

此致、
Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="95472" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1028631/tms320f28379d-proper-way-of-working-with-i2c-module "]每一项更改都会设置 IRS 位。 为什么?[/报价]

    很抱歉、这是一个愚蠢的问题。 它在 MDR 的每次变化时被置位、否则它将被清零。

    但另一个问题仍然存在:在重新配置 I2C 模块之前,它在哪里被清除?

    此致、
    Alex

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

    尊敬的 Alex:

    如果您可以使用驱动程序库、我们有一些适用于此器件的较新 I2C 示例、但这些示例没有像转换那样复杂。 请参阅以下目录中的以下示例:

    • I2C_ex4_EEPROM_POLLING
    • I2C_Ex5_MASTER_SLAVE_INTERRUPT
    • I2C_ex6_EEPROM_INTERRUPT

    C:\ti\c2000Ware_3_04_00_00\driverlib\f2837xd\examples\cpu1\i2c

    如果您想坚持使用位字段、也可以参考一些 F2806x 示例:

    C:\ti\c2000Ware_3_04_00_00\device_support\f28066\examples\c28\i2c_Lib_EEPROM_Polling

    C:\ti\c2000Ware_3_04_00_00\device_support\f28066\examples\c28\i2c_Lib_EEPROM_INTERRUPT

    我认为查看这些示例应该有助于您编写/阅读字节并回答您的大部分问题。

    最棒的

    Kevin