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
- AT24C64
- C语言程序>>AT24C64
- IIC总线协议---以存储芯片at24c64为例
- ios开发 CocoaPods管理本地库
- Weka初步一
- Android.os包中一些类的使用
- Android基础之AsyncTask的doInBackground方法参数详解
- 解析目标文件
- AT24C64
- 《Linux开发环境搭建二》Ubuntu10.04中VMware_tools的安装
- Activity组件的启动过程
- mfcs90d.lib(xxx.obj) : error LNK2005: DllMain@12 already defined in MSVCRTD.lib(xxx.obj)
- OpenGL使用glColorMaterial设置材质
- 欢迎使用CSDN-markdown编辑器
- 6. Laravel5学习笔记:IOC/DI的理解
- UILabel 设置不同颜色,不同字体
- makefile规则