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.

[参考译文] MSP430FR5992:I2C 从具有地址和子地址(LIS3DH)的传感器读取字节

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1195337/msp430fr5992-i2c-read-byte-from-sensor-with-address-and-sub-address-lis3dh

器件型号:MSP430FR5992

尊敬的所有人:
我正在尝试通过 eUSCI_B0在我的 MSP420FR599x 程序中实现 I2C 传感器(LIS3DH)。 遗憾的是,在阅读了“家庭数据表”之后,我对如何设置它比以前更加困惑,但我希望您能够帮助我。 对于熟悉 I2C 协议和/或 MSP…的人来说、这个问题无疑是一个简单的问题。 我也是;)。

传感器将通信定义为以下(第26页 DS):
起始--从地址+写入位--等待 AK --发送8位子地址--等待 AK --重新启动--从地址+读取位--等待 AK --获取8位数据--无主器件确认--停止
因此,MSP 需要发送一个子地址/命令作为第一个“数据库字节”,在 AK 之后,MSP 应执行重复的启动,然后对从地址执行读操作。
在这种情况下,我不知道如何初始化 i2c USCI,也不知道如何使用后续读出…执行此传输 是否可以或我是否需要通过软件“手动”执行所有操作?

目前、我通过以下方式初始化 USCI:
   UCB0CTLW0 = UCSWRST;   //复位状态
   UCB0CTLW0 |= UCMODE_3 | UCMST | UCSLA10_0 | UCTXSTT; // I2C |主控模式| SLADD 7位|重复启动
   UCB0CTLW0 |= UCSSEL_2;//SMCLK
   UCB0BRW = 20;  //MCLK = 2MHz ->波特率:MCLK / 20 = 100kHz
   UCB0CTLW1 = UCASTP_0;  //无停止有效
   UCB0TBCNT = 1;  // 1字节数据
   UCB0CTLW0 &=~UCSWRST;

在一个读取字节函数中、我将设置从器件地址(CSA)、如果我想发送或接收 μ… 我是否需要使用位掩码手动将读/写位设置到从器件地址中、还是通过 UCTR 自动添加? 然后、我会将子地址作为传输发送、在获取 AK 后、我会开始接收?!?
它是正确的处理方式、还是缺少硬件实现的功能?

如果有一个小示例、我会非常感激、TI 示例有点太简单或一次执行得太多。

祝你一切顺利,感谢你的帮助
托比亚斯

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

    除了描述事务的方式之外、此器件没有任何异常。 子地址只是一个器件寄存器地址、数以千计的器件会这样做。

    I2C 接口很难处理。 查看此器件的 TI 代码示例、了解如何执行该操作。 LIS3DH 还提供 SPI、这种 SPI 使用起来要简单得多。