我按照硬汉哥的标准库串行EEPROM读写例程教程移植的 检测I2C总线设备代码,先检测完设备后,SDA会一直为低电平导致如果再次调用该函数时会直接return,并且在检测完后进行AT24C02写操作会出错。但是将注释中的代码取消注释后,代码就可以正常运行了。这是为什么?难道是从机(AT24C02)在收到读指令后,响应后SDA电平被拉低,此时发送STOP信号(因为SDA为低电平)无效,只有将一个完整的AT24C02操作完成后才可以有效地发送STOP信号?
[C] 纯文本查看 复制代码
uint8_t I2C_CheckDevice(uint8_t _Address)
{
I2C_SDA_IN();
I2C_SCL_IN();
if (I2C_SDA_READ() && I2C_SCL_READ())
{
I2C_SDA_OUT();
I2C_SCL_OUT();
I2C_Start();
I2C_SendByte(_Address | I2C_RD);
if (I2C_WaitAck())
{
//I2C_SendByte(0x00);
I2C_Stop();
return 1;
}
I2C_Stop();
}
return 0;
}
|