基于虚拟扇区的Flash存储管理技术
要对某个VSS ID进行读写操作,必须先找到其物理地址。
定位某个VSS ID物理地址的过程如下。
① 查找这个VSS ID所在的块号(BI)以及在这个块中所处的分割号(SI)。
从第一个block开始,搜索这个块的SAT表。首先搜索属性,只有属性为有效的才比较VSS ID号。如果条件满足,记录所在的块号BI及SAT的位置,即扇区分割号SI;否则,block号增加,继续按照上面步骤查找。
bFound=0;
for(int i=0;i<MAX_block;i++)
{//读取对应block的SAT表
psat=ReadSat(i)
for(j=0;j<MAX_SI_1B;j++)
{//分析每个SAT单元
sat=*psat++;
if(IsValid(sat))//比较属性是否有效
{//比较逻辑号是否相等,相等设置标志退出
if(Equal(sat,VSSID)){bFound=1;break;}
}
}
if(bFound){bi=i;si=j;break;}//找到后记录块号和分割号退出
}
②找到VSS ID所在的块号及分割号(SI)后,这个VSS ID的物理地址为:
ADDR=整个Flash的偏地址+
BLOCKID*BLOCKSIZE+SATSIZE+SI*SECTERSIZE。
5 应用
应用于名片记录管理系统:由于名片记录很大,而且记录很多,存在常常修改的情况,因此可以使用Flash作存储介质。
名片记录结构为:
struct CARD
{
char name[10]; //姓名:10字节
char position[15]; //出职务:15字节
char companyname[40]; //公司名称:15字节
char mobilephone[11]; //手机号码:11字节
char homephone[15]; //家庭电话:15字节
char officephone[15]; //办公电话:15字节
char Email[30]; //邮件地址:30字节
char homepage[30]; //公司主页:30字节
char remark[40]; //备注:40字节
}card_record;
每个名片记录大小为:181字节。
《基于虚拟扇区的Flash存储管理技术(第3页)》