首页 > 解决方案 > I2C从主到从通信问题

问题描述

我使用的是 TC237 并且板子不提供 I2C 通信,所以我将它实现为 GPIO。通过寄存器读写,但没有主从通信。

根据I2C通信协议,创建了启停ACK NACK功能码。我还创建了一个 1 字节的写入和读取代码,并基于它创建代码来读取和写入从站的寄存器。

不知道怎么上传图片,但是用示波器查看SDA和SCL的时候,读的时候好像有两个字节要读,其余的都OK。第一个字节读取 0x00,下一个字节读取 0xEF。

I2C_Start();
waitTime(1*TimeConst_100us);

I2C_WriteByte((uint8)(Slave_addr|0x01));//LIDAR : 0xC5/BH1750 : 0x27
I2C_ACK();//I2C_GetACK();

I2C_ReadData_H = I2C_ReadByte();
I2C_ACK();

waitTime(1*TimeConst_100us);

I2C_ReadData_L = I2C_ReadByte();
waitTime(1*TimeConst_100us);
if(I2C_NACK() == BUSY)
{
return RESET;
}
I2C_Stop();
return SET;

结果应该由内部IC接收,但它接收到一个奇怪的值。可疑部分在读取第一个字节后似乎没有收到设备的 ACK,我该怎么办?

标签: ci2cinfineon

解决方案


推荐阅读