单片机实现对CF卡的读写

[09-12 17:52:36]   来源:http://www.88dzw.com  单片机学习   阅读:8102

文章摘要:驱动器/磁头寄存器结构如下:1LBA1DRVHS3HS2HS1HS0LBA—1为LBA方式,0为C/H/S(柱面/磁头/扇区)方式;DRV—选择驱动器0或驱动器1;HS3~HS0—LBA27~24,或为C/H/S方式的磁头号。文件创建过程也就是针对FAT和FDT的读写过程。首先在FDT中申请表项,创建文件名称、属性、起始簇号、文件大小等,然后修改FAT,分配数据空间,备份FAT。文件存储就是要先从FDT和FAT中获得文件的起始簇号和簇号链,即LBA地址。然后,将此地址送给寄存器3、4、5、6(表3中的offset3、4、5、6),向扇区数寄存器填写读写数据所占的扇区个数,再向CF卡的命令寄存器

单片机实现对CF卡的读写,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com

驱动器/磁头寄存器结构如下:

1LBA1DRVHS3HS2HS1HS0

LBA—1为LBA方式,0为C/H/S(柱面/磁头/扇区)方式;DRV—选择驱动器0或驱动器1;HS3~HS0—LBA27~24,或为C/H/S方式的磁头号。

文件创建过程也就是针对FAT和FDT的读写过程。首先在FDT中申请表项,创建文件名称、属性、起始簇号、文件大小等,然后修改FAT,分配数据空间,备份FAT。文件存储就是要先从FDT和FAT中获得文件的起始簇号和簇号链,即LBA地址。然后,将此地址送给寄存器3、4、5、6(表3中的offset3、4、5、6),向扇区数寄存器填写读写数据所占的扇区个数,再向CF卡的命令寄存器写入操作的命令字,写操作30H,读操作20H。当写入命令或写入数据后要查询状态寄存器的状态,以判定CF卡是否准备就绪或写入成功。状态寄存器结构如下:

BUSYRDYDWFDSCDRQCORR0ERR

各位的值为1时含义如下:

BUSY—CF卡记,此时不能接受其它命令;

RDY—卡可以接受命令;

DWF—写错误;

DSC—卡准备就绪;

DRQ—CF卡请求数据传送;

CORR—数据错误但被修正,不会终止多扇区读操作;

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;

上一页  [1] [2] [3] [4] [5]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行