//******************************************************************** // Ver 1.0 // 2020.03.09 1、新建文件。 //******************************************************************** #ifndef __EEPROM__H #define __EEPROM__H //********************************************************************************************* //EEPROM WP #if 0 //WP驱动IO调整到P50 #define EEPROM_WpInit() GPIO_Init(P1, 6, 1, IO_OUT_PP) #define EEPROM_Wp(NewState) do{ \ if(NewState == DISABLE) GPIO_ClrBit(P1, 6); \ else GPIO_SetBit(P1, 6); \ }while(0) #else #define EEPROM_WpInit() GPIO_Init(P5, 0, 1, IO_OUT_PP) #define EEPROM_Wp(NewState) do{ \ if(NewState == DISABLE) GPIO_ClrBit(P5, 0); \ else GPIO_SetBit(P5, 0); \ }while(0) #endif //********************************************************************************************* enum { EE_READ = 0x00, EE_WRITE = 0x01, EE_VERIFY = 0x02, EE_SAVE = 0x03, EE_SUCCESS = 0x80, EE_FAILURE = 0x81, EE_WAIT = 0x82, }; //********************************************************************************************* //EEPROM存储器定义 #define AT_24C256 //选择器件型号 #define EEPROM_ADDR 0xa0 //AT24Cxx地址 #if (defined AT_24C01) #define EEPROM_SIZE (1*1024UL/8) //AT24C01 #define EEPROM_SECTOR 8 //扇区大小8字节 #define EEPROM_PAGE 128 //128个扇区 #elif (defined AT_24C02) #define EEPROM_SIZE (2*1024UL/8) //AT24C02 #define EEPROM_SECTOR 8 //扇区大小8字节 #define EEPROM_PAGE 256 //256扇区 #elif (defined AT_24C04) #define EEPROM_SIZE (4*1024UL/8) //AT24C04 #define EEPROM_SECTOR 16 //扇区大小16字节 #define EEPROM_PAGE 256 //256扇区 #elif (defined AT_24C08) #define EEPROM_SIZE (8*1024UL/8) //AT24C08 #define EEPROM_SECTOR 16 //扇区大小16字节 #define EEPROM_PAGE 512 //512扇区 #elif (defined AT_24C16) #define EEPROM_SIZE (16*1024UL/8) //AT24C16 #define EEPROM_SECTOR 16 //扇区大小16字节 #define EEPROM_PAGE 1024 //1024扇区 #elif (defined AT_24C32) #define EEPROM_SIZE (32*1024UL/8) //AT24C32 #define EEPROM_SECTOR 32 //扇区大小32字节 #define EEPROM_PAGE 1024 //1024扇区 #elif (defined AT_24C64) #define EEPROM_SIZE (64*1024UL/8) //AT24C64 #define EEPROM_SECTOR 32 //扇区大小32字节 #define EEPROM_PAGE 2048 //2048扇区 #elif (defined AT_24C128) #define EEPROM_SIZE (128*1024UL/8) //AT24C128 #define EEPROM_SECTOR 64 //扇区大小64字节 #define EEPROM_PAGE 2048 //2048扇区 #elif (defined AT_24C256) #define EEPROM_SIZE (256*1024UL/8) //AT24C256 #define EEPROM_SECTOR 64 //扇区大小64字节 #define EEPROM_PAGE 4096 //4096扇区 #endif typedef struct { INT8U Buff[EEPROM_SECTOR]; INT16U PageAddr; INT16U Size; INT8U Flag; } EEPROM_Str; extern EEPROM_Str EEPROM_Info; //********************************************************************************************* //EEPROM I2C读写接口 #define EEPROM_I2CRead(Reg, ptr, Len) I2CS_ReadMultiByte(I2CS1, EEPROM_ADDR, (0x8000 | (Reg)), ptr, Len) #define EEPROM_I2CWrite(Reg, ptr, Len) I2CS_WriteMultiByte(I2CS1, EEPROM_ADDR, (0x8000 | (Reg)), ptr, Len) enum { EEPROM_ADDR_BASE = 0x0000, //EEPROM起始地址 EEPROM_SIZE_BALANCE_INFO = EEPROM_SECTOR * 4, //2页 EEPROM_SIZE_USE_INFO = EEPROM_SECTOR * 2, //1页 EEPROM_SIZE_ALARMCNT_INFO = EEPROM_SECTOR * 2, //1页 EEPROM_SIZE_ALARMLOG_INFO = EEPROM_SECTOR * 8, //4页 EEPROM_ADDR_BALANECE_INFO = EEPROM_ADDR_BASE, EEPROM_ADDR_USE_INFO = EEPROM_ADDR_BALANECE_INFO + EEPROM_SIZE_BALANCE_INFO, EEPROM_ADDR_ALARMCNT_INFO = EEPROM_ADDR_USE_INFO + EEPROM_SIZE_USE_INFO, EEPROM_ADDR_ALARMLOG_INFO = EEPROM_ADDR_ALARMCNT_INFO + EEPROM_SIZE_ALARMCNT_INFO, }; //********************************************************************************************* extern void EEPROM_InfoInit(void); extern void EEPROM_Init(void); extern INT8U EEPROM_Read(INT16U Addr, INT8U *ptr, INT16U Len); extern INT8U EEPROM_Write(INT16U Addr, INT8U *ptr, INT16U Len); #endif