ZDBMS/code_drv/ExtE2PRom.c

562 lines
14 KiB
C
Raw Normal View History

2025-02-06 07:35:32 +00:00
/********************************************************************************
Copyright (C), Sinowealth Electronic. Ltd.
Author: Sino
Version: V0.0
Date: 2020/04/26
History:
V2.0 2020/04/26 Preliminary
********************************************************************************/
#include "Main.h"
BOOL bE2PProcessFlg; //EEPROM<4F><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
BOOL bE2PBKDsgEnd; //<2F>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
BOOL bE2PBKDsgEndValid;
BOOL bE2PBKChgStop; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
BOOL bE2PBKChgStart; //<2F><><EFBFBD>ʼ<E7BFAA><CABC>־<EFBFBD><D6BE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
BOOL bE2PBKRtc; //RTC<54><43>ʱ<EFBFBD><CAB1><EFBFBD>ݱ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
BOOL bE2PErase; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<4F><4D>־
U8 xdata bUart0E2PRdData; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>EEPROM<4F><4D>־
U8 xdata bUart1E2PRdData; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>EEPROM<4F><4D>־
U8 xdata bUart2E2PRdData; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>EEPROM<4F><4D>־
BOOL bE2PRErr;
BOOL bE2PTwiRWErrFlg;
U8 xdata bUart0RTCRdTime; //<2F><>ȡRTCʱ<43><CAB1><EFBFBD><EFBFBD>־
U8 xdata bUart1RTCRdTime; //<2F><>ȡRTCʱ<43><CAB1><EFBFBD><EFBFBD>־
U8 xdata bUart2RTCRdTime; //<2F><>ȡRTCʱ<43><CAB1><EFBFBD><EFBFBD>־
BOOL bDsgToChgFlg; //<2F>ŵ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><E7A3AC>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL bChgToDsgFlg; //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ŵ磬<C5B5><E7A3AC>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
U16 xdata uiE2PDataAddr;
U8 xdata ucE2PTwiRWErrDelayCnt;
U8 xdata ucRTCBKTime1;
U16 xdata uiRTCBKTime2;
U8 idata ucUpDataLimitTime;
U16 xdata uiCHGValidTime;
U8 xdata ucRTCBuf[7];
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEI2CCheck
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>5S<EFBFBD><EFBFBD><EFBFBD>AFE<EFBFBD><EFBFBD>I2CͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λbAfeErr=1
*************************************************************************************************/
void E2PRomTwiCheck(void)
{
if(bEnEEPRomBK)
{
if(bE2PTwiRWErrFlg)
{
if(++ucE2PTwiRWErrDelayCnt >= TIME_1S_5S)
{
bE2PRErr = 1;
ucE2PTwiRWErrDelayCnt = TIME_1S_5S;
}
}
else
{
ucE2PTwiRWErrDelayCnt = 0;
}
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: E2PRomWrite
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: Addr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Length<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>WrBuf<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>Buf
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: д<EFBFBD><EFBFBD>EEPROm
*************************************************************************************************/
BOOL E2PRomWrite(U16 WrAddr, U8 Length, U8 xdata *WrBuf)
{
BOOL Result = 0;
U8 i;
if(!bE2PRErr)
{
for(i=0; i<5; i++)
{
#ifdef TWI_Hardware_Module
if(TwiWrite(E2PROM_ID, WrAddr, TWI_ADDR_2B, Length, TWI_CRC_NO, WrBuf))
{
Result = 1;
break;
}
#else
if(TwiWrite(E2PROM_ID, WrAddr, Length, WrBuf))
{
Result = 1;
break;
}
#endif
Delay1ms(1);
}
}
bE2PTwiRWErrFlg = !Result; //<2F><><EFBFBD><EFBFBD>ͨѶ<CDA8>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
return Result;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: E2PRomRead
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: Addr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Length<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>RdBuf<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>Buf
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡEEPROm
*************************************************************************************************/
BOOL E2PRomRead(U16 RdAddr, U8 Length, U8 xdata *RdBuf)
{
BOOL Result = 0;
U8 i;
if(!bE2PRErr)
{
for(i=0; i<5; i++)
{
#ifdef TWI_Hardware_Module
if(TwiRead(E2PROM_ID, RdAddr, TWI_ADDR_2B, Length, TWI_CRC_NO, RdBuf))
{
Result = 1;
break;
}
#else
if(TwiRead(E2PROM_ID, RdAddr, Length, RdBuf))
{
Result = 1;
break;
}
#endif
Delay1ms(1);
}
}
bE2PTwiRWErrFlg = !Result; //<2F><><EFBFBD><EFBFBD>ͨѶ<CDA8>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
return Result;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: E2PRomErase
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
*************************************************************************************************/
void E2PRomErase(void)
{
U16 i;
U8 xdata WrBuf[8];
MemorySet(WrBuf, 0, 8); //clr Info.uiVCell[]
for(i=0; i<(E2PROM_SIZE/32-1); i++)
{
McuWDTClear();
E2PRomWrite(i*32+31, 1, WrBuf);
}
E2PRomWrite(E2PROM_BOOT_ADDR, 8, WrBuf);
uiE2PDataAddr = 0;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: InitE2PRom
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>EEPROM<EFBFBD>ĵ<EFBFBD>ַ
*************************************************************************************************/
BOOL E2PRomInit(void)
{
BOOL Result = 0;
U8 xdata RdBuf[8];
Result = E2PRomRead(E2PROM_BOOT_ADDR, 8, RdBuf);
RdBuf[2] = RdBuf[0]+RdBuf[1];
RdBuf[6] = RdBuf[4]+RdBuf[5];
if(RdBuf[2] == RdBuf[3])
{
uiE2PDataAddr = ((U16)RdBuf[0]<<8) + RdBuf[1];
}
else if(RdBuf[6] == RdBuf[7])
{
uiE2PDataAddr = ((U16)RdBuf[4]<<8) + RdBuf[5];
}
else
{
uiE2PDataAddr = 0;
}
return Result;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: E2PRomBKRTC
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTC
*************************************************************************************************/
void E2PRomBKRTC(void)
{
U8 xdata WrBuf[9];
U8 i, checksum = 0;
RTCReadTime(&RTC);
MemoryCopy((U8 xdata *)&(RTC.Second), WrBuf, 7);
for(i=0; i<7; i++)
{
checksum += WrBuf[i];
}
WrBuf[7] = checksum;
WrBuf[8] = 0x5A;
E2PRomWrite(E2PROM_RTC_ADDR, 9, WrBuf);
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: E2PRomBKBoot
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<EFBFBD><EFBFBD>Boot<EFBFBD><EFBFBD>
*************************************************************************************************/
void E2PRomBKBoot(void)
{
U8 xdata WrBuf[8];
WrBuf[0] = (uiE2PDataAddr>>8);
WrBuf[1] = uiE2PDataAddr;
WrBuf[3] = WrBuf[0]+WrBuf[1]; //Calculate checksum
WrBuf[4] = WrBuf[0];
WrBuf[5] = WrBuf[1];
WrBuf[7] = WrBuf[3];
E2PRomWrite(E2PROM_BOOT_ADDR, 8, WrBuf);
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: E2PRomBKData
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: BKType<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
*************************************************************************************************/
void E2PRomBKData(U8 BKType)
{
U8 xdata WrBuf[32];
if(BKType == E2PROM_BKTYPE_CHG_START) //<2F><><EFBFBD>ʼ
{
MemoryCopy((U8 xdata *)&ucRTCBuf[0], WrBuf, 3);
MemoryCopy((U8 xdata *)&ucRTCBuf[4], WrBuf + 3, 3);
}
else
{
RTCReadTime(&RTC);
MemoryCopy((U8 xdata *)&(RTC.Second), WrBuf, 3);
MemoryCopy((U8 xdata *)&(RTC.Date), WrBuf + 3, 3);
}
WrBuf[6] = (Info.uiPackStatus>>8);
WrBuf[7] = Info.uiPackStatus;
WrBuf[8] = (Info.uiBatStatus>>8);
WrBuf[9] = Info.uiBatStatus;
WrBuf[10] = (Info.ulFCC>>24);
WrBuf[11] = (Info.ulFCC>>16);
WrBuf[12] = (Info.ulFCC>>8);
WrBuf[13] = Info.ulFCC;
WrBuf[14] = (Info.ulRC>>24);
WrBuf[15] = (Info.ulRC>>16);
WrBuf[16] = (Info.ulRC>>8);
WrBuf[17] = Info.ulRC;
WrBuf[18] = (Info.ulVoltage>>24);
WrBuf[19] = (Info.ulVoltage>>16);
WrBuf[20] = (Info.ulVoltage>>8);
WrBuf[21] = Info.ulVoltage;
WrBuf[22] = (Info.slCurr>>24);
WrBuf[23] = (Info.slCurr>>16);
WrBuf[24] = (Info.slCurr>>8);
WrBuf[25] = Info.slCurr;
WrBuf[26] = (Info.uiTS[0]>>8);
WrBuf[27] = Info.uiTS[0];
WrBuf[28] = (Info.uiCycleCount>>8);
WrBuf[29] = Info.uiCycleCount;
WrBuf[30] = BKType;
WrBuf[31] = 0x5A;
E2PRomWrite(uiE2PDataAddr, 32, WrBuf);
uiE2PDataAddr += 32;
if(uiE2PDataAddr >= E2PROM_BOOT_ADDR)
{
uiE2PDataAddr = 0;
}
E2PRomBKBoot();
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Uart0RdE2PRom
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
*************************************************************************************************/
void Uart0RdE2PRom(void)
{
U16 RdAddr;
RdAddr = ((U16)ucUart0Buf[UART_CMD_NO]-CMD_RD_EEPROM)*128+((U16)ucSubClassID-0x80)*4096;
E2PRomRead(RdAddr, ucUart0Buf[UART_LENGTH], &ucUart0Buf[UART_DATA]);
ucUart0Buf[UART_DATA+ucUart0Buf[UART_LENGTH]] = CRC8cal(&ucUart0Buf,ucUart0Buf[UART_LENGTH]+UART_DATA);
Uart0SendData(); //Start Send Data; Set UART REG
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Uart1RdE2PRom
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
*************************************************************************************************/
void Uart1RdE2PRom(void)
{
U16 RdAddr;
RdAddr = ((U16)ucUart1Buf[UART_CMD_NO]-CMD_RD_EEPROM)*128+((U16)ucSubClassID-0x80)*4096;
E2PRomRead(RdAddr, ucUart1Buf[UART_LENGTH], &ucUart1Buf[UART_DATA]);
ucUart1Buf[UART_DATA+ucUart1Buf[UART_LENGTH]] = CRC8cal(&ucUart1Buf,ucUart1Buf[UART_LENGTH]+UART_DATA);
Uart1SendData(); //Start Send Data; Set UART REG
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Uart2RdE2PRom
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
*************************************************************************************************/
void Uart2RdE2PRom(void)
{
U16 RdAddr;
RdAddr = ((U16)ucUart2Buf[UART_CMD_NO]-CMD_RD_EEPROM)*128+((U16)ucSubClassID-0x80)*4096;
E2PRomRead(RdAddr, ucUart2Buf[UART_LENGTH], &ucUart2Buf[UART_DATA]);
ucUart2Buf[UART_DATA+ucUart2Buf[UART_LENGTH]] = CRC8cal(&ucUart2Buf,ucUart2Buf[UART_LENGTH]+UART_DATA);
Uart2SendData(); //Start Send Data; Set UART REG
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: UartRdRTC
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡRTCʱ<EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ա<EFBFBD><EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>UART
*************************************************************************************************/
void Uart0RdRTC(void)
{
RTCReadTime(&RTC);
MemoryCopy((U8 xdata *)&(RTC.Second), &ucUart0Buf[UART_DATA], 7);
ucUart0Buf[UART_DATA+ucUart0Buf[UART_LENGTH]] = CRC8cal(&ucUart0Buf,ucUart0Buf[UART_LENGTH]+UART_DATA);
Uart0SendData(); //Start Send Data; Set UART REG
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Uart1RdRTC
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡRTCʱ<EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ա<EFBFBD><EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>UART
*************************************************************************************************/
void Uart1RdRTC(void)
{
RTCReadTime(&RTC);
MemoryCopy((U8 xdata *)&(RTC.Second), &ucUart1Buf[UART_DATA], 7);
ucUart1Buf[UART_DATA+ucUart1Buf[UART_LENGTH]] = CRC8cal(&ucUart1Buf,ucUart1Buf[UART_LENGTH]+UART_DATA);
Uart1SendData(); //Start Send Data; Set UART REG
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Uart2RdRTC
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡRTCʱ<EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ա<EFBFBD><EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>UART
*************************************************************************************************/
void Uart2RdRTC(void)
{
RTCReadTime(&RTC);
MemoryCopy((U8 xdata *)&(RTC.Second), &ucUart2Buf[UART_DATA], 7);
ucUart2Buf[UART_DATA+ucUart2Buf[UART_LENGTH]] = CRC8cal(&ucUart2Buf,ucUart2Buf[UART_LENGTH]+UART_DATA);
Uart2SendData(); //Start Send Data; Set UART REG
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: E2PRomBKProcess
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void E2PRomBKProcess(void)
{
U8 BKType;
if(bEnEEPRomBK && bE2PProcessFlg)
{
bE2PProcessFlg = 0;
// E2PRomInit();
// RTCInitTime(&RTC);
if(bE2PErase)
{
bE2PErase = 0;
E2PRomErase();
}
if(bUart0E2PRdData||bUart1E2PRdData||bUart2E2PRdData)
{
if(bUart0E2PRdData )
{
bUart0E2PRdData = 0;
Uart0RdE2PRom();
}
if(bUart1E2PRdData)
{
bUart1E2PRdData = 0;
Uart2RdE2PRom();
}
if(bUart2E2PRdData)
{
bUart2E2PRdData = 0;
Uart2RdE2PRom();
}
}
if(bUart0RTCRdTime||bUart1RTCRdTime||bUart2RTCRdTime)
{
if(bUart0RTCRdTime)
{
bUart0RTCRdTime = 0;
Uart0RdRTC();
}
if(bUart1RTCRdTime)
{
bUart1RTCRdTime = 0;
Uart1RdRTC();
}
if(bUart2RTCRdTime)
{
bUart2RTCRdTime = 0;
Uart2RdRTC();
}
}
if(bE2PBKRtc)
{
bE2PBKRtc = 0;
E2PRomBKRTC();
}
if(bE2PBKChgStart)
{
bE2PBKChgStart = 0;
BKType = E2PROM_BKTYPE_CHG_START;
E2PRomBKData(BKType);
}
if(bE2PBKChgStop)
{
bE2PBKChgStop = 0;
BKType = E2PROM_BKTYPE_CHG_END;
E2PRomBKData(BKType);
}
if(bE2PBKDsgEnd)
{
bE2PBKDsgEnd = 0;
BKType = E2PROM_BKTYPE_DSG_END;
E2PRomBKData(BKType);
}
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: E2PRomBKCheck
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: ÿ1s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTC<EFBFBD><EFBFBD>EEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void E2PRomBKCheck(void)
{
if(bEnEEPRomBK)
{
// E2PRomInit();
// RTCInitTime(&RTC);
if(++ucRTCBKTime1 >= E2ucRTCBKDelay)
{
ucRTCBKTime1 = 0;
RTCReadTime(&RTC);
}
if(++uiRTCBKTime2 >= 3600) //1h
{
uiRTCBKTime2 = 0;
bE2PProcessFlg = 1;
bE2PBKRtc = 1;
}
if(!bCHGING)
{
bDsgToChgFlg = 1;
if(bChgToDsgFlg)
{
bChgToDsgFlg = 0;
bE2PProcessFlg = 1;
bE2PBKChgStop = 1;
}
if(bUV && bE2PBKDsgEndValid)
{
bE2PBKDsgEndValid = 0;
bE2PProcessFlg = 1;
bE2PBKDsgEnd = 1;
}
else if(!bUV)
{
bE2PBKDsgEndValid = 1;
}
}
if((bDsgToChgFlg && Info.slCurr>=E2siChgBKCur))
{
if(!uiCHGValidTime)
{
RTCReadTime(&RTC);
MemoryCopy((U8 xdata *)&RTC, ucRTCBuf, 7);
}
if(++uiCHGValidTime > ((U16)E2ucChgBKDelay*60)) //1<><31><EFBFBD><EFBFBD>
{
uiCHGValidTime = 0;
bChgToDsgFlg = 1;
bDsgToChgFlg = 0;
bE2PProcessFlg = 1;
bE2PBKChgStart = 1;
}
}
else
{
uiCHGValidTime = 0;
}
}
}