AT24C64

来源:互联网 发布:域名和主机都要备案吗 编辑:程序博客网 时间:2024/05/07 13:52

#define AT24C080
#define AT24C160
#define AT24C320
#define AT24C641
#define AT24C1280
#define AT24C2560


#if AT24C08
#define PAGE_BYTE_MAX 0x10// 16 Byte per Page
#define PAGE_NUM_MAX 4
#endif


#if AT24C16
#define PAGE_BYTE_MAX 0x10// 16 Byte per Page
#define PAGE_NUM_MAX 8
#endif


#if AT24C32
#define PAGE_BYTE_MAX 0x20// 32Byte per Page
#define PAGE_NUM_MAX 16
#endif


#if AT24C64
#define PAGE_BYTE_MAX 0x20// 32Byte per Page
#define PAGE_NUM_MAX 32
#endif


#if AT24C128
#define PAGE_BYTE_MAX 0x40// 64 Byte Per Page
#define PAGE_NUM_MAX 64
#endif


#if AT24C256
#define PAGE_BYTE_MAX 0x40// 64 Byte Per Page
#define PAGE_NUM_MAX 128
#endif


BOOL EEPROM_ReadBuff(INT16U iAddr,char* pBuff,INT16U iLeng);
BOOL EEPROM_WriteBuff(INT16U iAddr,const char* pBuff,INT16U iLeng);
void EEP_WP(SwType bOn);


void EEPROM_Init(void)
{
        char Test[]={0x01,0xFF,0xFF,0xFF};
char cRead[30]= {0};


I2C_Initialize();

        return;
//EEP_WP(SW_ON);
EEPROM_WriteBuff(0,Test,4);
EEPROM_ReadBuff(0,cRead,4);
if(MEM_Cmp(4,Test,cRead)==0)
{
   
}
        
        Test[0]=0x02;
memset(cRead,0x00,30);
EEPROM_WriteBuff(1024,Test,4);
EEPROM_ReadBuff(1024,cRead,4);
if(MEM_Cmp(4,Test,cRead)==0)
{
   
}
        
        Test[0]=0x03;
memset(cRead,0x00,30);
EEPROM_WriteBuff(8192,Test,4);
EEPROM_ReadBuff(8192,cRead,4);
if(MEM_Cmp(4,Test,cRead)==0)
{
   
}


        Test[0]=0x04;  
memset(cRead,0x00,30);
EEPROM_WriteBuff(18432,Test,4);
EEPROM_ReadBuff(18432,cRead,4);
if(MEM_Cmp(4,Test,cRead)==0)
{
   
}
        
        Test[0]=0x05; 
        memset(cRead,0x00,30);
EEPROM_WriteBuff(30720,Test,4);
EEPROM_ReadBuff(30720,cRead,4);
if(MEM_Cmp(4,Test,cRead)==0)
{
   
}
}


BOOL EEPROM_ReadBuff(INT16U iAddr,char* pBuff,INT16U iLeng)
{
BOOL bSta;
INT8U   cPage,cAdr;


assert(pBuff);
bSta = TRUE;
cPage = (INT8U)(iAddr >> 8);
cAdr  = (INT8U)(iAddr & 0xFF);

I2C_Stop();

I2C_Start();
#if AT24C08
I2C_WriteByte(0xA0+(cPage<<1));
I2C_WriteByte(cAdr);
#else
I2C_WriteByte(0xA0);
I2C_WriteByte(cPage);
I2C_WriteByte(cAdr);
#endif
I2C_Stop();


I2C_Start();
#if AT24C08
I2C_WriteByte(0xA1+(cPage<<1));
#else
I2C_WriteByte(0xA1);
#endif
while(iLeng>1)
{
*pBuff++ = I2C_ReadByte();
I2C_ReadAck();
iLeng--;
}
*pBuff++ = I2C_ReadByte();

I2C_Stop();

//enableInterrupts();
return bSta;
}


BOOL _EEPROM_WriteFrame(INT16U iAddr,const char* pBuff,INT8U cLeng)
{

INT8U cPage,cAdr;
char    cLoop;


assert(pBuff);
cPage = (INT8U)(iAddr >> 8);
cAdr  = (INT8U)(iAddr & 0xFF);


I2C_Start();


I2C_WriteByte(0xA0);
I2C_WriteByte(cPage);
I2C_WriteByte(cAdr);


for(cLoop=0;cLoop<cLeng;cLoop++)
{
I2C_WriteByte(*pBuff++);
}
I2C_Stop();


return TRUE;
}


BOOL EEPROM_WriteBuff(INT16U iAddr,const char* pBuff,INT16U iLeng)
{
char    cRemainder;
char cLoop;
char cBuff[PAGE_BYTE_MAX];


assert(pBuff);
EEP_WP(SW_OFF);

while(iLeng)
{
cRemainder =  iAddr%PAGE_BYTE_MAX;
iAddr     -=  cRemainder;
if( (cRemainder!=0)||(iLeng<PAGE_BYTE_MAX) )
{
EEPROM_ReadBuff(iAddr, cBuff,PAGE_BYTE_MAX);
}
for(cLoop=cRemainder;cLoop<PAGE_BYTE_MAX;cLoop++)
{
cBuff[cLoop] = *pBuff++;
iLeng--;
if(iLeng==0)
{
break;
}
}
_EEPROM_WriteFrame(iAddr,cBuff,PAGE_BYTE_MAX);

iAddr += PAGE_BYTE_MAX;
MCU_DlyXms(10);
}


EEP_WP(SW_ON);


    return TRUE;
}


void EEP_WP(SwType bOn)
{
return;
}



0 0
原创粉丝点击