#ifndef _EEPROM_24CXX_REMAP_H_ #define _EEPROM_24CXX_REMAP_H_ /*************************************************************************************************************************** 1.�洢����ַ��ӳ�� ��Ϊ����д������Ϊһҳ(Page),������ӳ����ҳ(Page)Ϊ��λ,EEPROM�洢���Ŀռ䱻����Ϊ�ĵȷ�,�γ�һ����N(N = ��ҳ�� / 4)�� 4�е�ҳ(Page)���� Page ^ Physical Physical Physical Physical Row | Address Address Address Address | | +---------------+ MC/4-1 +---------------+ 2MC/4-1 +---------------+ 3MC/4-1 +---------------+ MC-1 T/4-1 | | Page (T/4-1) | | Page (2T/4-1) | | Page (3T/4-1) | | Page (T-1) | | +---------------+ +---------------+ +---------------+ +---------------+ : | | : | | : | | : | | : | : | | : | | : | | : | | : | : | | : | | : | | : | | : | | +---------------+ +---------------+ +---------------+ +---------------+ 1 | | Page (1) | | Page (T/4+1) | | Page (2T/4+1) | | Page (3T/4+1) | | +---------------+ +---------------+ +---------------+ +---------------+ 0 | | Page (0) | | Page (T/4) | | Page (2T/4) | | Page (3T/4) | | +---------------+ 0 +---------------+ MC/4 +---------------+ 2MC/4 +---------------+ 3MC/4 +------------------------------------------------------------------------------------------------------------------> 0 1 2 3 Page Col * MC = Memory Capacity �洢������ * T = Total pages ��ҳ�� 2.�������� �����ݵİ�ȫ�Եȼ���ͬ�������������ݴ洢����: - HiRel �߿ɿ������ݴ洢.�ô洢���͵����ݴ�ȡ��Ԫ�������ֽں�У���ֽ����,����У���ֽ�Ϊ�����ֽڰ�λȡ������.�ڽ������� �洢ʱ,ÿ�����ݴ�ȡ��Ԫ����ҳ�����ͬһ��(Row)�ĵ�1��2��3��(Col)���洢һ��,��0��Ϊ����ҳ��ʹ��.�ڽ������ݶ�ȡʱ, ������ÿ�����ݴ�ȡ��Ԫ�е������ֽڻ�ʹ��ͬһ��Ԫ�е�У���ֽڽ���У��,��������У��ʧ��ʱ, ��Ȼ�д洢������λ���� �ݵ�Ԫ��Ϊ����,�Ӷ���֤�����ݴ洢�Ŀɿ���. ��߿ɿ��Ե���һ��;����ҳ����ͬһ��(Row)�еIJ�ͬ��(Col)��������ַ�����������Ƿ�ɢ��EEPROM֮�е�,��EEPROM������ ����Ŷ���ʧ��ijһ���������ʱ,��Ȼ�洢�ڸ���������ݴ�ȡ��Ԫ����һͬ��ʧ,���洢�����������δ��Ӱ������ݵ�Ԫ ���Կ��Ա�֤���ݿ���˳������ȡ. - ExtLife ��չ���������ݴ洢.EEPROM�IJ�д����ԼΪ 1,000,000 ��,����ijЩ��ҪƵ����д������,��һ������Ҳ�������������д���� ��Ҫ��.��չ���������ݴ洢���ǽ������ݴ�ȡ��Ԫ�����ش洢��ҳ�����3��(Row)4��(Col)��12����ͬ��λ����,�Ӷ��������� ����12��,�ﵽ 12,000,000 �β�д.���ִ洢���͵����ݴ�ȡ��Ԫ��Ϊ������,��һ����Ϊ16λ�Ĺ���������,�ڶ�����Ϊ������ ��,��������Ϊ16λ�������ֽڵ�Checksum.ÿ�δ洢����ʱ,�µ����ݽ�������洢����������ҳ���������е�һ���µ�λ����, ͬʱ,����Ĺ��������������1.��ȡ����ʱ,����������ҳ���������е����еĹ�����������������ȡ,���ݹ�����������ֵ�� ����һ�����ݴ洢��Ԫ�а����������µ�����. ��չ���������ݴ洢��Ȼ���Ա�֤�ϸߵ����ݿɿ���,�洢����ʱ,��ͬʱ���������ֽڵ�Checksumһ���洢,��������ʱʹ�ø� CheckSum�Զ����������ֽڽ���У��,���У��ʧ��,���ȡǰһ�δ洢������,ֱ�����ݱ�����.��һ����,��߿ɿ������ݴ洢 ��ͬ,���ݴ�ȡ��Ԫ��ɢ��EEPROM�д洢,����������������ɵ��������ⶪʧ. - Normal ��ͨ���ݴ洢.���ڴ洢һ���Ե�����,���ִ洢��ʽ�İ�ȫ������EEPROM�����Ŀɿ���,���ڴ��һ���Ե����� 3.���ݷֲ� +-------------------+-------+------------+------------+------------+------------+ | Data Type | Row | Col 0 | Col 1 | Col 2 | Col 3 | +-------------------+-------+------------+------------+------------+------------+ | | T/4-1 | NPage(M-4) | NPage(M-3) | NPage(M-2) | NPage(M-1) | | +-------+------------+------------+------------+------------+ | | : | : | : | : | : | | | : | : | : | : | : | | Normal +-------+------------+------------+------------+------------+ | | N+1 | NPage(4) | NPage(5) | NPage(6) | NPage(7) | | +-------+------------+------------+------------+------------+ | | N | NPage(0) | NPage(1) | NPage(2) | NPage(3) | +---------+---------+-------+------------+------------+------------+------------+ | | : | : | : | : | : | : | | | : | : | : | : | : | : | | +---------+-------+------------+------------+------------+------------+ | | | E+5 | EPage(8) | EPage(9) | EPage(10) | EPage(11) | | | +-------+------------+------------+------------+------------+ | | EData 1 | E+4 | EPage(4) | EPage(5) | EPage(6) | EPage(7) | | | +-------+------------+------------+------------+------------+ | ExtLife | | E+3 | EPage(0) | EPage(1) | EPage(2) | EPage(3) | | +---------+-------+------------+------------+------------+------------+ | | | E+2 | EPage(8) | EPage(9) | EPage(10) | EPage(11) | | | +-------+------------+------------+------------+------------+ | | EData 0 | E+1 | EPage(4) | EPage(5) | EPage(6) | EPage(7) | | | +-------+------------+------------+------------+------------+ | | | E | EPage(0) | EPage(1) | EPage(2) | EPage(3) | +---------+---------+-------+------------+------------+------------+------------+ | | : | : | : | : | : | : | | | : | : | : | : | : | : | | +---------+-------+------------+------------+------------+------------+ | HiRel | HData 1 | 1 | Rsvd. | HPage(0) | HPage(1) | HPage(2) | | +---------+-------+------------+------------+------------+------------+ | | HData 0 | 0 | Rsvd. | HPage(0) | HPage(1) | HPage(2) | +---------+---------+-------+------------+------------+------------+------------+ * T = Total pages ��ҳ�� * M = Total Normal Data pages ��ͨ���ݴ洢��ҳ�� * N = Start row of Normal Data ��ͨ���ݴ洢��ʼ�� * NPage = Normal Data page ��ͨ���ݴ洢ҳ * E = Start row of ExtLife Data ��չ���������ݴ洢��ʼ�� * EPage = ExtLife Data page ��չ���������ݴ洢ҳ * EData = ExtLife Data ��չ���������� * HPage = HiRel Data page �߿ɿ������ݴ洢ҳ * HData = HiRel Data �߿ɿ������� ***************************************************************************************************************************/ /*************************************************************************************************************************** �洢������ ***************************************************************************************************************************/ #define EEPPROM_HIREL_DATA_NUM 2 //�߿ɿ����������� #define EEPPROM_EXTLIFE_DATA_NUM 0 //��չ�������������� #define EEPPROM_DATA_BUFFER_SIZE 64//32 #define EEPPROM_DEVICE_ADDR 0 //�洢����Ӳ����ַ /*************************************************************************************************************************** ����Ԥ���� ***************************************************************************************************************************/ /*** �洢��ȫ�� ***/ #define EEPPROM_TOTAL_ROW_NUM (EEPROM_TOTAL_PAGE_NUM / 4) /*** �߿ɿ������� ***/ #define EEPPROM_HIREL_DATA_MAX_LEN (EEPROM_PAGE_SIZE / 2) /*** ��չ���������� ***/ #define EEPPROM_EXTLIFE_DATA_ROW_OFFSEET EEPPROM_HIREL_DATA_NUM #define EEPPROM_EXTLIFE_DATA_MAX_LEN (EEPROM_PAGE_SIZE - 4) /*** ��ͨ���� ***/ #define EEPPROM_DATA_ROW_OFFSEET (EEPPROM_HIREL_DATA_NUM + EEPPROM_EXTLIFE_DATA_NUM * 3) #define EEPPROM_DATA_TOTAL_PAGE_NUM ((EEPPROM_TOTAL_ROW_NUM - EEPPROM_DATA_ROW_OFFSEET) * 4) #define EEPPROM_DATA_MAX_ADDR (EEPROM_PAGE_SIZE * EEPPROM_DATA_TOTAL_PAGE_NUM - 1) /*************************************************************************************************************************** �������� ***************************************************************************************************************************/ #define EEPROM_HIREL_DATA_TYPE 0 #define EEPROM_EXTLIFE_DATA_TYPE 1 #define EEPROM_NORMAL_DATA_TYPE 2 /*************************************************************************************************************************** ����״̬ ***************************************************************************************************************************/ typedef enum { EEPROM_DATA_OK = 0, EEPROM_DATA_PARTIAL_LOST, EEPROM_DATA_LOST, EEPROM_DATA_ADDR_ERR, EEPROM_DATA_LEN_ERR, EEPROM_DATA_RW_FAIL, EEPROM_MEMORY_BUSY, EEPROM_MEMORY_ABSENT, }EEPROMAccessStatusEnum; /*************************************************************************************************************************** ���ݴ�ȡ���� ********************* ******************************************************************************************************/ #if (EEPPROM_DATA_BUFFER_SIZE < EEPROM_PAGE_SIZE) typedef struct { uint8_t Type; uint8_t Data[EEPROM_PAGE_SIZE]; uint16_t DataLen; uint8_t Row; uint8_t Col; uint8_t Offset; uint8_t Retry; uint8_t WrLen; uint16_t WrCnt; uint8_t Busy; EEPROMAccessStatusEnum Result; }EEPROMDataWrCtrlStruct; #else typedef struct { uint8_t Type; uint8_t Data[EEPPROM_DATA_BUFFER_SIZE]; uint16_t DataLen; uint8_t Row; uint8_t Col; uint8_t Offset; uint8_t Retry; uint8_t WrLen; uint16_t WrCnt; uint8_t Busy; EEPROMAccessStatusEnum Result; }EEPROMDataWrCtrlStruct; #endif EXTERN EEPROMDataWrCtrlStruct EEPROMDataWrCtrl; /*************************************************************************************************************************** �������� ***************************************************************************************************************************/ /*** �ⲿ���� ***/ EEPROMAccessStatusEnum EEPROM_Data_Write(uint8_t Type, uint16_t Addr, uint8_t *pData, uint8_t Len); EEPROMAccessStatusEnum EEPROM_Get_Data_Write_Status(void); EEPROMAccessStatusEnum EEPROM_Startup_Data_Read(uint8_t Type, uint16_t Addr, uint8_t *pData, uint8_t Len); void EEPROM_Access_Service(void); /**************************************************************************************************************************/ /*** HiRel�������ݶ�д ***/ EEPROMAccessStatusEnum EEPROM_HiRel_Data_Write(uint16_t Addr, uint8_t *pData, uint8_t Len); EEPROMAccessStatusEnum EEPROM_Startup_HiRel_Data_Read(uint16_t Addr, uint8_t *pData, uint8_t Len); EEPROMAccessStatusEnum EEPROM_Startup_HiRel_Page_Read(uint8_t Row, uint8_t Col, uint8_t *pData, uint8_t Len); uint8_t EEPROM_HiRel_Data_Check(uint8_t *pData, uint8_t Len); void EEPROM_HiRel_Data_Write_Service(void); /*** ExtLife�������ݶ�д ***/ /*** Normal�������ݶ�д ***/ EEPROMAccessStatusEnum EEPROM_Normal_Data_Write(uint16_t Addr, uint8_t *pData, uint16_t Len); EEPROMAccessStatusEnum EEPROM_Startup_Normal_Data_Read(uint16_t Addr, uint8_t *pData, uint8_t Len); void EEPROM_Normal_Data_Write_Service(void); /*** �����ַ������� ***/ void EEPROM_Copy_Data(uint8_t *pDstData, uint8_t *pSrcData, uint8_t Len); uint8_t EEPROM_Compare_Data(uint8_t *pDstData, uint8_t *pSrcData, uint8_t Len); #endif