vs2008\bsp\bspeeprom.h.c__模拟2M EE储存器供针对FATFS的接口

/****模拟2M EE储存器供针对FATFS的接口****/
/*****************************************************************************************
                            模拟EE储存器提供针对FATFS的接口
文    件:bspeeprom.h
功    能:使用windows模拟EEPROM
环    境:VS2008
编    者:张永辉 2013年1月15日
编    者:张永辉 2013年4月17日 将其构建于ROM.h.c文件之上
*****************************************************************************************/
#ifndef __SIM_EEPROM_
#define __SIM_EEPROM_
#include "\embed\source\lib\basetype.h"
/*****************************************************************************************
                                函数声明
*****************************************************************************************/
void BspEePromTest(void);
void BspEePromInit(void);
u32  BspEePromPageSizeGet(void);
u32  BspEePromSectorSizeGet(void);
u32  BspEePromSectorConutGet(void);
void BspEePromClear(u8 ch);
u32  BspEePromSectorWrites(u8* Buffer,u32 SectorNumber,u8 SectorCount);
u32  BspEePromSectorReads (u8* Buffer,u32 SectorNumber,u8 SectorCount);
//****************************************************************************************
#endif

/*****************************************************************************************
                            windows 模拟储存器
文    件:bspeeprom.c
环    境:vs2008
编    者:张永辉 2013年1月8日
修    改:修改RomInit函数,首次调用会创建并将其写全0XFF,以后会直接返回 2013年1月16日
*****************************************************************************************/
#include  "\embed\vs2008\dirvers\rom.h"
#include   "bspeeprom.h"                //#include "\embed\vs2008\bsp\bspeeprom.h"

//参数配置 可以根据具体芯片来设置
#define EEROM_PAGE_SIZE   128                   //一个页的大小。可擦除快大小
#define EEROM_SIZE        2*1024*1024           //整个存储器的大小
#define EEROM_SECTOR_SIZE 512                   //扇区的大小.(24LC256本身没有此参数)

/*****************************************************************************************
                            测试函数
*****************************************************************************************/
void BspEePromTest(void)
{
    u8 a[EEROM_SECTOR_SIZE];
    u8 b[EEROM_SECTOR_SIZE];
    u32 i;

    BspEePromInit();
    i = 0;
    for(i=0;i<EEROM_SECTOR_SIZE;i++)
    {
        a[i] = i;
    }
    BspEePromSectorWrites(a,0,1);
    BspEePromSectorReads (b,0,1);               //若同时有其他软件打开有可能失败(经验)
    //此时若b==a 则测试成功
}
/*****************************************************************************************
                            初始化
*****************************************************************************************/
void BspEePromInit(void)
{
    RomInit();
    //这2个值必须相等,即容量必须相同才行
    #if EEROM_SIZE!= ROM_SIZE
        error("EEROM_SIZE != ROM_SIZE !!!!");
    #endif
}
/*****************************************************************************************
                            获取一些规定参数
*****************************************************************************************/
//获取一个可擦除快大小
u32 BspEePromPageSizeGet(void)
{    return EEROM_PAGE_SIZE;
}
//获取扇区大小
u32 BspEePromSectorSizeGet(void)
{    return EEROM_SECTOR_SIZE;
}
//获取扇区数
u32 BspEePromSectorConutGet(void)
{    return (EEROM_SIZE/EEROM_SECTOR_SIZE);
}
/*****************************************************************************************
                            读写函数
*****************************************************************************************/
//使用给定值初始化整个储存区。
void BspEePromClear(u8 ch)
{
    u8 Buffer[EEROM_SECTOR_SIZE];
    u32 i;
    //将整个储存器写入0 文件系统才能被识别(经验)
    for(i=0;i<EEROM_SECTOR_SIZE;i++)
    {
        Buffer[i]=ch;
    }
    for(i=0;i<EEROM_SIZE/EEROM_SECTOR_SIZE;i++)
    {
        BspEePromSectorWrites(Buffer,i,1);
    }
}
//按扇区写入
u32 BspEePromSectorWrites(u8* Buffer,u32 SectorNumber,u8 SectorCount)
{
    u32 addr;
    u32 len;
    addr = EEROM_SECTOR_SIZE * SectorNumber;
    len =  EEROM_SECTOR_SIZE * SectorCount;
    RomWrite(addr,Buffer,len);
    return 0;
}
//按扇区读出
u32 BspEePromSectorReads(u8* Buffer,u32 SectorNumber,u8 SectorCount)
{
    u32 addr;
    u32 len;
    addr = EEROM_SECTOR_SIZE * SectorNumber;
    len =  EEROM_SECTOR_SIZE * SectorCount;
    RomRead(addr,Buffer,len);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值