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.

[参考译文] MSP432E401Y:如何使用 DriverLib 读取 I2C 器件寄存器?

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1053439/msp432e401y-how-to-read-i2c-device-registers-using-driverlib

器件型号:MSP432E401Y

您好、论坛、

我有一个 I2C 器件、它具有从器件地址、后跟从器件中的寄存器地址、然后是该寄存器的4字节数据。  

在 针对简单写入和读取的 I2C-Master 的 MSP432E4示例项目之后、我能够开始写入从器件地址(0x23)、寄存器地址(0x05)、然后是4字节数据(0xFF、0x7F、0x3F、0x00)、最后是停止。  这完全符合预期:

但是、我还应该能够从指定的寄存器地址读回值、但我基于此示例的示例似乎不处理要读取哪个地址的发送。  它只从从从器件地址读取指定数量的字节。

我认为我需要做的是如下所示:

  • 发送主器件从器件地址 (0x23)写入操作开始
  • 发送我要读取的寄存器地址(0x05)
  • 通过读取从器件地址(0x23)发送主器件重启
  • 从从器件地址读取数据四次(0xFF、0x7F、0x3F、0x00)
  • 发送 STOP

是否有人可以解释如何使用 DriverLib 来实现此目的?  该(简单)示例是由中断驱动的、因此 I2C 写入数据是一个简单的调用、启动写入、然后等待状态 I2C_MASTER_TX 结束  所有的中间转换在 ISR 内部处理。  它只执行两个 MSP432电路板的回送、一个用作主器件、另一个用作从器件。

提前感谢您的任何指导-这让我变得疯狂、这一点不能再困难了。

業界14.

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

    你好,Surrealist14,

    因此、借助 drivelib API、您可以通过 I2C 对发送/接收字节进行完全控制。 无论采用单次、突发还是 FIFO 模式、您仍然需要告知 API 要读取的字节数。 因此、如果您知道每次需要为该寄存器读取4个字节、那么您只需要使用读取 API 并将其告知为4个字节。  

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

    谢谢、Jace、

    也许我没有说明自己。  问题不在于读取4个字节。  问题是、我需要在读取4个字节之前发送要读取的_register_。  正如我之前所怀疑的那样、这涉及写入从器件地址和寄存器编号、然后在同一事务中读取从器件地址4个字节。  我修改了示例中的 ISR 代码、以便能够开始对从器件地址的写入、然后写入寄存器地址、然后像 以前一样切换到开始对4个字节的突发读取和读取。  它现在按预期工作。  下面显示了从寄存器0读取的一个示例。

    此致!

    Scott