对于从器件具有寄存器地址空间且主器件首先发送寄存器地址、然后从从器件接收一个或多个字节的常见情况、是否有使用 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 驱动程序库超时值”)