i2c读取的数据不对
为什么i2c总线写入与读出的数据不一致 -
那就是程序有问题,读/写程序的时序不对,读/写操作有误。可能是读/写的数据都不对,或读/或写的程序时序有错误。首先要排除芯片的损坏的原因。
SDA总线是双向数据线,是单片机的I/O脚,单片机输出时是单片机控制SDA的高低。但是读数据,即单片机输入时,数据是从I2C器件送来的。如果在读之前SDA=0,即不拉高,则SDA线就一直处于低电平状态,被拉低了。I2C不论送什么数据,都是0,即单片机只能读到全0了。所以,必须先拉高,这样,SDA总线上才能还有呢?
那就是程序有问题,读/写程序的时序不对,读/写操作有误。可能是读/写的数据都不对,或读/或写的程序时序有错误。首先要排除芯片的损坏的原因。
SDA总线是双向数据线,是单片机的I/O脚,单片机输出时是单片机控制SDA的高低。但是读数据,即单片机输入时,数据是从I2C器件送来的。如果在读之前SDA=0,即不拉高,则SDA线就一直处于低电平状态,被拉低了。I2C不论送什么数据,都是0,即单片机只能读到全0了。所以,必须先拉高,这样,SDA总线上才能还有呢?
楼上正解,I2C时序比较复杂,如果不仔细比对资料,基本上出错概率很大。你读数据读的也是8位的,是返回0FFH吧,
两个通信协议是不一样的,不一样的厂家延时要求也不一样.24c08地址字节只有一个,而256有两个地址字节.详细请看芯片资料.
I2c发送数据正常,接收数据全是FF,单步调试发现给从芯片发寄存器地址时...
全是FF说明从设备(slave)没有应答,没有握手成功。因为,I2C总线的地址线和数据线都是上啦了的,没有数据时应该就是高。由此可见,主机接收数据全是ff是因为从设备没有响应的原因。也就是说,有两种可能,一个是从设备故障;二是主机发送的从设备的地址不正确导致从设备不响应。
当I2C在与诱骗芯片通信时读不到数据,可能是由于硬件连接问题、通信协议不匹配、软件配置错误或芯片本身故障等原因造成的。1. 硬件连接问题:首先,需要检查I2C总线的物理连接。确保SDA(数据线)和SCL(时钟线)都正确连接,并且没有短路或断路。此外,上拉电阻的设置也非常关键,不合适的上拉电阻值可能后面会介绍。
I2C总线通信时,在传输数据时,会不会传输的数据刚好是器件地址而与其它器...
接下来接下来紧跟着的就是地址。假如从件收到开始码,它会立刻接受器件码。如果收到的器件码不是自己的地址,那么接下来不管收到的是什么码它都会无视就算是自己的地址也无视,直到收到结束码才认为本次传输结束。也只有收到结束码,它才会再次识别开始码和器件码。所以它绝对不会冲突。
第一次读时不成功,可能是数据还没有写进去;第二次读时成功了,可能是因为此时数据已写进入。
我的I2C可以写数据但是读数据还是没有实现 -
既然读数据没有实现就不好判断写数据是成功的,还是要多在时序上找问题,
就是第二次没有写进去呀,