資源簡介
STM32 內部FLASH 有一定的使用壽命大概是一萬,如果我們用自身的FLASH來保存一些數據(機器參數)等,可以節省開發成本,但是FLASH的使用是有限的,我們可以通過軟件方式延長它的使用壽命,該組件就是實現延長FLASH壽命,同時模塊化獨立,模擬EEROM的形式,模擬了一個256byte EEROM,可使用次數為30萬次。參考文件系統。 文檔詳細介紹該實驗方式以及函數接口的使用
代碼片段和文件信息
//=========================================================================
//=?文件名稱:?stencil.c
//=?文件說明:?此文件包含所有模版功能相關函數
//=?作????者:?鄧星穎
//=?公????司:?Hazens?Automotive?Electronics(SZ)Co.Ltd.
//=?創建日期:?2017-09-19
//=?修改歷史:?
//=?版????本:?V1.0
//=========================================================================
/**************************************************************************
?*?Compiler?option?used?to?distinguish?inclusion?done?by?the?owner
?**************************************************************************/
#define???_EEROM_LIB_C_
/**************************************************************************
?*?Inclusions?of?modules?headers
?**************************************************************************/
#include?“EEromConfig.h“
#include?“EEromLib.h“
#include?“string.h“
#include?“stdio.h“
/*讀取設備ID信息*/
/*
???硬件版本信息
*/
#pragma?pack(1)
typedef?struct?
{
??u8??EE_Buff[PART_SIZE];??/*用來存放數據*/
??u16?CheckSum;
}_EEData_;
typedef?struct
{
???u8?ValidFlag;
???u8?CheckSum;
}_ValidBytes_;
typedef?struct
{
??_ValidBytes_?ValidBytes[PART_NUM-1];
}_EEValid_;
//12?*?
typedef?struct
{
???u8???ModuleValid;
???u8???CheckSum;?/*用來校驗該模塊正確否*/
???u8???DataLen;??/*申請的字節數據不能超過255?否則會溢出*/?
???char?name[NAME_LEN];
???u16??DataAddr;??/*總共占14個字節*/
}_ModuleInfor_;
/*CheckSum?=?ModuleValid?+?CheckSum?+DataLen?+?name?+?DataAddr*/
typedef?struct
{
??_ModuleInfor_?ReqModule[REQ_NUM];
}_Table_;
typedef?struct
{
??u8??UpdataFlag;
??u8??FlashSts;
??u8??ReadPart;
??u8??WritePart;????????
??u8??ModuleNum;????????/*已申請模塊數量*/
??u16?UseBytes;?????????/*實際占領的字節數*/
??u32?TableStartAddr;
??u32?ValidStartAddr;
??u32?DataStartAddr;??
??u32?DataWriteAddr;
??u32?DataReadAddr;
}_EEInfor_;
_Table_???EETable;
_EEValid_?EEValid;
_EEData_??EEData;
//目前表頭是占122個字節
#pragma?pack()
void?PrintfEEData(void);
static?u16?FlashSize;?/*Flash容量大小*/
static?u16?PageSize;??/*頁大小*/
//static?u8??FlashType;
static?_EEInfor_????EEInfor;
static?_EEDev_??????EEDev;
?
static?void?PrintfFlashEEData(u32?Addr);
static?u8?GetReqModuleCheckSum(_ModuleInfor_?*pModuleInfor);
static?u8?GetEEDataCheckSum(void);
static?void?GetProductInfor(void)
{??
???vu32?*pIDcode;
???u16??RevID?;
???u16??DevID;
???FlashSize?=?*((vu16*)0x1ffff7E0);
???if(FlashSize?<=?0x80)
???{
?????PageSize?=?1024;?//頁大小1K
???}
???else
???{
?????PageSize?=?2048;?//頁大小為2K
???}
???pIDcode?=?((vu32*)0xE0042000);
???RevID???=?(u16)(((*pIDcode)?&?(0xFFFF?<<16))>>16);
???DevID???=?(u16)((*pIDcode)?&?(0x7FF));
???EEROM_DBG(“\r\n*****************************\r\n“);
???EEROM_DBG(“Product?Information:\r\n“);
???switch(DevID)
???{
??????case?0x412:??/*小容量產品*/?
????????EEROM_DBG(“Stm32F10xxx_Low_density_devices\r\n“);?
????????break;
??????case?0x410:?/*中容量產品*/
????????EEROM_DBG(“Stm32F10xxx_Medium_density_devices\r\n“);
????????break;
??????case?0x414:?/*大容量產品*/
????????EEROM_DBG(“Stm32F10xxx_High
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-12-04?15:56??EEromLib\
?????文件????????5343??2017-12-04?15:56??EEromLib\EEromConfig.h
?????文件???????21755??2017-12-04?15:24??EEromLib\EEromLib.c
?????文件????????4147??2017-12-01?16:25??EEromLib\EEromLib.h
?????文件????????1086??2017-12-04?15:59??EEromLib\使用例子.txt
評論
共有 條評論