CF卡的基础知识
CF卡的物理和硬件接口特性
CF卡可以工作在PC卡ATA I/O模式、PC卡ATA存储模式和实IDE模式三种模式下,实IDE模式与IDE接口完全歉。CF卡遵从ATA协议,属于块存储设备,存储单元是通过磁头(head)、柱面(cylinder,也称磁道)和扇区(sector)组织起来的;在物理寻址(CHS)方式下,每一组H/C/S参数唯一确定存储卡中的一个扇区,通常一个扇区拥有512字节的数据空间。一个驱动数格式化后的容量为磁头数×柱面数×扇区数×512字节。在物理寻址模式下,扇区(S)是最低的地址单位,其次是磁头(H),最后的柱面(C)为最高寻址单位。此外,还有逻辑寻址方式(LBA)。在这种寻址方式下,CF卡按照以连续序列的逻辑扇区编号进行寻址,主机不必知道CF卡的物理几何结构。使用28个数据位来表示逻辑扇区的地址,可以寻址2 28个扇区,理论上可以寻址136GB的容量。下面给出物理寻址方式与逻辑寻址方式的对应关系。设NS为每磁道扇区数,NH为磁头数,C、H、S分别表示磁盘的柱面、磁头和扇区编号,LBA表示逻辑扇区号,div为整除计算,mod为求余计算,则:LBA=NH×NS×C+NC×H+S-1;C=(LBA div NS)div NH;H=(LBA div NS)mod NH;S=(LBA mod NS)+1。
CF卡为50针接口。其中重要的信号线16根数据线、11根地址线(在TureIDE模式下仅用3根地址线)、2根寄存器组选择信号线(CS0、CS1)、数据的读写线(IORD、IOWR)、1根中断信号请求线(INTRQ和1根复位线(RESET)。
3
CF内部控制器有多个寄存器,通过这些寄存器可以对CF卡内部的存储空间进行控制和访问。下面就实IDE模式下的寄存器组为例进行说明。
在实IDE模式下,寄存器组通过寄存器组选择信号线(CS0、CS1)和低三位地址线(A0、A1、A2)进行访问,具体功能和地址分配如表2所列。
表2
CS1 | CS0 | A2 | A1 | A0 | IORD=0 | IOWR=0 | 位数/位 |
1 | 0 | 0 | 0 | 0 | 数据寄存器 | 数据寄存器 | 16 |
1 | 0 | 0 | 0 | 1 | 错误寄存器 | 特征寄存器 | 8 |
1 | 0 | 0 | 1 | 0 | 扇区数寄存器 | 扇区数寄存器 | 8 |
1 | 0 | 0 | 1 | 1 | 扇区号寄存器 | 扇区号寄存器 | 8 |
1 | 0 | 1 | 0 | 0 | 柱面号寄存器(低字节) | 柱面号寄存器(低字节) | 8 |
1 | 0 | 1 | 0 | 1 | 柱面号寄存器(高字节) | 柱面号寄存器(高字节) | 8 |
1 | 0 | 1 | 1 | 0 | 驱动器选择/磁头寄存器 | 驱动器选择/磁头寄存器 | 8 |
1 | 0 | 1 | 1 | 1 | 状态寄存器 | 命令寄存器 | 8 |
0 | 1 | 1 | 1 | 0 | 可选状态寄存器 | 设备控制寄存器 | 8 |
0 | 1 | 1 | 1 | 1 | 驱动器地址寄存器 | 保留 | 8 |
CF-ATA的基本命令有30余条,主要有数据的传输命令,包括扇区、缓冲区的读写等命令;CF卡的定义命令,包括磁道格式化、设置特征参数等命令;电源管理命令,包括检查电源管理模式、进入睡眠省电模式等命令;安全及权限的设置命令,包括CF卡安全密码的设置、安全权限的锁定与解锁等命令。每执行一条命令都要向CF-ATA的寄存器组写入参数和命令。下面以CF卡读取一扇区数据为例,说明CF-ATA命令的执行过程。
①读取CF卡状态寄存器,检测并等待当前CF卡是否空闲,若空闲,向下执行。
②填写地址寄存器块。地址寄存器块包括扇区数寄存器、扇区号寄存器、柱面号寄存器(低和高字节)、驱动器选择/磁头寄存器,选择访问的扇区地址。
③写命令寄存器,将读扇区命令写入命令寄存器(20h或21h)。
④读取CF卡状态寄存器,检测并等待CF卡的数据请求。有数据请求表示命令已被接收并处理,若长时间没有数据请求,需要进行超时处理。
⑤读数据寄存器。由于数据寄存器端口为16位,因此,读一个扇区512字节的数据仅需要连续执行256次访问数据寄存器的操作。要注意的是,在CF卡中存储的数据是低字节在前,高字节在后。在数据寄存器中,会产生高低字节颠倒的问题。
⑥检测执行结果。在执行命令后,需要查看状态寄存器的D0位。若D0位为0,则表示命令执行成功,否则表示出错。其相应的错误信息在错误寄存器中可以查出。