#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;
|
SAVE_REALTIME_DATA_T save_realtime_data_g;
|
SAVE_VALVE_PARA_T save_valve_para_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);
|
}
|
}
|