单片机实现对CF卡的读写
单片机实现对CF卡的读写摘要:CF卡是一种包含了控制和大容量Flash存储器的标准器件,具有容量大、体积小、高性能、携带方便等优点,已广泛应用在数据采集系统和许多消息类电子产品中。
本文详细介绍CF卡在单片机系统中的硬件接口电路,以及单片机对CF卡进行标准文件读写的实现,且写入的文件能被Windows操作系统读写。
关键词:CF卡单片机FAT文件格式引言由于CF卡(Compact Flash Card)具有容量大、体积小、高性能、携带方便等优点,而且读写速度快,可与多种电脑操作系统平台兼容,因此在数据采集系统中的数据记录或与PC机之间的数据转存多采用CF卡。
为了在PC机中能方便地进行数据处理,在下位机端必须采用一种标准的格式组织数据,即将数据按照Windows标准文件格式写入,在PC机端通过读卡器将写入CF的内容以标准文件形式读出。
Wind ows标准文件格式有FAT、FAT32和NTFS。
考虑到广泛使用的Windows 98系统的CF卡的容量等因素,通常采用FAT(File Allocation Table)文件系统。
单片机系统对CF卡的读写,就是从底层对它进行直接操作,包括寻址、创建文件和读写等。
1 CF卡简介CF卡内集成了控制器、Flash Memory阵列和读写缓冲区,如图1所示。
内置的智能控制器,使外围电路设计大大简化,而且完全符合PC机内存卡的国际联合会PCMCIA(Personal Computer Memory Card International Association)和ATA(Advanced Technology Attachment)接口规范。
实际上,控制器起到了一种协议转换的作用,即将对Flash Memory的读写转化成了对控制器的访问,这样不同的CF卡都可以用单一的机构来读写,而不用担心兼容性问题。
CF卡的缓冲区结构,使得外部设备与CF 卡通信的同时,CF卡的片内控制器可以对Flash进行读写。
这种设计可以增加CF卡数据读写的可靠性,同时提高数据传输速率。
CF卡支持多种接口访问模式,有符合PCMCIA规范的Memory Mapped模式、I/O Card模式和符合ATA规范的True IDE模式。
上电时,OE(9脚)为低电平,CF卡进入True IDE模式,此时引脚OE也叫ATA SEL;上电时,OE(9脚)为高电平,CF卡进入PCMCIA模式,即Memory Mapped模式或I/O Card模式,此时可通过修改配置选项寄存器进入相应的模式。
配置选项寄存器格式如下:SRESET—软复位信号;Level REQ—中断模式选择(电平或边沿触发)。
例如,要加入Memory mapped模式,只需要在上电时保证OE为高电平,因为配置选项寄存器的co nf5~conf0位的初始化值为“00000”;而要进入I/O Card模式,除了上电时保证OE为高电平外,还要进一步设置conf5~conf0,如表1所列。
但是对于具体型号的CF卡而言,下面三种情况也是被CFA(CF ca rd Association)所允许的:①上电时进入True IDE模式,工作过程中,只要监测到OE变为高,就退出T rue IDE模式;②允许卡在复位时重新配置;③上电时进入PCMCIA模式,允许过程中,只要监测到OE 变为低,就进入True IDE模式。
表1 模式选择2 CF卡与51单片机的接口CF卡在PC Memory方式与51芯片的接口电路如图2所示。
由于采用CF卡上电后自动进入的Mem ory模式,而且不存在对特性寄存器的读写,故可将REG接高电平。
片选信号CE1和CE2组合可选择数据位宽度,如表2所列。
图2中CE2接VCC,选用的是8位(D7~D0)数据宽度。
表2 数据宽度选择为了实现即插即用的功能,CE卡上提供了两个用来检测卡是否存在的引脚(CD1、CD2),由卡内部接地。
当主机检测到与其相连的CD1和CD2两个引脚同时为低电平时,可判断出卡与主机相连;否则,卡未与主机相连。
由于I/O口紧张,RDY/BSY引脚悬空不用,通过查询状态寄存器能判断CF卡是否准备就绪。
在实际应用中,由于一次至少要读写一个扇区512字节,所以要扩充一块RAM。
我们选用的是62256,容量为3 2KB,这样便可以支持大到2GB的CF卡(参见下文),增加了其扩展性。
3 FAT文件系统FAT文件系统是基于DOS的文件系统。
常说的FAT有12位的FAT12和16位的FAT16,另外就是32位的FAT32。
考虑到CF卡的容量有限,宜选用FAT16。
这里只对FAT文件系统作一简单介绍,更详细的内容请见参考文献。
磁盘的寻址方式有两种:物理寻址C/H/S(柱面/磁头/扇区)方式和逻辑块LBA(Logical Block Add ressing)寻址方式。
二者之间的转换关系为:LBA地址=(柱面号×磁头数+磁头号)×扇区数+扇区数-1采用LBA寻址方式,没有磁头和磁道的转换操作,在访问连续的扇区时,操作速度比物理寻址方式要快,而且也简化了对磁盘的访问。
硬盘的结构布局分为MBR(主引导扇区)和最多4个逻辑分区(含DOS分区或非DOS分区),而在DOS逻辑分区中的磁盘组织如下:引导扇区DBR(DOS Boot Record):位于LBA 0扇区,包含跳转指令、厂商标识和DOS版本号、B PB(BIOS Parameter Block,BIOS参数块)、DOS引导程序、结束标志字AA55。
其中BPB包含每扇区字节数、每簇扇区数、每个FAT扇区数、扇区总线、根目录项数等等参数。
FAT是给每个文件分配磁盘物理空间的表格。
FAT16簇数的上限是2 16,即65536个,每簇扇区数的上限是64个,因此其分区空间的上限为2G。
FAT1位于逻辑1扇区。
FAT簇映射中,0000表示空簇,FFF0~FFF6备用,FFF8~FFFF表示簇链结束,FFF7表示坏簇,其余值表示其后续簇的簇号。
图3所示的文件起始簇号为2,结束簇号为4,共占用2、3、4三个簇。
簇是存储文件的最小单位,可以包含多个扇区。
当文件本身或文件的最后一簇哪怕只有1个字节,也要占去1簇。
这样,当这种文件很多时,空间的浪费是很可观的。
文件目录表FDT(File Directory Table)是操作系统寻找文件的入口,其内容是每一个文件的目录。
FDT中的每一个目录项由32个字节组成。
前8个字节是文件名,不足时用空格填满。
紧跟着的3个字节是文件扩展名,接下来是10个字节的系统保留字。
然后是文件产生的时刻和日期占8个字节,再后的2个字节是文件首簇号,最后4个字节是文件大小。
FDT的起始扇区可由FAT的大小计算出,而FAT的大小可在DBR中读出。
4 软件实现按照FAT16方式存储文件,是一个通用的解决方案。
因为这样可以得到现有的DOS和Windows系统的支持,但是代价是浪费一部分空间,也就是说存储效率下降了。
为了改善这一情况,采用了改进的存储方法。
就是先创建一个空文件,并根据需要为其分配一个大的存储空间,写入动作只是从尾部追加数据。
这样就避免了很多小文件的产生,既可以充分利用存储空间,又可以使地址连续。
CF卡的读写是通过卡内的缓冲区进行的,不支持直接读写存储区域。
缓冲区为一个FIFO结构,读写顺序进行,不支持随机存取,系统只能一次性地按顺序读完或写完所有一个或多个扇区。
设计时使用LBA方式访问CF卡比较方便,读写时只需要先在相应的寄存器写入LBA地址即可。
要设定LBA方式,需访问驱动器/磁头寄存器。
内存模式下部分寄存器译码如表3所列。
表3 内存模式下部分寄存器译码驱动器/磁头寄存器结构如下: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卡是否准备就绪或写入成功。
状态寄存器结构如下:各位的值为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] 扇区数为1PBYTE[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; //选中外部RAMtemp=dat[i];P1++; //根据实际电路选择中CF卡PBYTE[0x00]=temp;}}5 结论笔者在湿度检测仪中,根据本文所介绍的方法,用CF卡向计算机转存数据,可以非常方便地对数据进行维护。
CF卡在单片机系统中的应用
CF卡在单片机系统中的应用CF卡的全称是Compact Flash,由当时最大的Flash Memory卡厂商之一美国SanDisk 公司于1994年推出的。
可以通过一个适配器,将CF格式转界到PCMCIA卡的格式,并在笔记本电脑上使用。
早期佳能数码照相机和PDA上使用。
由于应用较早加上容量上的优势,目前很多款数码相机上都是使用这种闪存卡来作为存储介质,而且兼容性较好,市面上也有很多读卡设备支持,但是它过大的体积和重量则将限制它的发展。
CF有两种最大写入速度,分别是1.5MB/秒和6MB/秒,读出速度均为6MB/秒。
兼容PCMCIA卡,有CF卡协会。
无后继派生产品。
在DOS,Windows3.x,Windows95,Windows98,Windows CE,Apple System7,甚至大多数的UNIX等操作系统中,都支持CF卡的读写。
上面是对CF卡的介绍,在这里将对采用单片机对CF进行读写的方法进行讲解。
采用单片机对CF卡进行读写通常采用True IDE模式。
至于其它模式(PC卡存储器模式与PC 卡I/O模式)下的用法可以查阅相关文档。
1、CF卡的外形与规格CF卡大小为43mm x36mm x3.3mm,重量大约在15克以内,由于推出时间早,所以发展上较为成熟,采用ATA协议的CompactFlash的接口为50针,发展到今天,它的最高容量已经由当初的8M、16M一路跃升到今天最高达8GB之多,目前我们在市场面上能见到的最大容量都在8GB。
2、CF卡的接口定义信号详述:A2A0:A[2:0]用来选择八个功能寄存器中的某个寄存器,其余的地址线应该接于地。
PDIAG:用以握手。
(一般不用)DASP:用以握手。
(一般不用)CD1,CD2:用来检测卡是否插入卡槽(此脚在CF卡中接到地)。
CS0,CS1:CS0为片选,CS1用来选择状态寄存器与设备控制寄存器。
基于单片机与CF卡的接口设计与实现
基于单片机与CF卡的接口设计与实现1 引言电子存储设备的不断涌现,使许多便携设备大容量数据的实时处理和存储成为可能,CF 卡( Compact FLASH card)因具有容量大、体积小、性能优良、携带方便等优点,已广泛应用在数据采集系统和许多消费类电子产品中。
然而目前所开发的产品成本高,电路复杂,所需元器件数目多,严重制约了CF 卡在更广阔领域内的应用。
本文给出了一种简洁实用的硬件接口电路.成功实现了单片机对CF 卡标准文件的读写。
2 接口电路设计接口电路如图1 所示,采用与80C51 兼容的SST89C54 型单片机。
SST89C54 程序存储器分为block0 和block1 两块,前者为16 KB,后者为4 KB,block0 和block1 的地址不是连续的。
Block1 从F000H 开始。
上电后程序既可以从blockO(0000H)开始执行,也可以从block1(F000H)开始执行。
单片机的Re-Map[1:0]位决定程序从哪块程序存储器开始执行。
当这2 位都为1 时,程序从0000H 开始执行,否则,从F000H 开始执行。
Re-Map[1:0]位是非易失性的,可以用编程器对其编程设置。
CF 卡的读写是通过卡内的缓冲区进行的.不支持直接读写存储区域。
由于一次至少要读写一个扇区(512 字节),所以目前多数做法都必须要借助于6116、6264 等外部存储器,这样做不仅增加了成本,而且给软件设计带来了很多不便。
在本系统设计中,利用SST89C54 单片机的第二个内部程序存储器block1(4 Kbyte×8 bit)作为读写缓冲区,这样就可以巧妙地解决上述问题,同时也避免了通过单片机读写CF 卡必须依赖外部存储器和地址存储器的弊端[1-3]。
SST89C54与CF卡的接口设计与实现
Ke r s sn l h p mir c mp tr Co a t ls a d S T 9 5 y wo d : i g e c i c o o u e ; mp cF a h c r ; S 8 C 4; T e I d u r DE mo e
1 引 言
电子存 储 设 备 的不 断 涌现 , 许 多 便携 设 备 大 使
理 。
合 FG P A设计 一种 数控 延 时器 的方法 ,讨 论 了延 时
范围, 分析 了延 时误 差 , 该延 时器 的设计 旨在和 D P S
卡标 准文 件 的读写 。 关 键 字: 单片机 ; C F卡 ; S T 9 5 :T eI E模 式 S8C4 u r D 文 献标 识码 : A 文章编 号 :0 6 6 7 (0 6 0 — 0 0 0 1 0 — 9 7 2 0 )9 0 3 — 3 中 图分类 号: P 9 T 2
De i n a d i p e e t t n o t r a e b t e a d a d S T8 C5 sg n m lm n a i fi e f c e we n CF c r n S 9 4 o n
Z N h— i,Q A ig x HA G Z ibn I O Y n - u
c l ov st e pr b e t a u ts l e h o l m h tmus e e d o h x e n lme r a d a d e s d v c . e r a ng/ i— td p n n t e e tr a moy n d r s e ieTh e di wrt i ft e sa d r r l y tm fCF c r n Tr e I ng o h t n a da d f e s se o a d i u DE d si e ntd. i mo e i mplme e
单片机实现对CF卡的读写
单片机实现对CF卡的读写摘要:CF卡是一种包含了控制和大容量Flash存储器的标准器件,具有容量大、体积小、高性能、携带方便等优点,已广泛应用在数据采集系统和许多消息类电子产品中。
本文详细介绍CF卡在单片机系统中的硬件接口电路,以及单片机对CF卡进行标准文件读写的实现,且写入的文件能被Windows操作系统读写。
关键词:CF卡单片机FAT文件格式引言由于CF卡(Compact Flash Card)具有容量大、体积小、高性能、携带方便等优点,而且读写速度快,可与多种电脑操作系统平台兼容,因此在数据采集系统中的数据记录或与PC机之间的数据转存多采用CF卡。
为了在PC机中能方便地进行数据处理,在下位机端必须采用一种标准的格式组织数据,即将数据按照Windows标准文件格式写入,在PC机端通过读卡器将写入CF的内容以标准文件形式读出。
Wind ows标准文件格式有FAT、FAT32和NTFS。
考虑到广泛使用的Windows 98系统的CF卡的容量等因素,通常采用FAT(File Allocation Table)文件系统。
单片机系统对CF卡的读写,就是从底层对它进行直接操作,包括寻址、创建文件和读写等。
1 CF卡简介CF卡内集成了控制器、Flash Memory阵列和读写缓冲区,如图1所示。
内置的智能控制器,使外围电路设计大大简化,而且完全符合PC机内存卡的国际联合会PCMCIA(Personal Computer Memory Card International Association)和ATA(Advanced Technology Attachment)接口规范。
实际上,控制器起到了一种协议转换的作用,即将对Flash Memory的读写转化成了对控制器的访问,这样不同的CF卡都可以用单一的机构来读写,而不用担心兼容性问题。
CF卡的缓冲区结构,使得外部设备与CF 卡通信的同时,CF卡的片内控制器可以对Flash进行读写。
单片机实现对CF卡的读写
单片机实现对CF卡的读写(1)作者:如文来源:中华励志网更新:2011-6-7 【字体:小大】论文摘要:CF卡是一种包含了控制和大容量Flash存储器的标准器件,具有容量大、体积小、高性能、携带方便等优点,已广泛应用在数据采集系统和许多消息类电子产品中。
本文详细介绍CF卡在单片机系统中的硬件接口电路,以及单片机对CF卡进行标准文件读写的实现,且写入的文件能被Windows操作系统读写。
论文关键词:CF卡单片机 FAT文件格式引言由于CF卡(Compact Flash Card)具有容量大、体积小、高性能、携带方便等优点,而且读写速度快,可与多种电脑操作系统平台兼容,因此在数据采集系统中的数据记录或与PC 机之间的数据转存多采用CF卡。
为了在PC机中能方便地进行数据处理,在下位机端必须采用一种标准的格式组织数据,即将数据按照Windows标准文件格式写入,在PC机端通过读卡器将写入CF的内容以标准文件形式读出。
Windows标准文件格式有FAT、FAT32和NTF S。
考虑到广泛使用的Windows 98系统的CF卡的容量等因素,通常采用FAT(File Alloc ation Table)文件系统。
单片机系统对CF卡的读写,就是从底层对它进行直接操作,包括寻址、创建文件和读写等。
1 CF卡简介CF卡内集成了控制器、Flash Memory阵列和读写缓冲区,如图1所示。
内置的智能控制器,使外围电路设计大大简化,而且完全符合PC机内存卡的国际联合会PCMCIA(Personal Computer Memory Card International Association)和ATA(Advanced Technology Attachment)接口规范。
实际上,控制器起到了一种协议转换的作用,即将对Flash Memo ry的读写转化成了对控制器的访问,这样不同的CF卡都可以用单一的机构来读写,而不用担心兼容性问题。
单片机对SD卡读写系列(三)
单片机对SD卡读写系列(三)
对SD 卡的驱动主要有初始化、读、写、擦除等。
1、初始化步骤:
(1)延时至少74clock
(2)发送CMD0,需要返回0x01,进入Idle 状态
(3)循环发送CMD55+ACMD41,直到返回0x00,进入Ready 状态。
如果是MMC,此步应发送CMD1。
2、读步骤:
(1)发送CMD17(单块)或CMD18(多块)读命令,返回0x00
(2)接收数据开始令牌0xfe(或0xfc)+正式数据512Bytes + CRC 校验2Bytes
默认正式传输的数据长度是512Bytes,可用CMD16 设置。
3、写步骤:
(1)发送CMD24(单块)或CMD25(多块)写命令,返回0x00
(2)发送数据开始令牌0xfe(或0xfc)+正式数据512Bytes + CRC 校验2Bytes
4、擦除步骤:
(1)发送CMD32,跟一个参数来指定首个要擦出的扇区号(SD 手册上说
是块号)
(2)发送CMD33,,指定最后的扇区号
(3)发送CMD38,擦除指定区间的扇区
此3 步顺序不能颠倒。
还要注意发送CMD 命令时,后面要跟一个字节的CRC 校验数据,总之要保证每次发送的数据包长度符合协议要求,命令、数据符合时序要求。
CF卡在单片机系统中的应用
信息 , 片内的芯片控制器用来 实现与 主机 的接 口及 控制数据在存储模块 中的传输 。 c F卡 的 在 其 内 部 集 成 了 控 制 装 置 、 a l h Fs M m r 阵列和读写缓 冲区。其 中, eo y 微控制器起到 了 桥梁 的作用 , 主机对 F s M m r 的读写转化成 将 l h eo a y 对 A A协议控制器 的访 问。C r r F卡对于缓 冲区的设 计使用了一种双缓 冲结构( 口 R M)使得外部设 双 A ,
的存储和交换的问题 。
控制逻辑较为繁琐。而集成 了多片 F h l 存储器和 s a 外部接口、 控制机构和协议的 c 卡 , 以提供非常 F 可 可观 的存储容量和标 准的电气接 口协议 , 可以满足
和片内的存储模块 。片内的存储模块用来存储数字
l C F卡简介
Cm a a o pc F s tl h技 术 是 由 Cm a a o pc F h协 会 tl s (F ) c A 提出的一种与 P C机的 A A 口标准兼容的 T 接
存贮 和 交 换却 不 很 方 便 。为 此 , 我们 采 用 了 c F (o pc F s a ) Cm a l h r 卡来解决了这一问题。由于其 t a Cd 具有体积小 、 存储容量大 、 数据保存具有非易失性 、 本 系统对于数据处理的要求。其内部结构如图 l 所 I c 卡包含两个基本部分 : ] 片内的芯片控制器 接 口标准统一 、 便于携带等优点 , 解决了大容量数据 示l :F
和读写缓 冲区 , 具有体 积小 、 存储容 量大 、 据保存 具有 非 易失性 、 1标 准统 一 、 于携带 等优 点。文章 介绍 了 数 接3 便
Cm a a a 的结构、 o pcF s Cr t h d l 工作方式和磁盘文件管理系统及在 Cm at s Cr上的应用。并给出了Cm cF h o pc h a d o p t a a s l
stm32f103c8t6 tf卡简单的读写函数
文章标题:探索STM32F103C8T6与TF卡的简单读写函数在嵌入式系统开发中,TF卡的读写功能一直是一个不可或缺的部分。
而对于如何在STM32F103C8T6芯片上实现简单的TF卡读写函数,也是我们经常需要探讨的一个问题。
在本文中,我们将会从简单到复杂地讨论如何在STM32F103C8T6芯片上实现TF卡的读写功能,以便读者能更深入地理解这一过程。
1. TF卡简介在开始讨论TF卡的读写函数之前,我们先简要介绍一下TF卡的基本知识。
TF卡,全称TransFlash卡,又称MicroSD卡,是一种常见的存储卡,常用于嵌入式系统、手机、相机等设备中。
TF卡具有体积小、读写速度快、存储容量大等优点,因此在嵌入式系统中得到广泛应用。
2. STM32F103C8T6与TF卡的连接在实现TF卡读写功能之前,首先需要将TF卡与STM32F103C8T6芯片进行连接。
一般来说,TF卡的连接方式是通过SPI接口进行。
SPI接口是一种串行外设接口,可以实现与外部设备的高速数据传输。
通过SPI接口连接TF卡,可以在STM32F103C8T6芯片上实现对TF卡的读写操作。
3. TF卡读写函数的实现在STM32F103C8T6芯片上实现TF卡的读写函数,一般需要以下几个步骤:初始化SPI接口、初始化TF卡、读取TF卡数据、写入TF卡数据。
需要初始化SPI接口,设置好SPI的时钟频率、数据传输格式等参数。
通过初始化TF卡,可以对TF卡进行一些基本的设置,比如设置TF卡的工作模式、文件系统类型等。
接下来,可以通过读取TF 卡数据和写入TF卡数据函数,实现对TF卡的读写操作。
4. 个人观点和总结通过深入地探讨STM32F103C8T6与TF卡的简单读写函数,我对于嵌入式系统中TF卡的应用有了更深入的理解。
在实际应用中,我们需要根据具体的需求和硬件评台来选择合适的读写函数,并且需要注意好数据的正确读取和写入,以保证系统的稳定性和可靠性。
CF卡总结 C8051F060 并口数据传输 扇区 FAT32
基于C8051F060的CF卡文件存储系统程序CF卡有3种工作模式可供选择:I/O模式、存储器模式和IDE模式本文采用IDE模式读写CF卡A0 ,A1 ,A2 是CF 卡的寄存器寻址线,它们连接的并不是内存寻址空间。
CF 卡内部空间的寻址是通过扇区号寄存器、柱面号寄存器和磁头号寄存器的数据来来标识不同的寄存器。
CF卡的读写是通过卡内的缓冲区进行的,不支持直接读写存储区域,读取数据时,存储卡中的智能控制电路先把数据写入缓冲区,然后外部系统才能通过读缓冲区将数据读取出来。
写数据时,外部系统先把数据写入缓冲区,写满后,CF卡将缓冲区的内容自动读入存储区域。
缓冲区为一个FIFO结构。
缓冲区的读写以顺序读写的方式进行,不支持随机存取方式,系统只能一次性地按顺序读完或写完所有512字节。
对CF卡来说,写操作时某一个地址对应的是一个寄存器,而读操作时访问的是另外一个寄存器。
在读写访问时,IDE 接口(转化后的CF 卡) 有两种工作方式:LBA(逻辑块地址) 和CHS(柱面/磁头/扇区) 。
写入模式有2种:即CHS(Cylinder/Head/Sector)模式和LBA(Logical Block Address)模式。
通过设置第6个寄存器的第6位LBA确定其模式:即如果LBA=0,则为CHS 模式;如果LBA=I,则为LBA模式。
通过将IDE总线的32脚IO CHIPSELECT 16接DGND实现16位传输的要求。
实现过程:先在相应的寄存器写入地址,写入命令或写入数据后要查询状态寄存器的状态,以判断CF卡是否准备就绪或写入成功。
CF卡一扇区数据读写流程见图:IDE模式下寄存器译码对CF卡读扇区数据的过程是:首先读取第7个寄存器的状态字,如果为50H 表示没有错误,并且CF卡已经准备好;然后再分别向第2、3、4、5、6个寄存器写入相应的数据指定需要读写的扇区;最后向第7个寄存器写20H或21H,读取状态字为58H后读取数据。
单片机读取FLASH
FAT32文件系统的存储机制及其在单片机上的实现FA T32文件系统您一定不会陌生,最多看到它是在windows操作系统里,但在一些嵌入式产品(如手机、MP3、MP4等)中,也能看到它的身影。
从某种意义上来讲,FA T32文件系统是非常成功的,使我们可以脱离底层储存设备驱动,更为方便高效地组织数据。
给单片机系统中的大容量存储器(如SD卡、CF卡、硬盘等)配以FA T32文件系统,将是非常有意义的(如创建的数据文件可以在windows等操作系统中直接读取等)。
FA T32本身是比较复杂的,对其进行讲解的最好方法就是实际演练。
笔者手里持有一张刚以FA T32格式化的SD卡,我们就围绕它来讲解FA T32的实现机理。
FA T32分为几个区域,这里将用实例的方法对它们的结构与在文件存储中的功能进行详细的剖析。
1、实例说明此实例首先在一张空的SD卡(已被格式化为FA T32格式)上创建一个文本文件,并在其中输入20个字符。
再将它插入到单片机系统中,实现对这个文件的读取,将文件内容输出在调试终端上。
2、实现过程1)格式化与创建文件Windows上的磁盘格式化与文件创建就不用多说了。
如下图:2)DBR(DOS BOOT RECORD 操作系统引导记录区)DBR是我们进军FA T32的首道防线。
其实DBR中的BPB部分才是这一区域的核心部分(第12~90字节为BPB),只有深入详实的理解了BPB的意义,才能够更好的实现和操控FA T32。
关于DBR在FA T32中的地位就不多说了,以下面实际的DBR内图所示:上面的数据看起来杂乱不堪,无从下手,其实对我们有用的数据只不过90个字节(如图中彩色线标记的字节)。
仅仅是这90个字节就可以告诉我们关于磁盘的很多信息,比如每扇区字节数、每簇扇区数、磁道扇区数等等。
对于这些信息的读取,只要遵循DBR中的字段定义即可。
(比如图中紫色字段的两个字节表示这张磁盘的每一个扇区有512个字节,具体的计算方法见下文)字段定义如下表(BPB后面的422个字节对我们的意义不大,表中省略):DBR的实现代码:struct FAT32_DBR{unsigned char BS_jmpBoot[3]; //跳转指令offset: 0 unsigned char BS_OEMName[8]; // offset: 3 unsigned char BPB_BytesPerSec[2];//每扇区字节数offset:11 unsigned char BPB_SecPerClus[1]; //每簇扇区数offset:13 unsigned char BPB_RsvdSecCnt[2]; //保留扇区数目offset:14 unsigned char BPB_NumFAT s[1]; //此卷中FAT表数offset:16 unsigned char BPB_RootEntCnt[2]; //FAT32为0 offset:17 unsigned char BPB_T otSec16[2]; //FAT32为0 offset:19 unsigned char BPB_Media[1]; //存储介质offset:21 unsigned char BPB_FATSz16[2]; //FAT32为0 offset:22 unsigned char BPB_SecPerT rk[2]; //磁道扇区数offset:24 unsigned char BPB_NumHeads[2]; //磁头数offset:26 unsigned char BPB_HiddSec[4]; //FAT区前隐扇区数offset:28unsigned char BPB_T otSec32[4]; //该卷总扇区数offset:32unsigned char BPB_FATSz32[4]; //一个FAT表扇区数offset:36unsigned char BPB_ExtFlags[2]; //FAT32特有offset:40unsigned char BPB_FSVer[2]; //FAT32特有offset:42unsigned char BPB_RootClus[4]; //根目录簇号offset:44unsigned char FSInfo[2]; //保留扇区FSINFO扇区数offset:48unsigned char BPB_BkBootSec[2]; //通常为6 offset:50unsigned char BPB_Reserved[12]; //扩展用offset:52unsigned char BS_DrvNum[1]; // offset:64unsigned char BS_Reserved1[1]; // offset:65unsigned char BS_BootSig[1]; // offset:66unsigned char BS_VolID[4]; // offset:67unsigned char BS_FilSysT ype[11]; // offset:71unsigned char BS_FilSysT ype1[8]; //"FAT32 " offset:82};在程序中我们采用以上的结构体指针对扇区数据指针进行转化,就可以直接读取数据中的某一字段,如要读取BPB_BytesPerSec,可以这样来作:((struct FAT32_DBR *)pSector)-> BPB_BytesPerSec用如上语句就可以得到这一字段的首地址。
