#include "system_mem_para.h" #include "mbcrc.h" #include "eeprom.h" #include "system_eep_mem_manage.h" SYSTEM_EEP_IDENTIFICATION_T system_eep_id_g; EQUIPMENT_BASIC_INF_T equipment_basic_inf_g; MAIN_EQUIPM_HARDWARE_SOFTWARE_INF_T main_equipment_hardware_software_inf_g; LCD_EQUIPM_HARDWARE_SOFTWARE_INF_T lcd_equipment_hardware_software_inf_g; WIRELESS_EQUIPM_HARDWARE_SOFTWARE_INF_T wireless_equipment_hardware_software_inf_g; //EEPROM²ÎÊýдÈëºÍ¶ÁÈ¡¼ì²é,Ö»Ö§³Ö1024¸ö×Ö½ÚµÄдÈëÓë¶ÁÈ¡¼ì²é ErrorStatus eepWriteAndReadCheck(uint8_t * write_data,uint32_t addr,uint16_t length) { uint8_t buf_l[1024]; if(length >1024) return FAIL; EEPROM_MultipleWrite(write_data,addr,length); EEPROM_MultipleRead(buf_l,addr,length); return ucharcmp(write_data,buf_l,length); } //EEPROM²ÎÊýABÇø¶à·ÝдÈëºÍ¶ÁÈ¡¼ì²é ErrorStatus eepABWriteAndReadCheck(uint8_t * write_data,uint32_t addrA,uint32_t addrB,uint16_t length) { ErrorStatus return_flag = PASS; if(eepWriteAndReadCheck(write_data,addrA,length)==FAIL) { if(eepWriteAndReadCheck(write_data,addrA,length)==FAIL) { return_flag = FAIL; } } if(eepWriteAndReadCheck(write_data,addrB,length)==FAIL) { if(eepWriteAndReadCheck(write_data,addrB,length)==FAIL) { return_flag = FAIL; } } return return_flag; } //EEPROM²ÎÊý¶ÁÈ¡²¢¼ì²é£¬Ö»Ö§³Ö×î´ó1024×Ö½Ú¶ÁÈ¡ ErrorStatus eepABReadCheck(uint8_t * write_data,uint32_t addrA,uint32_t addrB,uint16_t length) { ErrorStatus read_flag = FAIL; uint16_t CRC16_MODBUS; uint8_t buf_l[1024]={0}; const uint8_t read_times = 2; uint8_t count_i = 0; if(length >1024) return FAIL; for(count_i=0;count_i< read_times;count_i++) { memset (buf_l,0,sizeof (buf_l)); EEPROM_MultipleRead(buf_l,addrA,length); CRC16_MODBUS = usMBCRC16(0xFFFF, &buf_l[CRC16_MODBUS_OFFSET], length - CRC16_MODBUS_OFFSET ); if((buf_l[1]*256 + buf_l[0])==CRC16_MODBUS) { read_flag = PASS; break; } } if(read_flag == PASS) { arrayA_2_arrayB(buf_l, write_data, length, LITTLE_ENDIAN) ; return PASS; }else { for(count_i=0;count_i< read_times;count_i++) { memset (buf_l,0,sizeof (buf_l)); EEPROM_MultipleRead(buf_l,addrB,length); CRC16_MODBUS = usMBCRC16(0xFFFF, &buf_l[CRC16_MODBUS_OFFSET], length - CRC16_MODBUS_OFFSET ); if((buf_l[1]*256 + buf_l[0])==CRC16_MODBUS) { read_flag = PASS; break; } } if(read_flag == PASS) { arrayA_2_arrayB(buf_l, write_data, length, LITTLE_ENDIAN) ; EEPROM_MultipleWrite(buf_l,addrA,length);//AÇøÐ£Ñé´íÎó£¬BÇøÕýÈ·£¬Ôò½«BÇøÊý¾ÝдÈëAÇø return PASS; }else { return FAIL; } } } //²ÎÊý¼ÆËãCRCºóÔÙдÈëAB´æ´¢Çø ErrorStatus paraCalcCrcAndWriteEepAB(uint8_t * write_data,uint32_t addrA,uint32_t addrB,uint16_t length) { uint16_t CRC16_MODBUS; CRC16_MODBUS = usMBCRC16(0xFFFF, write_data + CRC16_MODBUS_OFFSET, length - CRC16_MODBUS_OFFSET ); *write_data = CRC16_MODBUS&0xff; *(write_data + 1) = (CRC16_MODBUS>>8)&0xff; if(eepABWriteAndReadCheck(write_data,addrA,addrB,length) == FAIL) { return FAIL; }else { return PASS; } } //ϵͳ´æ´¢±êʶ³õʼ»¯Ð´Èë ErrorStatus systemEepIdDefaultInit(void) { system_eep_id_g.eep_para_init_config_id = EEP_PARA_INIT_ID; system_eep_id_g.eep_para_patch_id = LAST_PATCH_ID; memset(system_eep_id_g.reserve,0,sizeof (system_eep_id_g.reserve)); return paraCalcCrcAndWriteEepAB((uint8_t * )&system_eep_id_g,SYSTEM_EEP_ID_ADDR,SYSTEM_EEP_ID_ADDR + PARA_EEP_B_OFFSET_ADDR,SYSTEM_EEP_IDENTIFICATION_LENGTH); } //ϵͳ´æ´¢±êʶ¶ÁÈ¡ ErrorStatus systemEepIdReadFromEep(void) { if( eepABReadCheck((uint8_t * )&system_eep_id_g,SYSTEM_EEP_ID_ADDR,SYSTEM_EEP_ID_ADDR + PARA_EEP_B_OFFSET_ADDR,SYSTEM_EEP_IDENTIFICATION_LENGTH) == FAIL) { systemEepIdDefaultInit(); return FAIL; }else { return PASS; } } //ËùÓвÎÊý³õʼ»¯ÎªÄ¬ÈÏÖµ²¢Ð´ÈëEEPROM void allParaDefaultInit(void) { ErrorStatus return_flag = PASS; //ϵͳ´æ´¢±êʶ³õʼ»¯Ð´Èë if(systemEepIdDefaultInit()==FAIL) return_flag = FAIL; //É豸»ù´¡ÐÅÏ¢³õʼ»¯Ð´Èë //×îÖÕÅжÏreturn_flag==FAIL£¬Ôò±¨¾¯´æ´¢Òì³££¬Èç¹û»¹ÓÐÕâ¸ö±¨¾¯µÄ»° } //ËùÓвÎÊýÖ±½Ó¶ÁÈ¡ void allParaReadFromEep(void) { ErrorStatus return_flag = PASS; //ϵͳ´æ´¢±êʶ¶ÁÈ¡ if(systemEepIdReadFromEep()==FAIL) return_flag = FAIL; //É豸»ù´¡ÐÅÏ¢¶ÁÈ¡ //×îÖÕÅжÏreturn_flag==FAIL£¬Ôò±¨¾¯´æ´¢Òì³££¬Èç¹û»¹ÓÐÕâ¸ö±¨¾¯µÄ»° } //²¹¶¡1 void eepParaPatchPro_1(void) { //¿Õ } //²¹¶¡2 void eepParaPatchPro_2(void) { //½«ÐèÒª³õʼ»¯µÄ²ÎÊýÐÞ¸ÄÖ®ºó£¬ÔÙÖØÐ´洢 } void allParaPatchPro(void) { uint8_t patch_id_need_write = 0 ; //·Ç0´ú±íÐèÒªÖØÐÂдpatch_idµ½´æ´¢ //¿ÉÒÔ¿¼ÂDz¹¶¡±êʶµÄʶ±ð£¬Ò»°ãÀ´ËµÐ¡ÓÚEEP_PARA_PATCH_ID_1 »òÕß´óÓÚ0x50000000ÊÇ´íÎóµÄ£¬³öÏÖ×ÖĸҲÊÇ´íÎóµÄ if(system_eep_id_g.eep_para_patch_id < EEP_PARA_PATCH_ID_1) { eepParaPatchPro_1(); system_eep_id_g.eep_para_patch_id = EEP_PARA_PATCH_ID_1; patch_id_need_write = 1; } //´Ë´¦¼ÌÐøÔö¼ÓºóÐø²¹¶¡ // if(system_eep_id_g.eep_para_patch_id < EEP_PARA_PATCH_ID_2) // { // eepParaPatchPro_2(); // system_eep_id_g.eep_para_patch_id = EEP_PARA_PATCH_ID_2; // patch_id_need_write = 1; // } if(patch_id_need_write!=0) { paraCalcCrcAndWriteEepAB((uint8_t * )&system_eep_id_g,SYSTEM_EEP_ID_ADDR,SYSTEM_EEP_ID_ADDR + PARA_EEP_B_OFFSET_ADDR,SYSTEM_EEP_IDENTIFICATION_LENGTH); } }