• 大小: 8.12KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2024-04-21
  • 语言: C/C++
  • 标签: flash  STM32  STM3  ROM  eerom  

资源简介

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

评论

共有 条评论