You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
5.1 KiB
207 lines
5.1 KiB
6 months ago
|
#include "eeprom.h"
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
typedef union _eeprom_info
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
uint8_t isSave;
|
||
|
uint8_t Mode;
|
||
|
uint8_t Reserved[SECTOR_SIZE_BYTE - 3];
|
||
|
uint8_t CheckSum;
|
||
|
}eeprom_data;
|
||
|
uint8_t eeprom_buffer[SECTOR_SIZE_BYTE];
|
||
|
}EEPROM_INFO;
|
||
|
|
||
|
|
||
|
static EEPROM_INFO eeprom_info;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/*-------------------------------------------------------------------------*//**
|
||
|
* @brief FlashMem_Do_PageWt
|
||
|
* @param[in] tPageAddr
|
||
|
* @param[in] tBuf
|
||
|
* @return None
|
||
|
*//*-------------------------------------------------------------------------*/
|
||
|
void FlashMem_Do_PageWt( uint32_t tPageAddr, uint32_t* tBuf )
|
||
|
{
|
||
|
uint32_t UserID_Buf;
|
||
|
|
||
|
UserID_Buf = 0x4F17DC86;
|
||
|
HAL_FMC_PageWrite( UserID_Buf, tPageAddr, tBuf );
|
||
|
}
|
||
|
|
||
|
/*-------------------------------------------------------------------------*//**
|
||
|
* @brief FlashMem_Do_PageEr
|
||
|
* @param[in] tPageAddr
|
||
|
* @return None
|
||
|
*//*-------------------------------------------------------------------------*/
|
||
|
void FlashMem_Do_PageEr( uint32_t tPageAddr )
|
||
|
{
|
||
|
uint32_t UserID_Buf;
|
||
|
|
||
|
UserID_Buf = 0xA901358F;
|
||
|
HAL_FMC_PageErase( UserID_Buf, tPageAddr );
|
||
|
}
|
||
|
|
||
|
void FlashMEM_Clock_Initialization(void)
|
||
|
{
|
||
|
// enable peripheral clock
|
||
|
HAL_SCU_Peripheral_EnableClock2( PPCLKEN2_FMCLKE, PPxCLKE_Enable );
|
||
|
// init crc
|
||
|
HAL_CRC_Init();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
bool EEPROM_Read_Mode(uint8_t* pMode)
|
||
|
{
|
||
|
uint8_t i;
|
||
|
uint16_t checksum_init = 0x5AA5;
|
||
|
uint16_t checksum_result;
|
||
|
|
||
|
__disable_irq();
|
||
|
memcpy(&eeprom_info.eeprom_buffer[0], (uint32_t *)CONFIG_ADDRESS, SECTOR_SIZE_BYTE);
|
||
|
__enable_irq();
|
||
|
|
||
|
if(eeprom_info.eeprom_data.isSave != true)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// CRC Block Calculation
|
||
|
CRC->INIT = checksum_init;
|
||
|
CRC->CR = 0
|
||
|
| MODS_UserMode // Set User Mode
|
||
|
| CRC_RLTCLR // Initialize CRC_RLT Register With CRC_INIT
|
||
|
| CRC_16 // Polynomial Selection bit : CRC-16
|
||
|
| CRC_NOINC // Address Not Auto Increment
|
||
|
;
|
||
|
|
||
|
CRCRun();
|
||
|
for(i = 0 ; i < (SECTOR_SIZE_BYTE-1) ; i++)
|
||
|
{
|
||
|
CRC->IN = eeprom_info.eeprom_buffer[i];
|
||
|
}
|
||
|
CRCStop();
|
||
|
checksum_result = CRC->RLT;
|
||
|
|
||
|
if((checksum_result & 0xFF) == eeprom_info.eeprom_data.CheckSum)
|
||
|
{
|
||
|
*pMode = eeprom_info.eeprom_data.Mode;
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
bool EEPROM_Write_Mode(uint8_t Mode)
|
||
|
{
|
||
|
uint8_t i;
|
||
|
uint16_t checksum_init = 0x5AA5;
|
||
|
uint16_t checksum_result;
|
||
|
|
||
|
if(eeprom_info.eeprom_data.isSave == true)
|
||
|
{
|
||
|
if(eeprom_info.eeprom_data.Mode == Mode)
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
memset(&eeprom_info.eeprom_buffer[0], 0, SECTOR_SIZE_BYTE);
|
||
|
eeprom_info.eeprom_data.isSave = true;
|
||
|
eeprom_info.eeprom_data.Mode = Mode;
|
||
|
|
||
|
// CRC Block Calculation
|
||
|
CRC->INIT = checksum_init;
|
||
|
CRC->CR = 0
|
||
|
| MODS_UserMode // Set User Mode
|
||
|
| CRC_RLTCLR // Initialize CRC_RLT Register With CRC_INIT
|
||
|
| CRC_16 // Polynomial Selection bit : CRC-16
|
||
|
| CRC_NOINC // Address Not Auto Increment
|
||
|
;
|
||
|
|
||
|
CRCRun();
|
||
|
for(i = 0 ; i < (SECTOR_SIZE_BYTE-1) ; i++)
|
||
|
{
|
||
|
CRC->IN = eeprom_info.eeprom_buffer[i];
|
||
|
}
|
||
|
CRCStop();
|
||
|
checksum_result = CRC->RLT;
|
||
|
|
||
|
|
||
|
|
||
|
eeprom_info.eeprom_data.CheckSum = checksum_result & 0xFF;
|
||
|
|
||
|
|
||
|
__disable_irq();
|
||
|
FlashMem_Do_PageEr(CONFIG_ADDRESS);
|
||
|
FlashMem_Do_PageWt(CONFIG_ADDRESS, (uint32_t *)&eeprom_info.eeprom_buffer[0]);
|
||
|
__enable_irq();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#if 0
|
||
|
|
||
|
|
||
|
void EEPROM_Read_Setting_Data(void)
|
||
|
{
|
||
|
#if 0
|
||
|
__disable_irq();
|
||
|
memcpy(&Save_control_Info, (uint32_t *)CONFIG_ADDRESS, SECTOR_SIZE_BYTE);
|
||
|
__enable_irq();
|
||
|
|
||
|
if(Save_control_Info.SaveFlag != EEPROM_SAVE_CHECK_FLAG_DATA)
|
||
|
{
|
||
|
Save_control_Info.SaveFlag = EEPROM_SAVE_CHECK_FLAG_DATA; // 1
|
||
|
Save_control_Info.SaveActionMode = ACTION_MODE_ACTION_AUTO_1; // 2
|
||
|
Save_control_Info.isPowerOnReservation = FALSE; // 3
|
||
|
Save_control_Info.isPowerOnSaturDay = FALSE; // 4
|
||
|
Save_control_Info.PowerOn_Hour = 0; // 5
|
||
|
Save_control_Info.PowerOn_Min = 0; // 6
|
||
|
|
||
|
Save_control_Info.isPowerOffReservation = FALSE; // 7
|
||
|
Save_control_Info.PowerOff_Hour = 0; // 8
|
||
|
Save_control_Info.PowerOff_Min = 0; // 9
|
||
|
Save_control_Info.FanActionTime_1 = 0; // 10
|
||
|
Save_control_Info.FanActionTime_2 = 0; // 11
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
}
|
||
|
|
||
|
void EEPROM_Write_Seting_Data(void)
|
||
|
{
|
||
|
#if 0
|
||
|
if(Control_Info.isEepromSave == TRUE)
|
||
|
{
|
||
|
Control_Info.isEepromSave = FALSE;
|
||
|
__disable_irq();
|
||
|
FlashMem_Do_PageEr(CONFIG_ADDRESS);
|
||
|
FlashMem_Do_PageWt(CONFIG_ADDRESS, (uint32_t *)&Save_control_Info);
|
||
|
__enable_irq();
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|