CF卡在手机测试系统中的应用
2.2 软件实现
2.2.1 CF卡的读写操作
CF卡采取的是类似硬盘的分块存储方式,分为柱面Cylinder、头Head和扇区Sector管理。对96MB的CF卡而言,共有733个柱面,每个柱面8个头,每个头32个扇区,每个扇区512字节(8位)。CF卡的读写是以一个扇区为基本单位的,在读写一个扇区之前先送出当前需要读写的柱面、头和扇区,然后发送读写命令,一个扇区的512字节需要一次性连续写入或者读出。下面给出对CF卡进行读和写C51程序段:
#define DataPort XBYTE[0xB800]
#define Feature XBYTE[0xB801]
#define SecCount XBYTE[0xB802]
#define SecNo XBYTE[0xB803]
#define CylLow XBYTE[0xB804]
#define CylHigh XBYTE[0xB805]
#define CardHead XBYTE[0xB806]
#define Command XBYTE[0xB807] //定义CF卡端口
void NextSector(){ //读写下一个扇区
sector++;
if(sector= =32){//一个头的扇区是否全部读写完毕
sector=0;
head++;
if(head= =16){//一个柱面的所有头是否全部读写完毕
head=0;
cylinder++;
if(cylinder= =733){//所有柱面是否全部读写完毕
cylinder--;
DiskFull=1;{//标志位置1,表示CF卡容易已满读写过程结束
}
}
}
}
CardHead=0xA0+head; //置当前头
SecCount=0x01; /*一次读写一个扇区
SecNo=sector; //置当前扇区
CylLow=cylinder%255; //置柱面高位
CylHigh=cylinder/255; //置柱面低位
《CF卡在手机测试系统中的应用(第2页)》