2024年3月6日发(作者:宓新蕾)
CF卡存储设备
设计方案调研
共_20_页
2008年07月21日
目 录
1.
概述 ................................................. 4
1.1. 存储卡介绍 ................................................................................................................... 4
1.1.1. CF ...................................................................................................................... 4
1.1.2. SD...................................................................................................................... 4
1.1.3. XD ..................................................................................................................... 4
1.1.4. MS ..................................................................................................................... 5
1.1.5. U盘 ................................................................................................................... 5
1.2. 工控设备中使用的存储卡 ........................................................................................... 5
2.
CF卡的发展 .......................................... 5
3.
CF卡的规格 .......................................... 6
4.
CF卡的选型 .......................................... 8
4.1.
4.2.
供应商 ........................................................................................................................... 8
商业级与工业级 ........................................................................................................... 8
4.2.1. SanDisk: ......................................................................................................... 8
4.2.2. 宇瞻 ................................................................................................................... 8
4.2.3. 创见 ................................................................................................................... 9
4.3. 问题 ............................................................................................................................... 9
4.3.1. 兼容性 ............................................................................................................... 9
4.3.2. 生产质量 ......................................................................................................... 10
5.
CF卡工作原理 ....................................... 11
5.1.
5.2.
5.3.
基本结构 ..................................................................................................................... 11
CF卡控制器 ............................................................................................................... 12
CF卡的编址方式 ....................................................................................................... 13
6.
硬件实现 ............................................ 13
6.1.
6.2.
6.3.
模式选择 ..................................................................................................................... 13
即插即用 ..................................................................................................................... 14
原理图 ......................................................................................................................... 14
7.
软件实现 ............................................ 14
7.1.
7.2.
7.3.
CF卡加载 ................................................................................................................... 15
CF卡创建文件 ........................................................................................................... 16
源代码手册 ................................................................................................................. 16
8.
文件系统 ............................................ 17
8.1.
8.2.
8.3.
8.4.
FAT概述 ..................................................................................................................... 17
FAT16 .......................................................................................................................... 17
FAT32 .......................................................................................................................... 18
技术文档 ..................................................................................................................... 20
1. 概述
1.1. 存储卡介绍
1.1.1. CF
CF卡(Compact Flash),1994年由SanDisk最先推出的。CF卡具有PCMCIA-ATA功能,并与之兼容;CF卡重量只有14g,是一种固态产品,也就是工作时没有运动部件。CF卡采用闪存(flash)技术,是一种稳定的存储解决方案,不需要电池来维持其中存储的数据。对所保存的数据来说,CF卡比传统的磁盘驱动器安全性和保护性都更高;比传统的磁盘驱动器及Ⅲ型PC卡的可靠性高5到10倍,而且CF卡的用电量仅为小型磁盘驱动器的5%。
CF卡由控制芯片和存储模块组成,接口采用50针设计,使用3.3V到5V之间的电压工作(包括3.3V或5V)。
CF卡分为I型和II型,IBM公司推出的MicroDrive(MD,微硬盘)也支持CF卡Ⅱ型接口。
1.1.2. SD
SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。
SD卡结合了SanDisk快闪记忆卡控制与MLC(Multilevel Cell)技术和Toshiba(东芝)0.16u及0.13u的NAND技术,通过9针的接口界面与专门的驱动器相连接,不需要额外的电源来保持其上记忆的信息。而且它是一体化固体介质,没有任何移动部分,所以不用担心机械运动的损坏。
SD卡最大的特点就是通过加密功能,保证数据资料的安全保密。
SD卡从很多方面来看都可看作MMC的升级。与SD类似的存储卡还有miniSD、microSD(TF)。
1.1.3. XD
XD卡全称为XD-PICTURE CARD,XD取自于“eXtreme
Digital”,是“极限数字”的意思。XD图像卡是富士和奥林巴斯光
学工业开发SM卡的后续产品,该卡的尺寸为20.0×25.0×1.7mm大小,重量仅为3克重,也是目前最小最轻的存储卡之一。
XD卡采用单面18针接口,理论上图像存储容量最高可达8GB。其读出速度高达5MB/s、写入速度高达3MB/s(规格:64MB以上)。消耗电力仅25mW。
1.1.4. MS
记忆棒(Memory Stick)是Sony公司在1999年推出的存储卡产品,外形酷似口香糖,长度与普通AA电池相同,重量仅为4克。MS也包括了控制器在内,采用10针接口,并内置有写保护开关,数据总线为串行,最高频率可达20MHz,电压为2.7V到3.6V,电流平均为45mA。
记忆棒可以为蓝条与白条两种。白条记忆棒多了MagicGate版权保护功能,常用于媒体播放器。
1.1.5. U盘
U盘是闪存的一种,是基于USB总线(通用串行总线)的存储设备,采用一个4针插头作为标准插头。目前USB接口已经成为PC机的标准接口之一。
USB 1.0/1.1的最大传输速率为12Mbps。1996年推出。
USB 2.0的最大传输速率高达480Mbps。USB 1.0/1.1与USB
2.0的接口是相互兼容的。
1.2. 工控设备中使用的存储卡
CF :Omron、贝加莱、AB ControlLogix
MMC :Siemens
SD :Modicon M340
PCMCIA:Modicon Quantum
2. CF卡的发展
CF卡作为世界范围内的存储行业标准,保证CF产品的兼容,保证CF卡的向后兼容性;随着CF卡越来越被广泛应用,各厂商积极提高CF卡的技术,促进新一代体小质轻、低能耗先进移动设备的推出,进而提高工作效率。CFA总部在加拿大的Palo Alto,其成员有权免费得到CF卡、CF商标和CF技术详情。CFA成员包括3COM,佳能、柯达、惠普、日立、IBM、松下、摩托罗拉、NEC、SanDisk、精工(爱普生)和Socket Communications等120多个。
在Compact Flash规范第一次标准化的时候,即使是全尺寸的硬盘的容量也很少超过4GB的,因此ATA规范自身存在的限制被认为是可接受的。但是,在硬盘由于不断增长的容量需求而对ATA规范作出大量改变的今天,闪存卡很快就超过了4GB的限制。
CF+ (或CF2.0)包括了两个较大的变化:数据传输率提高到16MB/s,容量最大可达到
137GB(根据Compact Flash协会(CFA)的资料)。
CF3.0,支持UDMA mode 4,最高66MB/s。
CF4.0,支持UDMA mode 5,最高100MB/s。
CF4.1,支持UDMA mode 6,最高133MB/s。
3. CF卡的规格
Compact Flash协会制定了CF+/Compact Flash规格,最新版本为V4.1。CF卡遵循ATA标准制造,不过它的接口是50针而不是68针,分成两排,每排25个针脚。CF卡不是硬盘那样的针型接口而是50mil(1.27 mm)的孔型接口,因此不容易被损坏,这一设计和PC卡类似。
CF+是Compact Flash的衍生技术规格,CF+的物理规格和CF完全相同,但CF+卡并不是CF卡那样的ATA闪存存储器,而主要是相同规格的I/O设备。
CF卡连接器为42.8毫米宽,外壳的深度是36.4毫米,厚度分3.3毫米(CF I型卡)和5毫米(CF II型卡)两种。
长
宽
厚
Type I CF/CF+卡
36.4±0.15mm (1.433±0.006in.)
42.80±0.10mm (1.685±0.004in.)
3.3mm±0.10mm(0.130±0.004in.)
Type II CF/CF+卡
36.4±0.15mm (1.433±0.006in.)
42.80±0.10mm (1.685±0.004in.)
5.0mm maximum(m)
CF I型卡可以用于CF II型卡插槽,但CF II型卡由于厚度的关系无法插入CF I型卡的插槽中。CF闪存卡多数是CF I型卡。
图 1 CF I型卡规格
图 2 CF II型卡规格
4. CF卡的选型
4.1. 供应商
目前市场上CF卡的主要生产厂家有SanDisk、Kingston、Lexar、Sony、威刚、创见(Transcend)、胜创(Kingmax)、宇瞻(Apacer)、勤茂(Twinmos)等。
Kingston提供5年质保;SanDisk对低端产品提供5年质保,高端产品提供终生质保。
目前普通CF卡读写速度在1.5MB/s左右,高速CF卡在6MB/s左右。
4.2. 商业级与工业级
Flash memory
读写次数
分区识别
写入技术
数据校验
硬盘模拟
工业级
SLC(Single-Level Cell)
8~10万次
可分区识别本地磁盘
平均写入技术
ECC自动校验技术
完全模拟硬盘引导系统开机,支持长期稳定工作
-40℃~85℃(宇瞻,CFC Ⅱ)
使用温度 -25℃~85℃(SanDisk,CompactFlash 0℃-70℃
5000)
故障率 < 0.3% -
商业级
MLC(Multi-Level Cell)
1万次
无法分区识别移动磁盘
无
无
只可短期引导系统开机。长期开机BOOT区容易损坏,导致系统无法启动
目前SanDisk、宇瞻、创见有工业级产品提供。
4.2.1. SanDisk
型号为CompactFlash 5000的工业级CF卡,其工作温度为-25℃~85℃,读写寿命可以达到8万次以上。同时具备了高达30MB/s的优秀读写性能(比目前市面常见的极限三代CF卡还要快大概10MB/s左右)。该产品一共具有512MB,1GB,2GB,4GB,8GB等多种容量规格可以选择。
另外SanDisk Extreme CF卡性能介于商业级和工业级之间,工作温度为-25℃~85℃,可承受3000G冲击力。
4.2.2. 宇瞻
宇瞻的工业级CF卡目前有CFC Ⅱ和CFC Ⅲ两个系列,分别为其第二代、第三代工业用CF卡。
CFC Ⅲ具有业界领先的8-bit ECC功能,更够准确修正因频繁存取所衍生的数据错误。
其Flash memory是使用SLC颗粒,储存容量可由128MB到16GB。同时全系列产品皆可支持PIO, Multi-Word DMA及 Ultra DMA等传输规格。
4.2.3. 创见
创见工业级CompactFlash存储卡采用了SLC闪存芯片,能够支持Ultra DMA mode 0-4及双信道传输模式,读写速度分别为42MB/s和30MB/s,采用了先进的数据自动纠错(ECC)功能。工作温度范围为-40℃~85℃,并具有防震、防尘能力。
1GB、2GB、4GB、8GB容量的创见工业级CompactFlash存储卡的价格分别为47.2美元、77.8美元、142美元、267美元。创见提供了两年的质量保证。
4.3. 问题
4.3.1. 兼容性
CF卡的兼容性问题要好于SD卡,但仍存在。下面以数码相机与部分CF卡之间的兼容性测试结果为例。
品牌
型号
Sandisk 20X 512MB
Nikon
Coolpix E5700
◎
Olympus
C5060Zoom
◎
Fujifilm
FinePix S602Z
◎
Sandisk 40X 512MB
Sandisk Ultra II 512MB
Kingston 512MB
Kingmax 1GB
Pretec cheetah 256MB
Pretec Platinum 512MB
Pretec 3GB
PQI 40X 512MB
Lexar 40X 512MB
Twinmos 512MB
◎
◎
◎
◎
◎
◎
×
◎
◎
◎
◎
◎
◎
◎
×
◎
×
◎
◎
◎
◎
◎
◎
◎
◎
◎
△
◎
◎
◎
注:◎:完全正常的使用;△ :可以使用,但是存在问题;×:无法使用。
解决方法:出厂前对各个品牌各个系列的CF卡分别进行测试,在产品说明书中提供兼容性列表,并通过工程规范进行约束。
4.3.2. 生产质量
2006年下半年,三星在闪存生产制程中由SLC转向63纳米制程的MLC,而下游控制芯片设计公司未能相应地调整控制芯片,无法稳定地支持MLC闪存所需的整页一次写入方式,导致采用三星63纳米制程的MLC闪存产品出现数据存储不稳定,用户在使用2至3个月后会出现数据丢失的严重问题。
此次由控制芯片引发的质量事件,在欧美市场已经引发了大范围的退货求偿风潮,为了转嫁风险和快速抛售大量有质量问题的SD存储卡库存,亚洲市场(主要是中国、印度和其他东南亚市场)成了主要的抛货对象,抛货数量达千万片之巨。
解决方法:通过正规的渠道进货,对供应商签订PCN协议。
5. CF卡工作原理
5.1. 基本结构
图 3 CF卡结构框图
由上图可知,CF卡包含两个基本部分;片内的芯片控制器和片内的存储模块。片内的存储模块用来存储数字信息,片内的芯片控制器用来实现与主机的接口及控制数据在存储模块中的传输。
图 4 CF卡实物解剖图
现在的CF卡和闪盘基本都使用NAND型flash,NAND Flash自身是没有存储控制器的,其结构可看作是由许多的小区块组成的,每块都能存储一定数量的信息,类似于硬盘的簇。NAND型flash的读写也是以块和页为单位来进行的,使用8bit的I/O端口存取数据。
NAND型flash容量大、成本低、可以达到比较高的速度,所以应用较为广泛,不过它也有些比较明显的缺点。NAND型flash的基本工作方式是按顺序读取,一个区块写入或读取结束再接着下一个,是“串行”方式而不是“并行”方式。操作上也是如此,比如区块上已有信息,就一定要先擦除,再写入,其它操作也是一样的。另一个问题就是NAND型flash需要一定的存储空间来存放目录等信息来管理所有的资料,进行任何操作都需要使用这一部分,大部分闪盘的控制芯片都使用固定区块,所以其使用次数远高于其它区块,不管闪存是号称10万次擦写寿命也好,100万次擦写寿命也好,如果使用很频繁,即使每次只用一点点存储空间,也可能因为目录区损坏及缺乏有效扫描除错手段而造成数据丢失,需要格式化才能解决问题。
CF卡比闪盘之类的存储器更加接近硬盘,CF卡内部控制器设计完全模拟硬盘,而且使用标准的ATA/IDE接口界面,可以很容易的通过IDE接口与电脑连接,而且早已实现无驱动设计,使用非常方便。
5.2. CF卡控制器
CF卡控制器中包含两组寄存器:命令寄存器和控制寄存器。命令寄存器用来接受命令和传输数据;控制寄存器用作磁盘控制。这两个寄存器组通过GEG信号进行区分。控制寄存器组主要用于控制CF卡的工作方式;命令寄存器组被分配在与ATA标准兼容的地址空间。当CF卡工作在I/O方式下,命令寄存器组的地址空间为1F0H~1F7H和3F6H~3F7H;当CF
卡工作在存储器方式下,命令寄存器组的地址空间为1F0H~1FFH。
当CF卡工作在存储器方式下,CF卡按照ATA标准以寄存器方式传送数据、命令和地址。这些寄存器除数据寄存器为16位外,其它寄存器均为8位。
数据寄存器(R/W):这是一个16位数据寄存器,用于对扇区的读写操作。主机通过该寄存器向CF卡控制寄存器写入或从CF卡控制寄存器读出扇区缓冲区的数据。
错误寄存器(R)和特性寄存器(W):错误寄存器反映控制寄存器在诊断方式或操作方式下的错误原因。特性寄存器一般不使用。
扇区数寄存器(R/W):用来记录读、写命令的扇区数目。
扇区号寄存器(R/W):用来记录读、写和校验命令指定的起始扇区号。
柱面号寄存器(R/W):用来记录读、写、校验和寻址命令指定的柱面号。
驱动器/磁头寄存器(R/W):记录读、写、校验和寻道命令指定的驱动器号、磁头号和寻址方式(CHS模式或LBA模式)。
状态寄存器(R)和命令寄存器(W):状态寄存器反映CF卡驱动器执行命令后的状态,读该寄存器要清除中断请求信号。命令寄存器接收主机发送的CF卡工作的命令控制字。
5.3. CF卡的编址方式
CF卡的扇区寻址有两种方式:物理寻址方式(CHS)和逻辑寻址方式(LBA)。物理寻址方式使用柱面、磁头和扇区号表示一个特定的扇区。起始扇区是0磁道、0磁头、1扇区,接下来是2扇区,一直到EOF扇区;接下来是同一柱面1头、1扇区等。逻辑寻址方式将整个CF卡同一寻址。逻辑块地址和物理地址的关系为:
LBA地址 = (柱面号×磁头数+磁头号)×扇区数+扇区数-1
在CF卡上写入一个文件的过程是这样的,在CF卡初始化后(CF卡上电复位和统计剩余空间等工作已经完成),控制器中DSP开始向CF卡的一些寄存器填写必要的信息,如向扇区号寄存器填写读写数据的起始扇区号(LBA地址)和扇区数寄存器填写读写数据所占的扇区个数等,然后向CF卡的命令寄存器写入CF卡操作的命令,如写操作则向CF卡的命令寄存器写入30H,读操作向CF卡的命令寄存器写入20H等。删除或者再编程的过程相似。
采用逻辑寻址方式,没有磁头和磁道的转换操作,因此在访问连续扇区时,操作速度比物理寻址方式快。
6. 硬件实现
6.1. 模式选择
CF卡可以工作在PC Card ATA I/O模式(I/O口模式)、PC Card ATA Memory模式(MEMORY模式)、True IDE模式。CF卡在True IDE 模式下工作时兼容IDE硬盘,并且需用的I/O引脚较少,因此推荐使用CF卡的True IDE模式。
需要注意的是,当主机电源一直接通时,拔插CF卡将会使其从原来的True IDE方式重新配置成PC Card ATA方式。所以要让CF卡一直工作在True IDE,需要在电源加电启动时
将OE输入信号接地。
CF卡与单片机之间有着非常标准的接口,4根地址线,8根数据线,1根读信号线和1根写信号线,总共只需占用单片机的14根I/O口线。
6.2. 即插即用
(1)硬件提供判断条。CF卡为了实现即插即用的功能,在自身电路上提供了两个用来检测CF卡是否存在的管脚(CD1、CD2)。CD1和CD2的有效电平为低电平,即当主机检测到与其相连的CD1和CD2两个管脚同时为低电平时,可判断出CF卡与主机相连;当主机检测到与其相连的CD1和CD2有一个管脚不为低,则可判断出CF卡未与主机相连。
(2)软件实现。首先定义全局变量(如:IsExist)用于记录CF卡是否与主机相连,当IsExist为0时表示CF卡未与主机相连;当IsExist为1时表示CF卡与主机相连。其次在每次操作CF卡时检测CF卡的CD1和CD2管脚。当检测到CD1和CD2管脚为低电平且IsExist为0时复位CF卡,重新检测CF卡的FAT表统计还剩余多少空间可以分配,检测完FAT表后置变量IsExist为1。当检测到CD1和CD2管脚为低电平且IsExist为1时,继续CF卡的正常操作。当检测到CD1和CD2为高时,停止CF卡操作,置变量IsExist为0。
6.3. 原理图
参考《SanDisk的CF卡接口电路及源代码.pdf》
Acrobat 文档
7. 软件实现
True IDE方式支持8位/16位存取,一次最多存取的扇区数可由命令码Ech中的第47参数字决定。
CF卡跟硬盘的结构相同,如下图所示。在引导区中装有用于启动系统的代码,以及有关文件系统的重要信息,随后是记录所有磁盘空间的表,再下来就是根目录,然后是所有其它的东西。引导扇区在其末尾处包含有分区表。此表包含了用以标示每个分区开始和结束的表项,最多可以有四个分区,每个分区可包含不同的文件系统。紧随引导区之后的是FAT(文件分配表),用来记录设备中所有的磁盘空间的信息(此表与UNIX中的I-node表和空闲表具有相同的功能)。
图 5 CF卡结构
7.1. CF卡加载
图 6 CF卡加载流程
7.2. CF卡创建文件
图 7 CF卡创建文件流程图
7.3. 源代码手册
《周立功CF驱动中间件简要说明》
Acrobat 文档
8. 文件系统
8.1. FAT概述
文件分配表FAT(File Allocation Table)是一种由微软发明的并带有部分专利的文件系统,供MS-DOS使用,也是非NT内核的微软窗口使用的文件系统。
FAT是文件管理系统用来给每个文件分配磁盘物理空间的表格,它告诉操作系统,文件存放在磁盘什么地方。文件分配表(FAT)由表标识和簇映射的集合组成。
微软在Dos和Windows系列操作系统前后曾使用了6种不同的文件系统,FAT12、FAT16、FAT32、NTFS、NTFS5.0和WINFS,现在的CF卡大部分都可以支持FAT16和FAT32。二者的最大区别就是FAT16使用16位分区表,FAT32使用32位分区表。FAT16不支持2GB以上,FAT32则不支持32MB以下。
分区大小 FAT16簇大小 FAT32簇大小
16MB-32MB 2KB 不支持
32MB-127MB 2KB 512byte
128MB-255MB 4KB 512bytes
256MB-259MB 8KB 512bytes
260MB-511MB 8KB 4KB
512MB-1023MB 16KB 4KB
1024MB-2047MB 32KB 4KB
2048MB-8GB 不支持 4KB
8GB-16GB 不支持 8KB
16GB-32GB 不支持 16KB
32GB以上 不支持 32KB
8.2. FAT16
磁盘文件系统将整个磁盘划分为4个独立的区域,每个区域包含磁盘的独立信息,且这4个独立区域中的信息组合成一个完整有效的磁盘文件管理系统,如下表所示。
图 8 磁盘文件系统
1) DOS引导扇区:该扇区是磁盘的引导扇区,包含一些重要的磁盘系统信息,如:磁盘总共包含多少个扇区,每个簇包含多少个扇区。每个扇区包含多少个字节等。通过这些磁盘系统信息可以计算出磁盘的容量、FAT表和FDT表的起始位置以及文件数据存放的起始位置等。
2) 文件分配表(FAT):文件分配区包含两个完全相同的FAT表,其中一个FAT表用作备份FAT。每个FAT表以16字节为一个单元。FAT的每一个单元都映射磁盘上的一个簇。一
般而,FAT表的第M个单元就映射该磁盘上的第M个簇,其中的值就反映了该簇的使用情况。
3) 根目录区(FDT):根目录区专门用来存放根目录下的文件信息。根目录下的每一个文件在该目录区都对应一个32字节的目录项。这32字节的目录项包含文件的名称、属性、文件的长度、文件在磁盘上的起始簇号、文件建立和最后修改的日期和时间等。这些32字节的小单元互相首尾相接,中间没有任何分隔标志。
4) 文件数据区:该区是磁盘存放所有信息的场所。为了便于管理,文件管理系统以簇为单n位将文件分配在文件数据区的存储空间。簇总是2个连续扇区。文件在文件数据区存放的起始位置存放在其对应目录下的FDT表中,当文件的长度大于1K时,文件数据区的后续位置保存在FAT表中,即对应的FAT单元中的数值就是文件的后续部分所存放位置的簇号。
文件管理系统通过以上4个区域实现对磁盘上的文件进行有效的管理。文件管理系统将文件数据存放在文件数据区,将文件的属性存放在文件对应目录下的FDT表中,将文件的存放位置存放在FAT表中。因此文件管理系统通过FAT表和FDT表可以很方便地对文件数据区的文件进行管理。
一个完全相同的镜像副本连续存储在主 FAT 表后。表标识符包括磁盘介质描述符( 1
字节)和填充字节, 总计占两个簇的簇映射区域(这大概也就是 FAT 文件系统簇号由2开始的原因), 填充字节一般为 FF,FAT32 的填充字节中还包含“脏位”, 即系统启动时执行磁盘检查(FAT-ChkDsk/NTFS-AutoChk)。FAT 簇映射中,0000 表示空簇, FFFF 表示簇链结束, FFF7 表示坏簇,其余值表示其后续簇的簇号。FAT12 和 FAT32 的存储策略同 FAT16 类似, 例如 FAT12的结束簇为 FFF,FAT32 的坏簇为 0FFFFFF7 等(注意 FAT32 的高 4 位保留)。文件分配表(FAT2)是FAT1的完全备份。
文件目录表(FDT) 在文件目录表中,每个文件占32个字节(用PC-TOOLS或DEBUB读出时占两行),各个字节的含义是这样的:0-7 字节:文件名;8-10 字节:扩展名;11 字节,表示文件属性;12-21 共10个字节为保留字段,没有使用;22-23 为建立文件的时间;24-25
为建立文件的日期;26-27 为文件占用的第一个簇号,即起始簇;28-31 共4个字节为此文件的长度。
8.3. FAT32
FAT32 文件系统,是对早期的FAT16文件系统的增强,由于文件系统的核心——文件分配表FAT由16位扩充为32位,所以称为FAT32文件系统。在一逻辑盘(硬盘的一分区)超过 512 兆字节时使用这种格式,会更高效地存储数据,减少硬盘空间的浪费,一般还会使程序运行加快,使用的计算机系统资源更少,因此是使用大容量硬盘存储文件的极有效的系统。FAT32与FAT16的主要区别如下:
(一)FAT32 文件系统将逻辑盘的空间划分为三部分,依次是引导区(BOOT区)、文件分配表区(FAT区)、数据区(DATA区)。引导区和文件分配表区又合称为系统区。
(二)引导区从第一扇区开始,使用了三个扇区,保存了该逻辑盘每扇区字节数,每簇对应的扇区数等等重要参数和引导记录。之后还留有若干保留扇区。而FAT16文件系统的引导区只占用一个扇区,没有保留扇区。
(三)文件分配表区共保存了两个相同的文件分配表,因为文件所占用的存储空间(簇链)及空闲空间的管理都是通过FAT实现的,FAT如此重要,保存两个以便第一个损坏时,还有第二个可用。文件系统对数据区的存储空间是按簇进行划分和管理的,簇是空间分配和回收的基本单位,即,一个文件总是占用若干个整簇,文件所使用的最后一簇剩余的空间就不再使用,而是浪费掉了。从统计学上讲,平均每个文件浪费0.5簇的空间,簇越大,存储文件时空间浪费越多,利用率越低。因此,簇的大小决定了该盘数据区的利用率。FAT16系统簇号用16位二进制数表示,从0002H到FFEFH个可用簇号(FFF0H到FFFFH另有定义,用来表示坏簇,文件结束簇等),允许每一逻辑盘的数据区最多不超过FFEDH(65518)个簇。FAT32系统簇号改用32位二进制数表示,大致从00000002H到FFFFFEFFH个可用簇号。FAT表按顺序依次记录了该盘各簇的使用情况,是一种位示图法。
每簇的使用情况用32位二进制填写,未被分配的簇相应位置写零;坏簇相应位置填入特定值;已分配的簇相应位置填入非零值,具体为:如果该簇是文件的最后一簇,填入的值为FFFFFF0FH,如果该簇不是文件的最后一簇,填入的值为该文件占用的下一个簇的簇号,这样,正好将文件占用的各簇构成一个簇链,保存在FAT表中。0000000H、00000001H两簇号不使用,其对应的两个DWORD位置(FAT表开头的8个字节)用来存放该盘介质类型编号。FAT表的大小就由该逻辑盘数据区共有多少簇所决定,取整数个扇区。
(四)FAT32系统一簇对应8个逻辑相邻的扇区,理论上,这种用法所能管理的逻辑盘容量上限为16TB(16384GB),容量大于16TB时,可以用一簇对应16个扇区,依此类推。FAT16系统在逻辑盘容量介于128MB到256MB时,一簇对应8个扇区,容量介于256MB到512MB 时,一簇对应16个扇区,容量介于512MB到1GB时,一簇对应32个扇区,容量介于1GB到 2GB时,一簇对应32个扇区,超出2GB的部分无法使用。显然,对于容量大于512MB的逻辑盘,采用FAT32的簇比采用FAT16的簇小很多,大大减少了空间的浪费。但是,对于容量小于512MB的盘,采用FAT32虽然一簇8个扇区,比使用FAT16一簇16个扇区,簇有所减小,但FAT32的FAT表较大,占用空间较多,总数据区被减少,两者相抵,实际并不能增加有效存储空间,所以微软建议对小于512M的逻辑盘不使用FAT32。
另外,对于使用FAT16文件系统的用户提一建议,硬盘分区时,不要将分区(逻辑盘)容量正好设为某一区间的下限,例:将一逻辑盘容量设为1100M(稍大于1024M),则使用时其有效存储容量比分区为950M的一般还少,因其簇大一倍,浪费的空间较多。还有,使用FDISK等对分区指定容量时,由于对1MB的定义不一样(标准的二进制的1MB为1048576B,有的系统将1MB理解为1000000B,1000KB等),及每个分区需从新磁道开始等因素,实际分配的容量可能稍大于指定的容量,亦需注意掌握。
(五)根目录区(ROOT区)不再是固定区域、固定大小,可看作是数据区的一部分。因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,一般情况下从第二簇开始使用,大小视需要增加,因此根目录下的文件数目不再受最多512的限制。FAT16文件系统的根目录区(ROOT区)是固定区域、固定大小的,是从FAT区之后紧接着的32个扇区,最多保存512个目录项,作为系统区的一部分。
(六)目录区中的目录项变化较多,一个目录项仍占32字节,可以是文件目录项、子目录项、卷标项(仅跟目录有)、已删除目录项、长文件名目录项等。目录项中原来在DOS下保留未用的10个字节都有了新的定义,全部32字节的定义如下:
1) 0--7字节:文件正名。
2) 8--10字节:文件扩展名。
3) 11字节:文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。
4) 11--13字节:仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。
5) 13--15字节:24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。
6) 16--17字节:16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
7) 18--19字节:16位二进制的文件最新访问日期,定义同(6)。
8) 20--21字节:起始簇号的高16位。
9) 22--23字节:16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。
10) 24--25字节:16位二进制的文件最新修改日期,定义同(6)。
11) 26--27字节:起始簇号的低16位。
12) 28--31字节:32位的文件字节长度。
8.4. 技术文档
《FAT32文件分区表.pdf》
Acrobat 文档
2024年3月6日发(作者:宓新蕾)
CF卡存储设备
设计方案调研
共_20_页
2008年07月21日
目 录
1.
概述 ................................................. 4
1.1. 存储卡介绍 ................................................................................................................... 4
1.1.1. CF ...................................................................................................................... 4
1.1.2. SD...................................................................................................................... 4
1.1.3. XD ..................................................................................................................... 4
1.1.4. MS ..................................................................................................................... 5
1.1.5. U盘 ................................................................................................................... 5
1.2. 工控设备中使用的存储卡 ........................................................................................... 5
2.
CF卡的发展 .......................................... 5
3.
CF卡的规格 .......................................... 6
4.
CF卡的选型 .......................................... 8
4.1.
4.2.
供应商 ........................................................................................................................... 8
商业级与工业级 ........................................................................................................... 8
4.2.1. SanDisk: ......................................................................................................... 8
4.2.2. 宇瞻 ................................................................................................................... 8
4.2.3. 创见 ................................................................................................................... 9
4.3. 问题 ............................................................................................................................... 9
4.3.1. 兼容性 ............................................................................................................... 9
4.3.2. 生产质量 ......................................................................................................... 10
5.
CF卡工作原理 ....................................... 11
5.1.
5.2.
5.3.
基本结构 ..................................................................................................................... 11
CF卡控制器 ............................................................................................................... 12
CF卡的编址方式 ....................................................................................................... 13
6.
硬件实现 ............................................ 13
6.1.
6.2.
6.3.
模式选择 ..................................................................................................................... 13
即插即用 ..................................................................................................................... 14
原理图 ......................................................................................................................... 14
7.
软件实现 ............................................ 14
7.1.
7.2.
7.3.
CF卡加载 ................................................................................................................... 15
CF卡创建文件 ........................................................................................................... 16
源代码手册 ................................................................................................................. 16
8.
文件系统 ............................................ 17
8.1.
8.2.
8.3.
8.4.
FAT概述 ..................................................................................................................... 17
FAT16 .......................................................................................................................... 17
FAT32 .......................................................................................................................... 18
技术文档 ..................................................................................................................... 20
1. 概述
1.1. 存储卡介绍
1.1.1. CF
CF卡(Compact Flash),1994年由SanDisk最先推出的。CF卡具有PCMCIA-ATA功能,并与之兼容;CF卡重量只有14g,是一种固态产品,也就是工作时没有运动部件。CF卡采用闪存(flash)技术,是一种稳定的存储解决方案,不需要电池来维持其中存储的数据。对所保存的数据来说,CF卡比传统的磁盘驱动器安全性和保护性都更高;比传统的磁盘驱动器及Ⅲ型PC卡的可靠性高5到10倍,而且CF卡的用电量仅为小型磁盘驱动器的5%。
CF卡由控制芯片和存储模块组成,接口采用50针设计,使用3.3V到5V之间的电压工作(包括3.3V或5V)。
CF卡分为I型和II型,IBM公司推出的MicroDrive(MD,微硬盘)也支持CF卡Ⅱ型接口。
1.1.2. SD
SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。
SD卡结合了SanDisk快闪记忆卡控制与MLC(Multilevel Cell)技术和Toshiba(东芝)0.16u及0.13u的NAND技术,通过9针的接口界面与专门的驱动器相连接,不需要额外的电源来保持其上记忆的信息。而且它是一体化固体介质,没有任何移动部分,所以不用担心机械运动的损坏。
SD卡最大的特点就是通过加密功能,保证数据资料的安全保密。
SD卡从很多方面来看都可看作MMC的升级。与SD类似的存储卡还有miniSD、microSD(TF)。
1.1.3. XD
XD卡全称为XD-PICTURE CARD,XD取自于“eXtreme
Digital”,是“极限数字”的意思。XD图像卡是富士和奥林巴斯光
学工业开发SM卡的后续产品,该卡的尺寸为20.0×25.0×1.7mm大小,重量仅为3克重,也是目前最小最轻的存储卡之一。
XD卡采用单面18针接口,理论上图像存储容量最高可达8GB。其读出速度高达5MB/s、写入速度高达3MB/s(规格:64MB以上)。消耗电力仅25mW。
1.1.4. MS
记忆棒(Memory Stick)是Sony公司在1999年推出的存储卡产品,外形酷似口香糖,长度与普通AA电池相同,重量仅为4克。MS也包括了控制器在内,采用10针接口,并内置有写保护开关,数据总线为串行,最高频率可达20MHz,电压为2.7V到3.6V,电流平均为45mA。
记忆棒可以为蓝条与白条两种。白条记忆棒多了MagicGate版权保护功能,常用于媒体播放器。
1.1.5. U盘
U盘是闪存的一种,是基于USB总线(通用串行总线)的存储设备,采用一个4针插头作为标准插头。目前USB接口已经成为PC机的标准接口之一。
USB 1.0/1.1的最大传输速率为12Mbps。1996年推出。
USB 2.0的最大传输速率高达480Mbps。USB 1.0/1.1与USB
2.0的接口是相互兼容的。
1.2. 工控设备中使用的存储卡
CF :Omron、贝加莱、AB ControlLogix
MMC :Siemens
SD :Modicon M340
PCMCIA:Modicon Quantum
2. CF卡的发展
CF卡作为世界范围内的存储行业标准,保证CF产品的兼容,保证CF卡的向后兼容性;随着CF卡越来越被广泛应用,各厂商积极提高CF卡的技术,促进新一代体小质轻、低能耗先进移动设备的推出,进而提高工作效率。CFA总部在加拿大的Palo Alto,其成员有权免费得到CF卡、CF商标和CF技术详情。CFA成员包括3COM,佳能、柯达、惠普、日立、IBM、松下、摩托罗拉、NEC、SanDisk、精工(爱普生)和Socket Communications等120多个。
在Compact Flash规范第一次标准化的时候,即使是全尺寸的硬盘的容量也很少超过4GB的,因此ATA规范自身存在的限制被认为是可接受的。但是,在硬盘由于不断增长的容量需求而对ATA规范作出大量改变的今天,闪存卡很快就超过了4GB的限制。
CF+ (或CF2.0)包括了两个较大的变化:数据传输率提高到16MB/s,容量最大可达到
137GB(根据Compact Flash协会(CFA)的资料)。
CF3.0,支持UDMA mode 4,最高66MB/s。
CF4.0,支持UDMA mode 5,最高100MB/s。
CF4.1,支持UDMA mode 6,最高133MB/s。
3. CF卡的规格
Compact Flash协会制定了CF+/Compact Flash规格,最新版本为V4.1。CF卡遵循ATA标准制造,不过它的接口是50针而不是68针,分成两排,每排25个针脚。CF卡不是硬盘那样的针型接口而是50mil(1.27 mm)的孔型接口,因此不容易被损坏,这一设计和PC卡类似。
CF+是Compact Flash的衍生技术规格,CF+的物理规格和CF完全相同,但CF+卡并不是CF卡那样的ATA闪存存储器,而主要是相同规格的I/O设备。
CF卡连接器为42.8毫米宽,外壳的深度是36.4毫米,厚度分3.3毫米(CF I型卡)和5毫米(CF II型卡)两种。
长
宽
厚
Type I CF/CF+卡
36.4±0.15mm (1.433±0.006in.)
42.80±0.10mm (1.685±0.004in.)
3.3mm±0.10mm(0.130±0.004in.)
Type II CF/CF+卡
36.4±0.15mm (1.433±0.006in.)
42.80±0.10mm (1.685±0.004in.)
5.0mm maximum(m)
CF I型卡可以用于CF II型卡插槽,但CF II型卡由于厚度的关系无法插入CF I型卡的插槽中。CF闪存卡多数是CF I型卡。
图 1 CF I型卡规格
图 2 CF II型卡规格
4. CF卡的选型
4.1. 供应商
目前市场上CF卡的主要生产厂家有SanDisk、Kingston、Lexar、Sony、威刚、创见(Transcend)、胜创(Kingmax)、宇瞻(Apacer)、勤茂(Twinmos)等。
Kingston提供5年质保;SanDisk对低端产品提供5年质保,高端产品提供终生质保。
目前普通CF卡读写速度在1.5MB/s左右,高速CF卡在6MB/s左右。
4.2. 商业级与工业级
Flash memory
读写次数
分区识别
写入技术
数据校验
硬盘模拟
工业级
SLC(Single-Level Cell)
8~10万次
可分区识别本地磁盘
平均写入技术
ECC自动校验技术
完全模拟硬盘引导系统开机,支持长期稳定工作
-40℃~85℃(宇瞻,CFC Ⅱ)
使用温度 -25℃~85℃(SanDisk,CompactFlash 0℃-70℃
5000)
故障率 < 0.3% -
商业级
MLC(Multi-Level Cell)
1万次
无法分区识别移动磁盘
无
无
只可短期引导系统开机。长期开机BOOT区容易损坏,导致系统无法启动
目前SanDisk、宇瞻、创见有工业级产品提供。
4.2.1. SanDisk
型号为CompactFlash 5000的工业级CF卡,其工作温度为-25℃~85℃,读写寿命可以达到8万次以上。同时具备了高达30MB/s的优秀读写性能(比目前市面常见的极限三代CF卡还要快大概10MB/s左右)。该产品一共具有512MB,1GB,2GB,4GB,8GB等多种容量规格可以选择。
另外SanDisk Extreme CF卡性能介于商业级和工业级之间,工作温度为-25℃~85℃,可承受3000G冲击力。
4.2.2. 宇瞻
宇瞻的工业级CF卡目前有CFC Ⅱ和CFC Ⅲ两个系列,分别为其第二代、第三代工业用CF卡。
CFC Ⅲ具有业界领先的8-bit ECC功能,更够准确修正因频繁存取所衍生的数据错误。
其Flash memory是使用SLC颗粒,储存容量可由128MB到16GB。同时全系列产品皆可支持PIO, Multi-Word DMA及 Ultra DMA等传输规格。
4.2.3. 创见
创见工业级CompactFlash存储卡采用了SLC闪存芯片,能够支持Ultra DMA mode 0-4及双信道传输模式,读写速度分别为42MB/s和30MB/s,采用了先进的数据自动纠错(ECC)功能。工作温度范围为-40℃~85℃,并具有防震、防尘能力。
1GB、2GB、4GB、8GB容量的创见工业级CompactFlash存储卡的价格分别为47.2美元、77.8美元、142美元、267美元。创见提供了两年的质量保证。
4.3. 问题
4.3.1. 兼容性
CF卡的兼容性问题要好于SD卡,但仍存在。下面以数码相机与部分CF卡之间的兼容性测试结果为例。
品牌
型号
Sandisk 20X 512MB
Nikon
Coolpix E5700
◎
Olympus
C5060Zoom
◎
Fujifilm
FinePix S602Z
◎
Sandisk 40X 512MB
Sandisk Ultra II 512MB
Kingston 512MB
Kingmax 1GB
Pretec cheetah 256MB
Pretec Platinum 512MB
Pretec 3GB
PQI 40X 512MB
Lexar 40X 512MB
Twinmos 512MB
◎
◎
◎
◎
◎
◎
×
◎
◎
◎
◎
◎
◎
◎
×
◎
×
◎
◎
◎
◎
◎
◎
◎
◎
◎
△
◎
◎
◎
注:◎:完全正常的使用;△ :可以使用,但是存在问题;×:无法使用。
解决方法:出厂前对各个品牌各个系列的CF卡分别进行测试,在产品说明书中提供兼容性列表,并通过工程规范进行约束。
4.3.2. 生产质量
2006年下半年,三星在闪存生产制程中由SLC转向63纳米制程的MLC,而下游控制芯片设计公司未能相应地调整控制芯片,无法稳定地支持MLC闪存所需的整页一次写入方式,导致采用三星63纳米制程的MLC闪存产品出现数据存储不稳定,用户在使用2至3个月后会出现数据丢失的严重问题。
此次由控制芯片引发的质量事件,在欧美市场已经引发了大范围的退货求偿风潮,为了转嫁风险和快速抛售大量有质量问题的SD存储卡库存,亚洲市场(主要是中国、印度和其他东南亚市场)成了主要的抛货对象,抛货数量达千万片之巨。
解决方法:通过正规的渠道进货,对供应商签订PCN协议。
5. CF卡工作原理
5.1. 基本结构
图 3 CF卡结构框图
由上图可知,CF卡包含两个基本部分;片内的芯片控制器和片内的存储模块。片内的存储模块用来存储数字信息,片内的芯片控制器用来实现与主机的接口及控制数据在存储模块中的传输。
图 4 CF卡实物解剖图
现在的CF卡和闪盘基本都使用NAND型flash,NAND Flash自身是没有存储控制器的,其结构可看作是由许多的小区块组成的,每块都能存储一定数量的信息,类似于硬盘的簇。NAND型flash的读写也是以块和页为单位来进行的,使用8bit的I/O端口存取数据。
NAND型flash容量大、成本低、可以达到比较高的速度,所以应用较为广泛,不过它也有些比较明显的缺点。NAND型flash的基本工作方式是按顺序读取,一个区块写入或读取结束再接着下一个,是“串行”方式而不是“并行”方式。操作上也是如此,比如区块上已有信息,就一定要先擦除,再写入,其它操作也是一样的。另一个问题就是NAND型flash需要一定的存储空间来存放目录等信息来管理所有的资料,进行任何操作都需要使用这一部分,大部分闪盘的控制芯片都使用固定区块,所以其使用次数远高于其它区块,不管闪存是号称10万次擦写寿命也好,100万次擦写寿命也好,如果使用很频繁,即使每次只用一点点存储空间,也可能因为目录区损坏及缺乏有效扫描除错手段而造成数据丢失,需要格式化才能解决问题。
CF卡比闪盘之类的存储器更加接近硬盘,CF卡内部控制器设计完全模拟硬盘,而且使用标准的ATA/IDE接口界面,可以很容易的通过IDE接口与电脑连接,而且早已实现无驱动设计,使用非常方便。
5.2. CF卡控制器
CF卡控制器中包含两组寄存器:命令寄存器和控制寄存器。命令寄存器用来接受命令和传输数据;控制寄存器用作磁盘控制。这两个寄存器组通过GEG信号进行区分。控制寄存器组主要用于控制CF卡的工作方式;命令寄存器组被分配在与ATA标准兼容的地址空间。当CF卡工作在I/O方式下,命令寄存器组的地址空间为1F0H~1F7H和3F6H~3F7H;当CF
卡工作在存储器方式下,命令寄存器组的地址空间为1F0H~1FFH。
当CF卡工作在存储器方式下,CF卡按照ATA标准以寄存器方式传送数据、命令和地址。这些寄存器除数据寄存器为16位外,其它寄存器均为8位。
数据寄存器(R/W):这是一个16位数据寄存器,用于对扇区的读写操作。主机通过该寄存器向CF卡控制寄存器写入或从CF卡控制寄存器读出扇区缓冲区的数据。
错误寄存器(R)和特性寄存器(W):错误寄存器反映控制寄存器在诊断方式或操作方式下的错误原因。特性寄存器一般不使用。
扇区数寄存器(R/W):用来记录读、写命令的扇区数目。
扇区号寄存器(R/W):用来记录读、写和校验命令指定的起始扇区号。
柱面号寄存器(R/W):用来记录读、写、校验和寻址命令指定的柱面号。
驱动器/磁头寄存器(R/W):记录读、写、校验和寻道命令指定的驱动器号、磁头号和寻址方式(CHS模式或LBA模式)。
状态寄存器(R)和命令寄存器(W):状态寄存器反映CF卡驱动器执行命令后的状态,读该寄存器要清除中断请求信号。命令寄存器接收主机发送的CF卡工作的命令控制字。
5.3. CF卡的编址方式
CF卡的扇区寻址有两种方式:物理寻址方式(CHS)和逻辑寻址方式(LBA)。物理寻址方式使用柱面、磁头和扇区号表示一个特定的扇区。起始扇区是0磁道、0磁头、1扇区,接下来是2扇区,一直到EOF扇区;接下来是同一柱面1头、1扇区等。逻辑寻址方式将整个CF卡同一寻址。逻辑块地址和物理地址的关系为:
LBA地址 = (柱面号×磁头数+磁头号)×扇区数+扇区数-1
在CF卡上写入一个文件的过程是这样的,在CF卡初始化后(CF卡上电复位和统计剩余空间等工作已经完成),控制器中DSP开始向CF卡的一些寄存器填写必要的信息,如向扇区号寄存器填写读写数据的起始扇区号(LBA地址)和扇区数寄存器填写读写数据所占的扇区个数等,然后向CF卡的命令寄存器写入CF卡操作的命令,如写操作则向CF卡的命令寄存器写入30H,读操作向CF卡的命令寄存器写入20H等。删除或者再编程的过程相似。
采用逻辑寻址方式,没有磁头和磁道的转换操作,因此在访问连续扇区时,操作速度比物理寻址方式快。
6. 硬件实现
6.1. 模式选择
CF卡可以工作在PC Card ATA I/O模式(I/O口模式)、PC Card ATA Memory模式(MEMORY模式)、True IDE模式。CF卡在True IDE 模式下工作时兼容IDE硬盘,并且需用的I/O引脚较少,因此推荐使用CF卡的True IDE模式。
需要注意的是,当主机电源一直接通时,拔插CF卡将会使其从原来的True IDE方式重新配置成PC Card ATA方式。所以要让CF卡一直工作在True IDE,需要在电源加电启动时
将OE输入信号接地。
CF卡与单片机之间有着非常标准的接口,4根地址线,8根数据线,1根读信号线和1根写信号线,总共只需占用单片机的14根I/O口线。
6.2. 即插即用
(1)硬件提供判断条。CF卡为了实现即插即用的功能,在自身电路上提供了两个用来检测CF卡是否存在的管脚(CD1、CD2)。CD1和CD2的有效电平为低电平,即当主机检测到与其相连的CD1和CD2两个管脚同时为低电平时,可判断出CF卡与主机相连;当主机检测到与其相连的CD1和CD2有一个管脚不为低,则可判断出CF卡未与主机相连。
(2)软件实现。首先定义全局变量(如:IsExist)用于记录CF卡是否与主机相连,当IsExist为0时表示CF卡未与主机相连;当IsExist为1时表示CF卡与主机相连。其次在每次操作CF卡时检测CF卡的CD1和CD2管脚。当检测到CD1和CD2管脚为低电平且IsExist为0时复位CF卡,重新检测CF卡的FAT表统计还剩余多少空间可以分配,检测完FAT表后置变量IsExist为1。当检测到CD1和CD2管脚为低电平且IsExist为1时,继续CF卡的正常操作。当检测到CD1和CD2为高时,停止CF卡操作,置变量IsExist为0。
6.3. 原理图
参考《SanDisk的CF卡接口电路及源代码.pdf》
Acrobat 文档
7. 软件实现
True IDE方式支持8位/16位存取,一次最多存取的扇区数可由命令码Ech中的第47参数字决定。
CF卡跟硬盘的结构相同,如下图所示。在引导区中装有用于启动系统的代码,以及有关文件系统的重要信息,随后是记录所有磁盘空间的表,再下来就是根目录,然后是所有其它的东西。引导扇区在其末尾处包含有分区表。此表包含了用以标示每个分区开始和结束的表项,最多可以有四个分区,每个分区可包含不同的文件系统。紧随引导区之后的是FAT(文件分配表),用来记录设备中所有的磁盘空间的信息(此表与UNIX中的I-node表和空闲表具有相同的功能)。
图 5 CF卡结构
7.1. CF卡加载
图 6 CF卡加载流程
7.2. CF卡创建文件
图 7 CF卡创建文件流程图
7.3. 源代码手册
《周立功CF驱动中间件简要说明》
Acrobat 文档
8. 文件系统
8.1. FAT概述
文件分配表FAT(File Allocation Table)是一种由微软发明的并带有部分专利的文件系统,供MS-DOS使用,也是非NT内核的微软窗口使用的文件系统。
FAT是文件管理系统用来给每个文件分配磁盘物理空间的表格,它告诉操作系统,文件存放在磁盘什么地方。文件分配表(FAT)由表标识和簇映射的集合组成。
微软在Dos和Windows系列操作系统前后曾使用了6种不同的文件系统,FAT12、FAT16、FAT32、NTFS、NTFS5.0和WINFS,现在的CF卡大部分都可以支持FAT16和FAT32。二者的最大区别就是FAT16使用16位分区表,FAT32使用32位分区表。FAT16不支持2GB以上,FAT32则不支持32MB以下。
分区大小 FAT16簇大小 FAT32簇大小
16MB-32MB 2KB 不支持
32MB-127MB 2KB 512byte
128MB-255MB 4KB 512bytes
256MB-259MB 8KB 512bytes
260MB-511MB 8KB 4KB
512MB-1023MB 16KB 4KB
1024MB-2047MB 32KB 4KB
2048MB-8GB 不支持 4KB
8GB-16GB 不支持 8KB
16GB-32GB 不支持 16KB
32GB以上 不支持 32KB
8.2. FAT16
磁盘文件系统将整个磁盘划分为4个独立的区域,每个区域包含磁盘的独立信息,且这4个独立区域中的信息组合成一个完整有效的磁盘文件管理系统,如下表所示。
图 8 磁盘文件系统
1) DOS引导扇区:该扇区是磁盘的引导扇区,包含一些重要的磁盘系统信息,如:磁盘总共包含多少个扇区,每个簇包含多少个扇区。每个扇区包含多少个字节等。通过这些磁盘系统信息可以计算出磁盘的容量、FAT表和FDT表的起始位置以及文件数据存放的起始位置等。
2) 文件分配表(FAT):文件分配区包含两个完全相同的FAT表,其中一个FAT表用作备份FAT。每个FAT表以16字节为一个单元。FAT的每一个单元都映射磁盘上的一个簇。一
般而,FAT表的第M个单元就映射该磁盘上的第M个簇,其中的值就反映了该簇的使用情况。
3) 根目录区(FDT):根目录区专门用来存放根目录下的文件信息。根目录下的每一个文件在该目录区都对应一个32字节的目录项。这32字节的目录项包含文件的名称、属性、文件的长度、文件在磁盘上的起始簇号、文件建立和最后修改的日期和时间等。这些32字节的小单元互相首尾相接,中间没有任何分隔标志。
4) 文件数据区:该区是磁盘存放所有信息的场所。为了便于管理,文件管理系统以簇为单n位将文件分配在文件数据区的存储空间。簇总是2个连续扇区。文件在文件数据区存放的起始位置存放在其对应目录下的FDT表中,当文件的长度大于1K时,文件数据区的后续位置保存在FAT表中,即对应的FAT单元中的数值就是文件的后续部分所存放位置的簇号。
文件管理系统通过以上4个区域实现对磁盘上的文件进行有效的管理。文件管理系统将文件数据存放在文件数据区,将文件的属性存放在文件对应目录下的FDT表中,将文件的存放位置存放在FAT表中。因此文件管理系统通过FAT表和FDT表可以很方便地对文件数据区的文件进行管理。
一个完全相同的镜像副本连续存储在主 FAT 表后。表标识符包括磁盘介质描述符( 1
字节)和填充字节, 总计占两个簇的簇映射区域(这大概也就是 FAT 文件系统簇号由2开始的原因), 填充字节一般为 FF,FAT32 的填充字节中还包含“脏位”, 即系统启动时执行磁盘检查(FAT-ChkDsk/NTFS-AutoChk)。FAT 簇映射中,0000 表示空簇, FFFF 表示簇链结束, FFF7 表示坏簇,其余值表示其后续簇的簇号。FAT12 和 FAT32 的存储策略同 FAT16 类似, 例如 FAT12的结束簇为 FFF,FAT32 的坏簇为 0FFFFFF7 等(注意 FAT32 的高 4 位保留)。文件分配表(FAT2)是FAT1的完全备份。
文件目录表(FDT) 在文件目录表中,每个文件占32个字节(用PC-TOOLS或DEBUB读出时占两行),各个字节的含义是这样的:0-7 字节:文件名;8-10 字节:扩展名;11 字节,表示文件属性;12-21 共10个字节为保留字段,没有使用;22-23 为建立文件的时间;24-25
为建立文件的日期;26-27 为文件占用的第一个簇号,即起始簇;28-31 共4个字节为此文件的长度。
8.3. FAT32
FAT32 文件系统,是对早期的FAT16文件系统的增强,由于文件系统的核心——文件分配表FAT由16位扩充为32位,所以称为FAT32文件系统。在一逻辑盘(硬盘的一分区)超过 512 兆字节时使用这种格式,会更高效地存储数据,减少硬盘空间的浪费,一般还会使程序运行加快,使用的计算机系统资源更少,因此是使用大容量硬盘存储文件的极有效的系统。FAT32与FAT16的主要区别如下:
(一)FAT32 文件系统将逻辑盘的空间划分为三部分,依次是引导区(BOOT区)、文件分配表区(FAT区)、数据区(DATA区)。引导区和文件分配表区又合称为系统区。
(二)引导区从第一扇区开始,使用了三个扇区,保存了该逻辑盘每扇区字节数,每簇对应的扇区数等等重要参数和引导记录。之后还留有若干保留扇区。而FAT16文件系统的引导区只占用一个扇区,没有保留扇区。
(三)文件分配表区共保存了两个相同的文件分配表,因为文件所占用的存储空间(簇链)及空闲空间的管理都是通过FAT实现的,FAT如此重要,保存两个以便第一个损坏时,还有第二个可用。文件系统对数据区的存储空间是按簇进行划分和管理的,簇是空间分配和回收的基本单位,即,一个文件总是占用若干个整簇,文件所使用的最后一簇剩余的空间就不再使用,而是浪费掉了。从统计学上讲,平均每个文件浪费0.5簇的空间,簇越大,存储文件时空间浪费越多,利用率越低。因此,簇的大小决定了该盘数据区的利用率。FAT16系统簇号用16位二进制数表示,从0002H到FFEFH个可用簇号(FFF0H到FFFFH另有定义,用来表示坏簇,文件结束簇等),允许每一逻辑盘的数据区最多不超过FFEDH(65518)个簇。FAT32系统簇号改用32位二进制数表示,大致从00000002H到FFFFFEFFH个可用簇号。FAT表按顺序依次记录了该盘各簇的使用情况,是一种位示图法。
每簇的使用情况用32位二进制填写,未被分配的簇相应位置写零;坏簇相应位置填入特定值;已分配的簇相应位置填入非零值,具体为:如果该簇是文件的最后一簇,填入的值为FFFFFF0FH,如果该簇不是文件的最后一簇,填入的值为该文件占用的下一个簇的簇号,这样,正好将文件占用的各簇构成一个簇链,保存在FAT表中。0000000H、00000001H两簇号不使用,其对应的两个DWORD位置(FAT表开头的8个字节)用来存放该盘介质类型编号。FAT表的大小就由该逻辑盘数据区共有多少簇所决定,取整数个扇区。
(四)FAT32系统一簇对应8个逻辑相邻的扇区,理论上,这种用法所能管理的逻辑盘容量上限为16TB(16384GB),容量大于16TB时,可以用一簇对应16个扇区,依此类推。FAT16系统在逻辑盘容量介于128MB到256MB时,一簇对应8个扇区,容量介于256MB到512MB 时,一簇对应16个扇区,容量介于512MB到1GB时,一簇对应32个扇区,容量介于1GB到 2GB时,一簇对应32个扇区,超出2GB的部分无法使用。显然,对于容量大于512MB的逻辑盘,采用FAT32的簇比采用FAT16的簇小很多,大大减少了空间的浪费。但是,对于容量小于512MB的盘,采用FAT32虽然一簇8个扇区,比使用FAT16一簇16个扇区,簇有所减小,但FAT32的FAT表较大,占用空间较多,总数据区被减少,两者相抵,实际并不能增加有效存储空间,所以微软建议对小于512M的逻辑盘不使用FAT32。
另外,对于使用FAT16文件系统的用户提一建议,硬盘分区时,不要将分区(逻辑盘)容量正好设为某一区间的下限,例:将一逻辑盘容量设为1100M(稍大于1024M),则使用时其有效存储容量比分区为950M的一般还少,因其簇大一倍,浪费的空间较多。还有,使用FDISK等对分区指定容量时,由于对1MB的定义不一样(标准的二进制的1MB为1048576B,有的系统将1MB理解为1000000B,1000KB等),及每个分区需从新磁道开始等因素,实际分配的容量可能稍大于指定的容量,亦需注意掌握。
(五)根目录区(ROOT区)不再是固定区域、固定大小,可看作是数据区的一部分。因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,一般情况下从第二簇开始使用,大小视需要增加,因此根目录下的文件数目不再受最多512的限制。FAT16文件系统的根目录区(ROOT区)是固定区域、固定大小的,是从FAT区之后紧接着的32个扇区,最多保存512个目录项,作为系统区的一部分。
(六)目录区中的目录项变化较多,一个目录项仍占32字节,可以是文件目录项、子目录项、卷标项(仅跟目录有)、已删除目录项、长文件名目录项等。目录项中原来在DOS下保留未用的10个字节都有了新的定义,全部32字节的定义如下:
1) 0--7字节:文件正名。
2) 8--10字节:文件扩展名。
3) 11字节:文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。
4) 11--13字节:仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。
5) 13--15字节:24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。
6) 16--17字节:16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
7) 18--19字节:16位二进制的文件最新访问日期,定义同(6)。
8) 20--21字节:起始簇号的高16位。
9) 22--23字节:16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。
10) 24--25字节:16位二进制的文件最新修改日期,定义同(6)。
11) 26--27字节:起始簇号的低16位。
12) 28--31字节:32位的文件字节长度。
8.4. 技术文档
《FAT32文件分区表.pdf》
Acrobat 文档