积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 单片机 >> 应用论文
  相关分类: 相关文章 | 应用论文 | 新产品 | 下载 |
单片机实现对CF卡的读写
 
作者:南开大学 郭振武 李维祥 王文博   来源:单片机及嵌入式系统应用    点击数:126   更新时间:2008-4-22
您可以添加到网摘 让更多人关注此文章:

    

摘要:CF卡是一种包含了控制和大容量Flash存储器的标准器件,具有容量大、体积小、高性能、携带方便等优点,已广泛应用在数据采集系统和许多消息类电子产品中。本文详细介绍CF卡在单片机系统中的硬件接口电路,以及单片机对CF卡进行标准文件读写的实现,且写入的文件能被Windows操作系统读写。

关键词:CF卡 单片机 FAT文件格式

引言

由于CF卡(Compact Flash Card)具有容量大、体积小、高性能、携带方便等优点,而且读写速度快,可与多种电脑操作系统平台兼容,因此在数据采集系统中的数据记录或与PC机之间的数据转存多采用CF卡。为了在PC机中能方便地进行数据处理,在下位机端必须采用一种标准的格式组织数据,即将数据按照Windows标准文件格式写入,在PC机端通过读卡器将写入CF的内容以标准文件形式读出。Windows标准文件格式有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 LevelREQ conf5 conf4 conf3 conf2 conf1 conf0

SRESET—软复位信号;

Level REQ—中断模式选择(电平或边沿触发)。

例如,要加入Memory mapped模式,只需要在上电时保证OE为高电平,因为配置选项寄存器的conf5~conf0位的初始化值为“00000”;而要进入I/O Card模式,除了上电时保证OE为高电平外,还要进一步设置conf5~conf0,如表1所列。但是对于具体型号的CF卡而言,下面三种情况也是被CFA(CF card Association)所允许的:①上电时进入True IDE模式,工作过程中,只要监测到OE变为高,就退出True IDE模式;②允许卡在复位时重新配置;③上电时进入PCMCIA模式,允许过程中,只要监测到OE变为低,就进入True IDE模式。

表1 模式选择

conf5 conf4 conf3 conf2 conf1 conf0 模  式
0 0 0 0 0 0 Memory map
0 0 0 0 0 1 I/O Mapped,对应16位系统
0 0 0 0 1 0 I/O,对应1F0h-1F7h/3F6h-3F3h
0 0 0 0 1 1 I/O,对应170h-177h/376h-377h

2 CF卡与51单片机的接口

CF卡在PC Memory方式与51芯片的接口电路如图2所示。由于采用CF卡上电后自动进入的Memory模式,而且不存在对特性寄存器的读写,故可将REG接高电平。片选信号CE1和CE2组合可选择数据位宽度,如表2所列。图2中CE2接VCC,选用的是8位(D7~D0)数据宽度。

表2 数据宽度选择

  8位(D7~D0) 8位(D15~D8) 16位 高  阻 
CE1 0 1 0 1
CE2 1 0 0 1

为了实现即插即用的功能,CE卡上提供了两个用来检测卡是否存在的引脚(CD1、CD2),由卡内部接地。当主机检测到与其相连的CD1和CD2两个引脚同时为低电平时,可判断出卡与主机相连;否则,卡未与主机相连。

由于I/O口紧张,RDY/BSY引脚悬空不用,通过查询状态寄存器能判断CF卡是否准备就绪。在实际应用中,由于一次至少要读写一个扇区512字节,所以要扩充一块RAM。我们选用的是62256,容量为32KB,这样便可以支持大到2GB的CF卡(参见下文),增加了其扩展性。

3 FAT文件系统

FAT文件系统是基于DOS的文件系统。常说的FAT有12位的FAT12和16位的FAT16,另外就是32位的FAT32。考虑到CF卡的容量有限,宜选用FAT16。这里只对FAT文件系统作一简单介绍,更详细的内容请见参考文献。

磁盘的寻址方式有两种:物理寻址C/H/S(柱面/磁头/扇区)方式和逻辑块LBA(Logical Block Addressing)寻址方式。二者之间的转换关系为:

LBA地址=(柱面号×磁头数+磁头号)×扇区数+扇区数-1

采用LBA寻址方式,没有磁头和磁道的转换操作,在访问连续的扇区时,操作速度比物理寻址方式要快,而且也简化了对磁盘的访问。

硬盘的结构布局分为MBR(主引导扇区)和最多4个逻辑分区(含DOS分区或非DOS分区),而在DOS逻辑分区中的磁盘组织如下:

引导扇区 FAT1 FAT2 根目标区 数据区

引导扇区DBR(DOS Boot Record):位于LBA 0扇区,包含跳转指令、厂商标识和DOS版本号、BPB(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 内存模式下部分寄存器译码

REG A10 A9~A4 A3~A0 offset OE=0 WE=0
1 0 X 0000 0 偶字节读 侧字节写
1 0 X 0001 1 错误寄存器 特性寄存器
1 0 X 0010 2 扇区数 扇区数
1 0 X 0011 3 扇区号(LBA7~0) 扇区号(LBA7~0)
1 0 X 0100 4 低柱面号(LBA15~8) 低柱面号(LBA15~8)
1 0 X 0101 5 高柱面号(LBA23~16 高柱面号(LBA23~16)
1 0 X 0110 6 驱动器/磁头(LBA27~24) 驱动器/磁头(LBA27~24)
1 0 X 0111 7 状态寄存器 命令寄存器

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

1 LBA 1 DRV HS3 HS2 HS1 HS0

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卡是否准备就绪或写入成功。状态寄存器结构如下:

BUSY RDY DWF DSC DRQ CORR 0 ERR

各位的值为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;

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卡向计算机转存数据,可以非常方便地对数据进行维护。




相关文章
· 基于单片机的某车型CAN总线系统设计[119]
· Microchip推出适用于8位、16位及32位PIC®单片机和...[151]
· 基于SPE61A单片机的非接触式高压验电器的开发[256]
· 多通道智能温湿度测试仪的研制[375]
· 多通道智能温湿度测试仪的研制[263]
热门评论排行
·VHDL设计中电路简化问题的
·ARM嵌入式系统基础教程(N
·江苏嵌入式Linux教育培训
·ARM处理器应用开发4步骤
·锐极LINUX驱动培训班定于

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
节能环保备受关注 半导体照
半导体产业最终将存活并将再次蓬勃发展
电子元件业御寒过冬 静待行
台湾当局拨款60亿美元援助DRAM厂
Vishay Silico
严冬期如何发展半导体业 扩
2008年中国集成电路市场回顾与展望
分析师:亚洲芯片厂商库存远超预期
2008年基础电子业十大事件点评
Aptina并购智多微手机软件平台设
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
供应HY5PS561621AF...
优势供应SPP11N80C3...
优势供应ICE2A0565Z...
低价专业PCB打样 双面板20...
深圳市天漠科技超低价供应atm...
深圳市天漠科技超低价供应ARM...
[推荐]2.5米精度,高灵敏度...
830实验箱+电脑没有并口...
[原创]平望科技助力自服终端国...
低价专业PCB打样 双面板20...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网