24C02改为24c08,check()函数一直读出0xFF

2019-07-21 01:46发布

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;                                                                                          
}

引脚配置:
无标题.jpg
按大家说的方法,将SDA改为推完输出或开漏输出,初始check均返回0xFF(check中的位置,我用的是55,0~1023其他地址也试了,均返回0xFF);
24c08应该没有问题,换过一片,仍然不好用。
原来板上用的是24c02没有问题,现在改为24C08就不好用了,大家帮忙看看哪用问题,万分感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。