I2C调试出现的问题
1、I2C可以读到数据,但是没有收到对应响应
Missing ACK/NCK,细看波形,出现短时间内波形变化如下图:
查找资料并未发现解决,先记录下,以后在修改。
根本原因:响应时序程序不对,写完地址后,SDA高的时候,同时设置SDA为输入模式!
代码如下:
错误示范:
i2cstart();
write_byte(0xa0);
SCL=1;
SDA=1;
delay(30);
SCL=0;
delay(30);
SDAC=1;//SDA设置输入模式
while((unsigned char)(SDA)!=0)
{i++;if(i>=5000){return 0;}}
SDAC=0;
SCL=0;
正确程序
i2cstart();
write_byte(0xa0);
SCL=1;
SDA=1;
SDAC=1;//SDA设置输入模式
delay(30);
SCL=0;
delay(30);
while((unsigned char)(SDA)!=0)
{i++;if(i>=5000){return 0;}}
SDAC=0;
SCL=0;
修改后,成功解决。
I2C调试出现的问题
1、I2C可以读到数据,但是没有收到对应响应
Missing ACK/NCK,细看波形,出现短时间内波形变化如下图:
查找资料并未发现解决,先记录下,以后在修改。
根本原因:响应时序程序不对,写完地址后,SDA高的时候,同时设置SDA为输入模式!
代码如下:
错误示范:
i2cstart();
write_byte(0xa0);
SCL=1;
SDA=1;
delay(30);
SCL=0;
delay(30);
SDAC=1;//SDA设置输入模式
while((unsigned char)(SDA)!=0)
{i++;if(i>=5000){return 0;}}
SDAC=0;
SCL=0;
正确程序
i2cstart();
write_byte(0xa0);
SCL=1;
SDA=1;
SDAC=1;//SDA设置输入模式
delay(30);
SCL=0;
delay(30);
while((unsigned char)(SDA)!=0)
{i++;if(i>=5000){return 0;}}
SDAC=0;
SCL=0;
修改后,成功解决。
发布评论