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.

[参考译文] MSP430FR2433:组合事务 I2C 的 Driverlib 代码示例?

Guru**** 2553420 points
Other Parts Discussed in Thread: MSP430FR2433

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/751970/msp430fr2433-example-driverlib-code-for-i2c-for-combined-transaction

器件型号:MSP430FR2433

对于从器件具有寄存器地址空间且主器件首先发送寄存器地址、然后从从器件接收一个或多个字节的常见情况、是否有使用 DriverLib 的示例代码? TI 的应用报告《了解 I2C 总线》SLVA704讨论了这一常见问题。 这种情况也称为“组合事务”,其中主器件发送一个重新启动位来绕过链路。

IMO 这很常见、TI 应该提供一个示例、甚至是 DriverLib 中的新 API。

我一直在努力寻找 DriverLib 调用的正确组合。 例如,这不起作用(挂起等待 RXIFG):

(笑声) 禁用、配置、设置从机地址和启用...
//开始然后发送寄存器地址(其 MSB=0表示从机这是读取)
EUSCI_B_I2C_masterSendMultiByteStart (I2CInstanceAddress、寄存器地址);
//重新启动并接收数据并停止
结果= EUSCI_B_I2C_masterReceiveSingleByte (I2CInstanceAddress);

我尝试过其他组合。 我希望文档能描述对驱动程序库调用的合法序列。

我的背景是:CCSv8、MSP430FR2433 Launchpad、STMicro LIS3MDL 罗盘芯片。 我没有逻辑分析仪。

我希望有一个 API:

readSingle (eUSCIInstance、slaveAddress、寄存器地址)
readMultiple (eUSCIInstance、slaveAddress、registerAddress、buffer、length)
writeSingle (eUSCIInstance、slaveAddress、registerAddress)
writeMultiple (eUSCIInstance、slaveAddress、registerAddress、buffer、length)

我认为还有另一个主题建议可以实现它。 还有另一个线程建议在不使用调用 EUSCI_B_I2C_masterReceiveNext()的 ISR 的情况下无法接收多个字节。 (“I2C 驱动程序库超时值”)

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

    您好、Lloyd、

    感谢您的建议。 我将向 MSP 软件团队提供反馈。

    同时、请检查随附的裸机代码示例。 它是 您需要的组合交易示例吗?

    e2e.ti.com/.../2211.msp430fr243x_5F00_eusci_5F00_i2c_5F00_standard_5F00_master.c

    e2e.ti.com/.../1602.msp430fr243x_5F00_eusci_5F00_i2c_5F00_standard_5F00_slave.c

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、谢谢、您的示例代码就是我需要的"合并交易"的例子。 您在哪里找到了该示例代码?

    您的示例代码似乎可以与 STMicro LIS3MDL 罗盘芯片配合使用、至少可以读取 ID 寄存器。

    但它没有回答这个问题、因为我更喜欢 DriverLib 实现(因为它在系列产品中可能更便于移植。) 我可能想探讨一下您的示例中的事件序列与我在原始问题中给出的 DriverLib 调用中的事件序列的比较情况。

    此外、对于 LIS3MDL 芯片(我怀疑其他许多 I2C 传感器芯片)、寄存器地址字节设置了高两个 MSB 位、以指示它是读取还是写入、以及它是多字节事务。 最好是将其放在 API 中。 就像这样、我必须修改示例、它更多地是模板、一种玩具、如果不使用真实的硬件进行修改、就无法进行测试。 在 DriverLib 中使用更高级别的 API 会更好。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Lloyd、

    这是裸机代码示例。 遗憾的是、我们没有 driverlib 版本。

    此致、