单片机实现对CF卡的读写
ERR—在上一命令以某种错误结束,可以在错误寄存器中查看错误类型。
下面以向CF卡写一个扇区数据为例,给出图4所示流程和C程序代码。
bit flag_1,flag_2;
void cfwr()
{
unsigned char status;
cfwr_comm(0xe0,0x00,0x00,0x6c);
//写参数命令,指向逻辑6c扇区
do{status=PBYTE[0x07]; //读状态寄存器
if((status & 0x01)==0x01)
flag_1=1; //若ERR=1,置出错标志,做相应处理
while(status!=0x58);
cfwr_dat(); //写入数据
do{status=PBYTE[0x07]; //读状态寄存器
if((status & 0x20)==0x20)
flag_2=1; //若DWF=1时,置出错标志,做相应处理
while(status!=0x50);
}
void cfwr_comm(unsigned char lba27,lba23,la15,lba7) //写参数命令函数
{PBYTE[0x02] 扇区数为1
PBYTE[0x03]=lba7;
PBYTE[0x04]=la15;
PBYTE[0x05]=lba23;
PBYTE[0x06]=lba27; //设定LBA方式
PBYTE[0x07]=0x30; //送写入命令30H
}
void cfwr_dat() //写数据函数
{unsigned int i,temp;
unsigned char xdata dat[512]; //dat[]存放一个扇区的数据
for (i=0;i<512;i++) //连续写512字节
{P1=P1 & 0xf8; //选中外部RAM
temp=dat[i];
P1++; //根据实际电路选择中CF卡
PBYTE[0x00]=temp;}
}
5 结论
《单片机实现对CF卡的读写(第4页)》