《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 基于单片机的CF卡复制系统

基于单片机的CF卡复制系统

2008-07-24
作者:马 渊, 谢 立, 陈国斌, 刘

  摘 要: 介绍了CF卡的物理结构和工作原理" title="工作原理">工作原理,给出了CF卡之间复制的原理图和复制流程,并实现了CF卡扇区之间的复制工作。
  关键词: CF卡 单片机 扇区 复制


  随着闪存技术的不断发展,闪存卡(Flash Memory)以它卓越的容量体积比、便携性和易操作性等优势,已经取代软盘、光盘而成为移动存储领域中应用最为广泛的存储设备。闪存卡是一种非挥发性存储介质,它具有功耗低、密度高、体积小、掉电后数据不丢失、可擦除、可靠性高、单位存储容量价格便宜等特点。另外,闪存卡因为没有像硬盘一样的机械结构,显著降低了发生故障和被损坏的可能性,因此还经常被现在的一些室外工控机" title="工控机">工控机用作主系统设备。闪存卡有很多种类型,主要有CF卡、SD卡、MMC卡、记忆棒、SM卡、XD卡等,其中,CF卡应用最为常见[2~5]。
  由于CF卡的非机械结构及其体积小、稳定性高的特点,使它在具有一些特殊用途的工控机(如安装在户外或者移动车上的工控机)中比普通硬盘具有更好的应用前景,以至于越来越多的工控机用CF卡代替硬盘装载系统和存储数据。但当CF卡损坏后,重装系统比较麻烦,而且有些系统驱动程序可能拿不到,所以设计一种CF卡之间的复制系统,实现了两块相同的CF卡之间的备份,从而避免了重新安装系统和驱动程序,节约了用户的时间。此外,现今的CF卡读卡器只能对Windows系统文件进行复制操作,无法有效地复制操作系统和驱动文件。而这里设计的这套CF卡复制系统也可实现CF卡之间的文件系统和数据的复制。
1 CF卡物理结构
  CF卡的全称为“Compact Flash”卡。Compact Flash技术是Compact Flash协会提出的一种与PC机ATA接口标准兼容的技术。CF卡采用间距50mil的50针脚双列封装,其电气特性符合ATA规范[3]。CF卡内部集成了单片机控制器和闪存单元。控制器单元用于在外部主机与内部闪存单元之间进行数据交换" title="数据交换">数据交换和传递。内部闪存单元的数量可根据CF卡的容量大小进行相应地增减。目前CF卡最大存储容量可达到2~3GB。CF卡的结构如图1所示。


2 CF卡基本工作原理
  CF卡可以工作在三种模式下:(1)PC卡ATA I/O模式;(2)PC卡ATA存储模式;(3)实IDE模式。其中,实IDE模式和硬盘的驱动器完全匹配。
  CF卡有两种寻址模式:CHS(柱面/磁头/扇区)寻址模式和LBA(逻辑块地址)寻址方式。CHS寻址模式是通过柱面、磁头和扇区寻址的,最小的寻址单位是一个扇区。在CHS寻址模式下,主机通过输入柱面、磁头和扇区号码寻址某一个扇区;而在LBA寻址方式下,CF卡按照连续序列的逻辑扇区编号进行寻址,主机不必知道CF卡的物理几何结构,而且能访问的扇区从0柱面、0磁头、1扇区开始,但无法访问系统的隐藏扇区[5]
  CF卡有50个引脚,主要用到的引脚有:A10~A0,十一根地址线,在PC卡ATA存储模式下,仅用到A2~A0三根地址线,用于寻址CF卡内部控制器中的寄存器空间;D15~D0,CF卡的十六根数据线,具体传输数据时可选择16位或8位传输;-CE1、-CE2引脚,用于指示是CF卡的字节操作还是字操作;-REG是寄存器选择信号,这个信号在内存周期中使用,用来区分是普通内存还是属性寄存器;-OE是读信号;-WE是写信号。
  单片机和内部闪存空间进行数据交换是通过CF卡的八个属性寄存器实现的。在PC卡ATA存储模式下,CF卡属性寄存器组的具体功能和地址分配见表1[1,4]


  CF-ATA的基本命令有30余条,主要有数据的传输命令,包括扇区、缓冲区的读写命令等。下面以读命令为例说明CF卡工作过程及其信号时序。
  在CF卡上电初始化后,主机判断CF卡是否空闲,具体的就是查询CF卡状态寄存器" title="状态寄存器">状态寄存器的RDY位,如果为0,表示CF卡空闲,可以准备接收命令。然后,主机向CF卡填写地址寄存器块的信息,包括扇区数寄存器、扇区号寄存器、柱面号寄存器(低和高字节)、磁头寄存器等,选择访问的扇区地址。接着,主机向CF卡命令寄存器中写入读(20h)命令。CF卡收到读命令后,驱动器设置状态寄存器的BSY位,CF卡把一个扇区的数据调入到扇区缓冲区中;然后驱动器设置状态寄存器的DRQ位,清除BSY位。这样,主机就可以从扇区缓冲区中循环读出一个扇区的数据。扇区缓冲区的数据读出后,驱动器设置BSY位,同时清除DRQ信号。然后再以此方式读出下一个扇区的数据[5]
3 CF卡复制系统的设计
  CF卡复制系统的硬件设计采用89S52作为CPU,一片74HC373作为地址锁存器,一片74HC138作为译码器。系统中扩展一块RAM作为存放CF卡数据的中转站,用于两块CF卡之间进行数据交换和复制。单片机和CF卡以及其它器件的连接如图2所示。P0.0~P0.7作为数据线,与扩展的RAM以及CF卡进行数据交换和传输。由于单片机仅有八根数据线,因此CF卡采用字节读写方式,以方便与单片机进行数据交换。扩展的RAM的低八位地址线由单片机的数据线P0.0~P0.7经过锁存器输入后控制,而最高两位地址线则由P2.0~P2.1控制。单片机的P2.2~P2.4用于连接CF卡的地址线A0~A2,用于寻址CF卡属性寄存器。单片机的读写信号使能端和CF卡的读写使能端相连。74HC138译码器用于控制两块CF卡和RAM的选通信号。


  在这里,让CF卡工作在PC卡ATA存储模式下,并且使用LBA(逻辑块地址)寻址方式进行数据读写。读写数据的软件流程图如图3所示。先给系统上电,判断CF卡是否准备好。然后往CF卡的属性寄存器中填入读写扇区的起始地址和读写的扇区数,再往命令寄存器中填写读命令。填写完属性寄存器后,单片机通过不断查询CF卡状态寄存器的DRQ位,来判断数据是否准备好,一旦准备好就从CF卡的扇区缓冲区中循环读出512字节的数据到外部RAM中存放起来。然后类似地把RAM中的一个扇区的数据写入到另外一块CF卡的相应扇区中去。


  该复制设备系统中两块CF卡的容量不等,该系统是把32MB的CF卡内容复制到256MB的CF卡中去。该系统版图中还包括了和计算机相连的串口" title="串口">串口调试系统,使得可以通过计算机串口实时监测CF卡复制进程和成功与否。
  该CF卡复制系统可以对两块同样容量的CF卡进行完全或者部分复制,并且还可以将小容量的CF卡的数据复制到大容量的CF卡中去。对于不同厂家生产的CF卡,该系统在复制时也无任何问题。通过该系统把装有Windows NT嵌入式系统的CF卡复制到另外一块CF卡后,复制的新卡也能够成功启动工控机,并且原有安装的程序和驱动程序以及所有的数据都完全被成功复制。


参考文献
1 Compact Flash Association.CF+ and CompactFlash Specification Revision 3.0. http://www.compactflash.org/cfspc3_0.pdf
2 张亦楠, 岳春生, 姜 龙. ARM7系统中实现CF卡存储的文件系统设计.单片机与嵌入式系统应用,2003(5):43~44
3 林海虹, 刘 慧.CF卡与双核DSP的实现.电子技术应用, 2002;28(12):23~25
4 王海军,卜祥元,安建平. 便携式、低功耗体电信号采集存储系统研究.单片机与嵌入式系统应用,2003(8):60~63
5 程拥强,郭凤龙,朱 劲. 单片机对CF存储卡文件读写的实现. 计算机应用,2003;23(9):146~148

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。