admin 管理员组

文章数量: 1184232

:柱面 磁头 扇区 LBA CF)

看到这里,对闪存产品有所了解的读者一定会说,这样看来, CF 卡很像现在满地皆是的闪盘呢。的确,虽然形状不同,但 CF 卡和闪盘结构相似,有许多相同之处,不过它们也有很大的区别,比如二者的管理和工作方式。

现在的 CF 卡和闪盘基本都使用 NAND flash NAND Flash 自身是没有存储控制器的,其结构可看作是由许多的小区块组成的,每块都能存储一定数量的信息,类似于硬盘的簇。 NAND flash 的读写也是以块和页为单位来进行的,使用 8bit I/O 端口存取数据。
NAND
flash 容量大、成本低、可以达到比较高的速度,所以应用较为广泛,不过它也有些比较明显的缺点。 NAND flash 的基本工作方式是按顺序读取,一个区块写入或读取结束再接着下一个,是“串行”方式而不是“并行”方式,操作上也是如此,比如区块上已有信息,就一定要先擦除,再写入,其它操作也是一样的。另一个问题就是 NAND flash 需要一定的存储空间来存放目录等信息来管理所有的资料,进行任何操作都需要使用这一部分,大部分闪盘的控制芯片都使用固定区块,所以其使用次数远高于其它区块,不管闪存是号称 10 万次擦写寿命也好, 100 万次擦写寿命也好,如果使用很频繁,即使每次只用一点点存储空间,也可能因为目录区损坏及缺乏有效扫描除错手段而造成数据丢失,需要格式化才能解决问题。
NAND 型闪存的以上特点,我们可以看出这一类 需要的是什么的,在拥有大容量、低成本的存储介质之后,还需要先进的控制器及程序来驱动及使用才能够使存储器具有比较好的性能及可靠性,否则不但性能低下,使用寿命也短。

CF 卡比闪盘之类的存储器更加接近硬盘, CF 卡内部控制器设计完全模拟硬盘,而且使用标准的 ATA/IDE 接口界面,可以很容易的通过 IDE 接口与电脑连接,而且早已实现无驱动设计,使用非常方便。 CF 卡最初一般是配备 PCMCIA 适配器在 电脑的 PCMCIA 插槽上使用,现在还有了许多 USB IEEE1394 读卡器等各种各样的 CF 适配器,使 CF 卡与电脑之间的信息传输变得更加方便。由于 Windows 95 以上的所有操作系统都内置 PCMCIA 接口的 IDE 硬盘控制器驱动程序, Windows ME 以上的操作系统也加入了对 USB IEEE1394 接口移动磁盘的支持,所以只要为 CF 卡加上一个简单的接口控制器(转接器),就可以直接在电脑上使用,移动版的 Windows Mobile 也早已加入对 CF/CF+ 的支持,连转接器都免了。由于 CF 卡内置控制器和仿硬盘的设计,也简化了 CF 适配器的设计,只不过由于 CF 卡本身体积比 SD 等存储卡要大,针脚也多得多,所以相对来说往往还是 CF 适配器要大一些。

CF 卡在自身设计上也作出了软硬件两方面的配合:一是硬件提供判断条件。 CF 卡在自身电路上提供了两个用来检测 CF 卡是否存在的管脚(暂称 CD1 CD2 )。 CD1 CD2 的有效电平均为低电平,当主机检测到与其相连的 CD1 CD2 两个管脚同时为低电平时,可判断出 CF 卡与主机相连;当主机检测到与其相连的 CD1 CD2 有一个管脚不为低,则可判断出 CF 卡未与主机相连。二是软件。首选定义全局变量(如: 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

通过软硬结合、内外配合, CF 卡具备热插拔、即插即用、无须驱动的功能,也可以用来作为 器使用。

前面我们说到 NAND flash 使用 8bit 端口就可以完成页操作, CF 卡的寄存器也都是 8bit 的,只有数据寄存器是 16bit CF 卡控制器中包含两组寄存器:命令寄存器和控制寄存器,这两个寄存器组通过 REG 信号进行区分。 CF 卡工作在存储器方式时,按照 ATA 标准以寄存器方式传送数据、命令和地址,命令寄存器用来接受命令和传输数据,控制寄存器用来进行磁盘控制。当 CF 卡工作在 I/O 方式时,控制寄存器组主要用于控制 CF 卡的工作方式;命令寄存器组被分配在与 ATA 标准兼容的地址空间。当 CF 卡工作在 I/O 方式下,命令寄存器组的地址空间为 IF0H 1F7H 3F6H 3F7H ;当 CF 卡工作在寄存器方式下,命令寄存器组的地址空间为 1F0H 1FFH
CF
卡的寄存器包括:数据寄存器( R/W ),用于对扇区的读写操作。主机通过该寄存器向 CF 卡卡控制器写入或从 CF 卡控制寄存器读出扇区缓冲区的数据;错误寄存器( R )和特性寄存器( W ),错误寄存器反映控制寄存器在诊断方式或操作方式下的错误原因。特性寄存器一般情况下不使用。扇区数寄存器( R/W ),用来记录读、写命令的扇区数目;扇区号寄存器( R/W ),用来记录读、写和校验命令指定的起始扇区号;柱面号寄存器( R/W ),用来记录读、写、校验和寻址命令指定的柱面号;驱动器 / 寄存器( R/W ),记录读、写、校验和寻道命令指定的驱动器号、磁头号和寻址方式( CHS 模式或 LBA 模式);状态寄存器( R )和命令寄存器( W ),状态寄存器反映 CF 卡驱动器执行命令后的状态,读该寄存器要清除中断请求信号,命令寄存器接收主机发送的 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 等。删除或者再编程的过程相似。

看到这里大家可能发现了 CF 卡与硬盘越来越多的相似之处,不过有一点是完全不同的,那就是 CF 卡没有机械结构,所以一些操作是以虚拟方式进行。 CF 卡工作时一般采用逻辑寻址方式,它没有磁头和磁道的转换操作,因此在访问连续扇区时,操作速度比物理寻址方式快。 CF 卡与可以完全像硬盘一样使用,不过由于和硬盘仍有许多不同之处,某些原本为硬盘设计的测试软件并不适合用来测试 CF 卡。

本文标签: 命令寄存 存器 扇区