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.

[参考译文] TM4C123GH6PM:使用 i2c 从 OPT3001读取 EDU-MKII。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/566183/tm4c123gh6pm-edu-mkii-reading-from-opt3001-with-i2c

器件型号:TM4C123GH6PM
主题中讨论的其他器件:OPT3001

我目前正在使用 Tiva C 系列开发板以及包含板载 OPT3001芯片的 EDU-MKII Booster Pack。 该芯片的接口是 i2c。 我在读取 OPT3001上的制造商 ID 寄存器时遇到困难。 我可以正确读取 MSB、但 LSB 始终为1。 下面是我使用的代码:

int16_t lsb;
int16_t MSB;
int16_t three;

///------------------------------ 发送--------------------------------------------
//指定我们要向写入(寄存器地址)
//从器件
I2CMasterSlaveAddrSet (I2C1_base、slaveAddr、false);

//指定要读取的寄存器
I2CMasterDataPut (I2C1_base、MANUFACTUREID_REG);

//将控制字节和寄存器地址字节发送到从器件
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_SINGLE_SEND);

//等待从机接收并确认数据。
while (I2CMasterBusy (I2C1_base));


///------------------------------ 接收---------------------------------------------------
//指定我们正在读取(寄存器地址)到
//从器件
I2CMasterSlaveAddrSet (I2C1_base、slaveAddr、true);

//发送控制字节并从我们的寄存器中读取
//specified
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_start);

//等待 MCU 完成事务
while (I2CMasterBusy (I2C1_base));

MSB =(I2CMasterDataGet (I2C1_base)& 0xFF);

I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_finish);//接收

while (I2CMasterBusy (I2C1_base));

LSB =(I2CMasterDataGet (I2C1_base)& 0xFF);

结果=(MSB << 8)| lsb;

在调试中、我获取 MSB = 0000000001010100b (正确)

和 lsb = 000011111111b (不正确)  

是否有人发现上述代码有任何问题? 根据我的理解、它应该正常工作。 谢谢!

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

    代码看起来是正确的。 您能否进行以下更改、然后查看返回值是否正确。

    更换

    while (I2CMasterBusy (I2C1_base));

    使用

    SysCtlDelay (100)
    while (I2CMasterBusy (I2C1_base));

    另外、建议连接示波器探针、查看 OPT3001是否确实正确发送了制造商 ID 的2个字节。