|
@@ -161,26 +161,27 @@ void EEPROM_Flash_Erase(uint32_t BeginAddress, uint32_t EndAddress)
|
|
|
}
|
|
|
|
|
|
//指定地址读取指定长度数据类型为8bit数据
|
|
|
+uint8_t Flash_ReadDataBuf[256];
|
|
|
int8_t ReadDataFromEEPROM_Flash(uint32_t FlashAddress, uint8_t* Data, uint8_t Length) // Length必须为4的倍数
|
|
|
{
|
|
|
- uint32_t DataTemp32[8], CRC_Data, CRC_Result;
|
|
|
- uint8_t CRC_Buf[256], i;
|
|
|
+ uint32_t DataTemp32, CRC_Data, CRC_Result;
|
|
|
+ uint8_t i;
|
|
|
|
|
|
Length = Length >> 2;//按照32bit读取
|
|
|
for(i=0; i<Length; i++)
|
|
|
{
|
|
|
- DataTemp32[i] = *(__IO uint32_t*)(FlashAddress + i * 4);
|
|
|
- CRC_Buf[4 * i] = (uint8_t)((DataTemp32[i] >> 24) & 0xFF);
|
|
|
- CRC_Buf[4 * i + 1] = (uint8_t)((DataTemp32[i] >> 16) & 0xFF);
|
|
|
- CRC_Buf[4 * i + 2] = (uint8_t)((DataTemp32[i] >> 8) & 0xFF);
|
|
|
- CRC_Buf[4 * i + 3] = (uint8_t)(DataTemp32[i] & 0xFF);
|
|
|
+ DataTemp32 = *(__IO uint32_t*)(FlashAddress + i * 4);
|
|
|
+ Flash_ReadDataBuf[4 * i] = (uint8_t)((DataTemp32 >> 24) & 0xFF);
|
|
|
+ Flash_ReadDataBuf[4 * i + 1] = (uint8_t)((DataTemp32 >> 16) & 0xFF);
|
|
|
+ Flash_ReadDataBuf[4 * i + 2] = (uint8_t)((DataTemp32 >> 8) & 0xFF);
|
|
|
+ Flash_ReadDataBuf[4 * i + 3] = (uint8_t)(DataTemp32 & 0xFF);
|
|
|
}
|
|
|
CRC_Data = *(__IO uint32_t*)(FlashAddress + Length * 4);
|
|
|
- CRC_Result = CRC32_Calculate(CRC_Buf, i * 4);
|
|
|
+ CRC_Result = CRC32_Calculate(Flash_ReadDataBuf, i * 4);
|
|
|
|
|
|
if((CRC_Data - CRC_Result) == 0)
|
|
|
{
|
|
|
- memcpy(Data, CRC_Buf, Length * 4);
|
|
|
+ memcpy(Data, Flash_ReadDataBuf, Length * 4);
|
|
|
return 0;
|
|
|
}
|
|
|
else
|
|
@@ -190,22 +191,23 @@ int8_t ReadDataFromEEPROM_Flash(uint32_t FlashAddress, uint8_t* Data, uint8_t Le
|
|
|
}
|
|
|
|
|
|
//指定地址写入指定长度数据类型为8bit数据,并写入crc校验码
|
|
|
+uint32_t Flash_WriteDataBuf[64];
|
|
|
void SaveDataToEEPROM_Flash(uint32_t FlashAddress, uint8_t* Data, uint8_t Length) // Length必须为4的倍数
|
|
|
{
|
|
|
- uint32_t CRC_Result, DataBuf[256];
|
|
|
+ uint32_t CRC_Result;
|
|
|
uint8_t PakageNum, i;
|
|
|
|
|
|
PakageNum = Length / 4;
|
|
|
//数据组包成32bit,最后一包存储CRC校验结果
|
|
|
for(i=0; i<PakageNum; i++)
|
|
|
{
|
|
|
- DataBuf[i] = (Data[4 * i + 0] << 24) + (Data[4 * i + 1] << 16) + (Data[4 * i + 2] << 8) + Data[4 * i + 3];
|
|
|
+ Flash_WriteDataBuf[i] = (Data[4 * i + 0] << 24) + (Data[4 * i + 1] << 16) + (Data[4 * i + 2] << 8) + Data[4 * i + 3];
|
|
|
}
|
|
|
CRC_Result = CRC32_Calculate(Data, Length);
|
|
|
- DataBuf[PakageNum] = CRC_Result;
|
|
|
+ Flash_WriteDataBuf[PakageNum] = CRC_Result;
|
|
|
|
|
|
//存储数据
|
|
|
- FLASH_Write(FlashAddress, DataBuf, PakageNum + 1);
|
|
|
+ FLASH_Write(FlashAddress, Flash_WriteDataBuf, PakageNum + 1);
|
|
|
}
|
|
|
|
|
|
void EEPROM_Flash_Check(void)
|