/*****************************************************************************************
模拟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;
}