24c02读写正常,将24c02芯片换为24C08,check()返回一直是0xFF?代码如下:
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
///Devices Addr
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0);
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);
IIC_Wait_Ack();
}
else{
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));
}
IIC_Wait_Ack();
///data Addr
IIC_Send_Byte(ReadAddr%256);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1);
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//
return temp;
}
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
///Devices Addr
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0);
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);
}else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));
}
IIC_Wait_Ack();
///Data Addr:
IIC_Send_Byte(WriteAddr%256);
IIC_Wait_Ack();
///Data:
IIC_Send_Byte(DataToWrite);
IIC_Wait_Ack();
IIC_Stop();
//delay_ms(10);
delay_ms(20);
}
u8 AT24CXX_Check(void)
{
u8 temp;
temp=AT24CXX_ReadOneByte(55);
if(temp==0X55) return 0;
else
{
AT24CXX_WriteOneByte(55,0X55);
delay_ms(2);///
temp=AT24CXX_ReadOneByte(55);
if(temp==0X55) return 0;
}
return 1;
}
引脚配置:
按大家说的方法,
将SDA改为推完输出或开漏输出,初始check均返回0xFF(check中的位置,我用的是55,0~1023其他地址也试了,均返回0xFF);
24c08应该没有问题,换过一片,仍然不好用。
原来板上用的是24c02没有问题,现在改为24C08就不好用了,大家帮忙看看哪用问题,万分感谢
一周热门 更多>