This commit is contained in:
2026-03-20 21:19:53 +08:00
parent 9d3b4b836f
commit 6a749331db
125 changed files with 29972 additions and 23051 deletions

View File

@@ -1,180 +1,217 @@
#include "../main/SystemInclude.h"
//<2F><><EFBFBD><EFBFBD>һҳ<D2BB><D2B3><EFBFBD><EFBFBD><><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ҳ<EFBFBD><EFBFBD><E6A3AC>Endpage<67><65>Startpage<67><65>ͬ<EFBFBD><CDAC>
void FLASH_Erase_Data_Page(u8 UserPage)
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
USER_PARAMS_ADDR <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӦEEPROM<4F><4D> 0x10-0x6C0 <20><><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> u16 MBReg[336]; u16 WordReg[128]; u32 DWordReg[64];
<09>ܹ<EFBFBD> 1712bytes <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>USER_PARAMS_ADDRΪ<52><CEAA>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7>ҳ;
CORRECT_DATA_ADDR Ĭ<><C4AC>У׼ҳ<D7BC><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӦEEPROM<4F><4D> 0x1000-<2D><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>-<2D><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 param_buffer[TOTAL_PARAM_SIZE] __attribute__((aligned(4))); //4<>ֽڶ<D6BD><DAB6><EFBFBD>
void update_param_bufferFromFlash(void)//
{
u32 flashAddr = FLASH_PAGE_29;
switch(UserPage)
{
case USER_DCOEF_TAG_PAGE:flashAddr= USER_DCOEF_TAG_ADDR; break;
case USER_PARAMS_PAGE :flashAddr= USER_PARAMS_ADDR ; break;
case VENDER_PARAMS_PAGE :flashAddr= VENDER_PARAMS_ADDR ; break;
default : return;
}
if(LHL_FLASH_Erase(flashAddr, flashAddr, LHL_LNG_TIMEOUT) != LHL_OK)
{
while(1);
}
memcpy(param_buffer, (void*)USER_PARAMS_ADDR, TOTAL_PARAM_SIZE);
}
//<2F><><EFBFBD><EFBFBD>ҳд<D2B3><D0B4>
void FLASH_Write_Data_Page(u8 UserPage, void *pBuffer, u32 byteSize)
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>param_buffer<65><72><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>flash ------------------
static void WriteAllParamToFlash(void)
{
//1 <20><>ַӳ<EFBFBD><EFBFBD>
uint32_t flashAddr = 0;
switch(UserPage)
{
case USER_DCOEF_TAG_PAGE: flashAddr = USER_DCOEF_TAG_ADDR ; break;
case USER_PARAMS_PAGE : flashAddr = USER_PARAMS_ADDR ; break;
case VENDER_PARAMS_PAGE : flashAddr = VENDER_PARAMS_ADDR ; break;
default : return;
}
//2 <20><><EFBFBD>϶<EFBFBD><CFB6>뵽 4 <20>ֽ<EFBFBD>
u32 wordCount = (byteSize + 3U)/4U; // <20>ȼ<EFBFBD><C8BC><EFBFBD> ((byteSize + 3) & ~3) / 4
//3 <20><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD>һҳ<D2BB><D2B3>word <20><><EFBFBD><EFBFBD>
if (wordCount > FLASH_PAGE_SIZE/4U) wordCount = FLASH_PAGE_SIZE/4U;
//4 д<><D0B4>
if(LHL_FLASH_Program(flashAddr ,(u32 *)pBuffer, (u16)wordCount, LHL_LNG_TIMEOUT) != LHL_OK)
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Flash ҳ<><D2B3>USER_PARAMS_ADDR <20><>ҳ<EFBFBD><D2B3>ʼ<EFBFBD><EFBFBD>
if(LHL_FLASH_Erase(USER_PARAMS_ADDR, USER_PARAMS_ADDR, LHL_LNG_TIMEOUT) != LHL_OK)
{
while(1);
}
}
//<2F><> 32-bit word д<><D0B4> <20><><EFBFBD><EFBFBD> 4-byte <20><><EFBFBD><EFBFBD>
u16 word_count = (TOTAL_PARAM_SIZE + 3)>>2; // <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1> ת<><D7AA>Ϊ32λ<32><CEBB><EFBFBD>ݵĸ<DDB5><C4B8><EFBFBD>
LHL_FLASH_Program( USER_PARAMS_ADDR, (uint32_t*)param_buffer, word_count, LHL_LNG_TIMEOUT );
}
//Application ******************************************************************
//API
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>ַ<EFBFBD><D6B7>ָ<EFBFBD><D6B8>
volatile u8 * const USER_PARAMS = (u8*)USER_PARAMS_ADDR;
volatile u8 * const VENDER_PARAMS = (u8*)VENDER_PARAMS_ADDR;
volatile u8 * const CORRECT_DATA = (u8 *)CORRECT_DATA_ADDR;
volatile u8 * const CORRECT2_DATA = (u8 *)CORRECT2_DATA_ADDR;
// ͨ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
void ReadParameterFromFlash( void *value,u16 offset, u8 size ,u8 UserPage )
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><>ֽڱ<D6BD><DAB1><EFBFBD><EFBFBD><EFBFBD>
u16 WriteShortParameterToFlash(u16 parameterAdr)
{
if(offset + size <= FLASH_PAGE_BYTE_SIZE) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҳ<D2BB><D2B3>С
{
switch(UserPage)
{
case USER_PARAMS_PAGE :memcpy(value,(void*)&USER_PARAMS[offset] , size);break; //<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ҳ
case VENDER_PARAMS_PAGE :memcpy(value,(void*)&VENDER_PARAMS[offset], size);break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ
default : break ;
}
}
//<2F><><EFBFBD><EFBFBD>˫<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>------------------------------------------------------------------
// if((parameterAdr >=REG_MEM_ADDR_START) && (parameterAdr < REG_INT_DWORD_MEM_ADDR_START))
// {}
u8 *p = param_buffer;
tempL.Byte[2] = CRC8(tempL.Byte, 2);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
p += parameterAdr;
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD>
p[0] = tempL.Byte[0];
p[1] = tempL.Byte[1];
p[2] = tempL.Byte[2];
//дparam_buffer<65><72>Flash
WriteAllParamToFlash();
tempL.Word[0] = ReadShortParameterFromFlash(parameterAdr,WordDefault[ADR_WORD_IDX(parameterAdr)][DEFAULT]);
tempL.Byte[2] = 0;
// ע<><EFBFBD><E2A3BA>ʱ<EFBFBD><CAB1><EFBFBD>ø<EFBFBD><C3B8><EFBFBD> WordReg[index]
// <20><>Ϊ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>*WRSource = <20><><EFBFBD><EFBFBD>ֵ;
return tempL.Word[0]; //<2F>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ô<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> WordReg[I]
}
//APP
u8 mucSaveParams; //Flash״̬<D7B4><CCAC>־
u8 munWriteParams;//Flashд<68>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
#define ParamsBufSize FLASH_PAGE_BYTE_SIZE/4u //4K<34><4B>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>1K)
u8 unParamsBuf[ParamsBufSize]; //<2F><><EFBFBD>ڰ<EFBFBD>byte<74>洢flashҳ<68>м仺<D0BC><E4BBBA>
/* <20><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>(<28><><EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */
void SaveSysParams(void)
//д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD>ֽڱ<D6BD><DAB1><EFBFBD><EFBFBD><EFBFBD>
u32 WriteLongParameterToFlash(u16 parameterAdr)
{
if(munWriteParams == WP_NOT) return;//<2F><>д<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
//0- <20>Ƿ<EFBFBD><C7B7>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
if(munWriteParams == WP_DEF)//<2F>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><EFBFBD>ֵ
{
mucSaveParams = PARAMS_ING;//д<><D0B4><EFBFBD><EFBFBD>
memcpy(unParamsBuf, (void*)VENDER_PARAMS, ParamsBufSize);//<2F><>Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳװ<D2B3><D7B0>unParamsBuf
FLASH_Erase_Data_Page(USER_PARAMS_PAGE);//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ҳ
FLASH_Write_Data_Page(USER_PARAMS_PAGE, unParamsBuf, ParamsBufSize);//<2F><>unParamsBufд<66><D0B4><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ҳ
munWriteParams = WP_NOT; //<2F>ָ<EFBFBD><D6B8><EFBFBD>д<EFBFBD><D0B4>״̬
mucSaveParams = PARAMS_COMPL;//Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//1- ׼<><D7BC><EFBFBD><EFBFBD>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>FLASH<53><48><EFBFBD><EFBFBD>
//1-1 <20><>Flash<73><68><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
memcpy(unParamsBuf, (void*)USER_PARAMS, ParamsBufSize);
//1-2 ΪunParamsBuf<75><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸IJ<DEB8><C4B2>ֵ<EFBFBD><D6B5><EFBFBD>ֵ
memcpy((void *)&unParamsBuf[OFFSET_AIR], &offsetAir, OFFSET_AIR_WIDTH);
memcpy((void *)&unParamsBuf[OFFSET_GAS], &offsetGas, OFFSET_GAS_WIDTH);
memcpy((void *)&unParamsBuf[SERIES_BASE+SENSOR_SN_WIDTH*1],&meterSN1,SENSOR_SN_WIDTH);
memcpy((void *)&unParamsBuf[SERIES_BASE+SENSOR_SN_WIDTH*2],&meterSN2,SENSOR_SN_WIDTH);
memcpy((void *)&unParamsBuf[SERIES_BASE+SENSOR_SN_WIDTH*3],&meterSN3,SENSOR_SN_WIDTH);
memcpy((void *)&unParamsBuf[SERIES_BASE+SENSOR_SN_WIDTH*4],&meterSN4,SENSOR_SN_WIDTH);
memcpy((void *)&unParamsBuf[SERIES_BASE+SENSOR_SN_WIDTH*5],&meterSN5,SENSOR_SN_WIDTH);
memcpy((void *)&unParamsBuf[SERIES_BASE+SENSOR_SN_WIDTH*6],&meterSN6,SENSOR_SN_WIDTH);
// if( (parameterAdr >=REG_INT_DWORD_MEM_ADDR_START)&& parameterAdr <= REG_INT_DWORD_MEM_ADDR_END)
// { }
tempDev.Byte[4] = CRC8(tempDev.Byte, 4);//<2F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD>
u8 *p = param_buffer;
p += (parameterAdr );
p[0] = tempDev.Byte[0];
p[1] = tempDev.Byte[1];
p[2] = tempDev.Byte[2];
p[3] = tempDev.Byte[3];
p[4] = tempDev.Byte[4];
//дparam_buffer<65><72>Flash
WriteAllParamToFlash();
tempDev.DWord[0] = ReadLongParameterFromFlash(parameterAdr,WordDefault[ADR_DWORD_IDX(parameterAdr)][DEFAULT]);
tempDev.Byte[4] = 0;
//......
//2- <20><>ʼд<CABC><D0B4>Flash
//д<><D0B4><EFBFBD>Ҽ<EFBFBD><D2BC>û<EFBFBD><C3BB><EFBFBD>
if(munWriteParams == WP_VENDER)
return tempDev.DWord[0];
}
//дУ׼ҳ<D7BC><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------
void WriteMultiByteToFlash(u16 address, u8 *wrtData, u16 dataLenth, u8 flashAdr)
{
(void)flashAdr; // û<>ж<EFBFBD><D0B6><EFBFBD>Flash
//Ĭ<><C4AC>У׼<D0A3><D7BC><EFBFBD><EFBFBD>---------------------------------------------------------------
if(address >= CALI_DATA1_ADDR)//Ҫд<D2AA><D0B4><EFBFBD>ĵ<EFBFBD>ַΪԭeeprom<6F><6D>У׼<D0A3><D7BC>
{
FLASH_Erase_Data_Page(USER_PARAMS_PAGE);//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ҳ
FLASH_Write_Data_Page(USER_PARAMS_PAGE,unParamsBuf, ParamsBufSize);//<2F><>ҳд<D2B3><D0B4>
FLASH_Erase_Data_Page(VENDER_PARAMS_PAGE);//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ҳ
FLASH_Write_Data_Page(VENDER_PARAMS_PAGE,unParamsBuf, ParamsBufSize);//<2F><>ҳд<EFBFBD><EFBFBD>
//0.ת<><D7AA><EFBFBD><EFBFBD>Flash<EFBFBD><EFBFBD>ַ
u32 ADDR = (u32)(address - CALI_DATA1_ADDR);
ADDR = ADDR + CORRECT_DATA_ADDR;
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>һҳ<D2BB><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ׼<D2B3><D7BC>д<EFBFBD><EFBFBD>
if((ADDR&0x0FFF) == 0x000) LHL_FLASH_Erase(ADDR,ADDR,LHL_LNG_TIMEOUT);//ADDR<44><52>ҳ<EFBFBD><D2B3>ADDRΪҳ<CEAA>׵<EFBFBD>ַ
if(ADDR >(CORRECT_DATA_ADDR+ CALIB_STORED_SIZE) ) MBBuf.BusError = SLAVE_DEVICE_FAILURE;//<2F><><EFBFBD><EFBFBD>
//дУ׼<D0A3><D7BC><EFBFBD><EFBFBD>Flash
LHL_FLASH_Program(ADDR,(u32 *)wrtData,dataLenth>>2 ,LHL_LNG_TIMEOUT);
}
//д<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>
else if(munWriteParams == WP_USER)
{
FLASH_Erase_Data_Page(USER_PARAMS_PAGE);//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ҳ
FLASH_Write_Data_Page(USER_PARAMS_PAGE,unParamsBuf, ParamsBufSize);//<2F><>ҳд<D2B3><D0B4>
}
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else if(munWriteParams == WP_DCOEF_TAG)
{
//У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2---------------------------------------------------------------
//CALI_DATA2_ADDR CORRECT_DATA2_ADDR CALIB_STORED_SIZE2
//У׼<D0A3><D7BC><EFBFBD><EFBFBD>3---------------------------------------------------------------
//CALI_DATA3_ADDR CORRECT_DATA3_ADDR CALIB_STORED_SIZE3
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
// else if()
// {
// USER_DCOEF_TAG_ADDR
// }
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>------------------------------------------------------------------
else if((address >=REG_MEMORY_ADDR) && (address <= REG_INT_DWORD_MEM_ADDR_END))
{
}
munWriteParams = WP_NOT;//<2F>ָ<EFBFBD><D6B8><EFBFBD>д<EFBFBD><D0B4>״̬
mucSaveParams = PARAMS_COMPL;//Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
wrtData[dataLenth] = CRC8(wrtData, dataLenth);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵУ<D6B5><D0A3><EFBFBD><EFBFBD>
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD>
u8 *p = param_buffer;
p += address;
/*for(u8 i = 0 ; i < dataLenth+1 ; i ++)
{
p[i] = wrtData[i];
}*/
//ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>ֽڽ<D6BD><DABD><EFBFBD>
for (int i = 0; i < dataLenth; i += 2) {
p[i] = wrtData[i + 1]; //<2F>͵<EFBFBD>ַ
p[i + 1] = wrtData[i]; //<2F>ߵ<EFBFBD>ַ
}
p[dataLenth]= wrtData[dataLenth];//CRCֱ<43>Ӹ<EFBFBD><D3B8><EFBFBD>
WriteAllParamToFlash();
}
/******************************************************************************/
/* дУ׼<D0A3><D7BC>ָ<EFBFBD><D6B8>ҳ<EFBFBD><D2B3>FLASH<53><48><EFBFBD>ݣ<EFBFBD>ÿ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>һ֡<D2BB>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> */
void FLASH_Write_Calib_Data_ToFlash(u16 FrameN, u8 *pBuffer )
{
u32 ADDR;
ADDR = FrameN * CALIB_WIDTH + CORRECT_DATA_ADDR;
if((ADDR&0x0FFF) == 0x000)LHL_FLASH_Erase(ADDR,ADDR,LHL_LNG_TIMEOUT);//ADDR<44><52>ҳ<EFBFBD><D2B3>ADDRΪҳ<CEAA>׵<EFBFBD>ַ
if(ADDR >(CORRECT_DATA_ADDR+CALIB_REAL_SIZE)) MBBuf.BusError = SLAVE_DEVICE_FAILURE;
}
LHL_FLASH_Program(ADDR,(u32 *)pBuffer,CALIB_WIDTH/4u ,LHL_LNG_TIMEOUT);
}
/* дУ׼<D0A3><D7BC>ָ<EFBFBD><D6B8>ҳ<EFBFBD><D2B3>FLASH<53><48><EFBFBD>ݣ<EFBFBD>ÿ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD>һ֡<D2BB>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>*/
void FLASH_Write_Calib2_Data_ToFlash(u16 FrameN, u8 *pBuffer )
//<2F><>˫<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>------------------------------------------------------------------
u16 ReadShortParameterFromFlash(u16 parameterAdr , u16 parameterDefault)
{
u32 ADDR;
ADDR = FrameN * CALIB_WIDTH + CORRECT2_DATA_ADDR;
if((ADDR&0x0FFF) == 0x000)LHL_FLASH_Erase(ADDR,ADDR,LHL_LNG_TIMEOUT);//ADDR<EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>ADDRΪҳ<EFBFBD>׵<EFBFBD>ַ
if(ADDR >(CORRECT2_DATA_ADDR+CALIB_REAL_SIZE))MBBuf.BusError = SLAVE_DEVICE_FAILURE;
LHL_FLASH_Program(ADDR,(u32*)pBuffer ,CALIB_WIDTH/4u ,LHL_LNG_TIMEOUT );
// if(parameterAdr >=REG_MEM_ADDR_START && parameterAdr < REG_INT_DWORD_MEM_ADDR_START)
// { }
u32 ADDR = ((u32)parameterAdr + USER_PARAMS_ADDR);// <20><>EEPROM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> MEM_ADDR_REG_0X30 = 0x10<31><30>תΪ Flash <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
tempL.Word[0] = 0;
memcpy(tempL.Byte,(const void*)ADDR, 3);
if(tempL.Byte[2] != CRC8(tempL.Byte, 2))
{
tempL.Word[0] = (u32)parameterDefault;
isReadParameterOK = 0;
}
else
{
tempL.Byte[2] = 0;
isReadParameterOK = 1;
}
return tempL.Word[0];
}
/******************************************************************************/
/* <20><>ҳ<EFBFBD><D2B3>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void ReadCalibDataFromFlash(u32 frameN , u8 *data ,u16 size )
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>------------------------------------------------------------------
u32 ReadLongParameterFromFlash(u16 parameterAdr , u16 parameterDefault)
{
memcpy(data,(void*)&CORRECT_DATA[frameN*size], size);
// if( (parameterAdr >=REG_INT_DWORD_MEM_ADDR_START)&& parameterAdr <= REG_INT_DWORD_MEM_ADDR_END)
// { }
u32 ADDR = (u32)(parameterAdr + USER_PARAMS_ADDR);
tempDev.DWord[0] = 0;
memcpy(tempDev.Byte,(const void*)ADDR, 5);
if(tempDev.Byte[4] != CRC8(tempDev.Byte, 4))
{
tempDev.DWord[0] = (u32)parameterDefault;
isReadParameterOK = 0;
}
else
{
isReadParameterOK = 1;
}
return tempDev.DWord[0];
}
void ReadCalib2DataFromFlash(u32 frameN , u8 *data ,u16 size )
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>,У׼<D0A3><D7BC><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>------------------------------------------------------------------
void ReadMultiByteFromFlash(u16 address,u8 *wrtData, u16 dataLenth, u8 flashAdr)
{
memcpy(data,(void*)&CORRECT2_DATA[frameN*size], size);
}
/******************************************************************************/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡУ׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void ReadDataFromFlash(u32 offset , u8 *data ,u16 size )
{
memcpy(data,(void*)&CORRECT_DATA[offset], size);
// if(offsetAir)memcpy(data,(void*)&CORRECT_DATA[offset], size);
// else memcpy(data,(void*)&CORRECT2_DATA[offset], size);
(void)flashAdr; // û<>ж<EFBFBD><D0B6><EFBFBD>Flash,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> warning
u32 ADDR;
//<2F><>У׼<D0A3><D7BC><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>--------------------------------------------------------
//<2F><><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD>ݵ<EFBFBD>ַ<EFBFBD><D6B7>׼Ϊeeprom<6F>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>У׼<D0A3><D7BC><EFBFBD>ڸõ<DAB8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(address >=CALI_DATA1_ADDR)
{
ADDR =(u32)(address-CALI_DATA1_ADDR );
ADDR += CORRECT_DATA_ADDR; //ת<><D7AA>ΪFlash<73><68>ַ
memcpy(wrtData,(const void*)ADDR, dataLenth);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>----------------------------------------------------------
else if((address >=REG_MEMORY_ADDR) && (address <= REG_INT_DWORD_MEM_ADDR_END))
{
ADDR =((u32)address + USER_PARAMS_ADDR);
memcpy(wrtData,(const void*)ADDR, dataLenth); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>λ<EFBFBD>Ǵ<EFBFBD><C7B4>˵ģ<CBB5><C4A3><EFBFBD><EFBFBD>жϵ<D0B6><CFB5><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ=<3D><>δ<EFBFBD>ж<EFBFBD>
}
}