在“计算机接口技术”教学中,有关硬磁盘接口适配器这一章比较难学,主要涉及到I/O控制层对扇区读写和使用逻辑映射层对数据进行管理问题,内容比较抽象,教师和学生只能凭想象去教与学。笔者在科研中,通过对嵌入式微处理器与硬盘接口的开发应用,加深了对这些内容的理解,为拓展这部分教学内容的深度和广度奠定了基础,并采用理论与实际结合的方式去讲授有关的内容,受到了学生的欢迎。故撰此文与从事硬盘接口技术教学的老师们作一交流。
1 ARM系统及IDE接口综述
ARM(AdvancedRSICMachines)是一种低功耗、高性能的32位处理器。本文介绍的系统是基于Samsung公司S3C44B0X构建而成。该CPU的内核是ARM7TDMI,采用了三级流水线和VONNeumann结构,并且具有UART、IIC、IIS、SIO接口,ADC、PWM通道,实时时钟、LCD控制器等。
硬盘接口结构主要分I/O控制层和逻辑映射层。其中I/O控制层包括与ARM的物理接口,实现对硬盘状态的查询、设置和对扇区的读写。它是依据ATA标准连接的IDE接口。通过IDE接口选择可编程的PIO或使用DMA方法传输数据。本文将介绍PIO方式传送,即对硬盘每一次访问都需要分别进行编程。
逻辑映射层实现对目录、文件与扇区数据逻辑映射,以及数据的存储和修改。该部分应用微软公司FAT标准,为每个文件的磁盘块构造链接表,通过链接表和它的索引实现对整个磁盘文件进行管理。
在微机应用中,由于常涉及大批量数据的存储,在联网条件不备的情况下,通过IDE接口连接大容量硬盘是一个有效方法。若按照ANSI的ATA标准连接硬盘,并通过Fat32文件系统进行数据管理,嵌入式系统读写过的硬盘,还可以脱机移到Win2dows操作系统支持下的PC机中,实现与常规操作系统共享硬盘数据资源。本文介绍的方法可以推广到其它微处理器应用系统中。
2 硬件结构与I/O控制层
ATA标准对IDE硬盘接口作了详细描述。
图1是按照ATA规范结合PIO传输特点进行连接。由于没有使用DMA传输方式,故DMARQ和DMACK两根悬空;/IOCS16用于选择使用DD0~DD15进行16位传输或使用DD0~DD7进行8位传输;/DIOR和/DIOW是对磁盘驱动寄存器进行读写操作的一对握手信号;/CS0用来选定命令寄存器组,/CS1选择控制寄存器组。这两根信号线结合DA0~DA2,就可以对IDE多个寄存器进行访问,如数据寄存器、状态寄存器、命令寄存器等。

此外,ATA标准对IDE命令也有严格定义,如用来确认驱动器的0xEC,读缓冲区的0xE4。在PIO模式中,系统将IDE命令送到命令寄存器中,读写相应的数据、状态寄存器,实现对硬盘访问和控制。
对硬盘内部数据的操作需要了解它的物理存储方式。磁头、柱面和扇区是硬盘的基本结构,而扇区是对硬盘读写的最小单位。硬盘内部的寻址方式有两种,一种是物理寻址的CHS方式,另一种是逻辑寻址的LBA方式。物理寻址CHS方式是通过柱面、磁头和扇区号来确定唯一的存储单位,较为繁琐。而逻辑寻址方式是采用线性映射方法,从物理结构到逻辑块编号的映射关系如下:
LBA=(柱面编号×磁头数+磁头号)×扇区数+扇区编号-1
采用这种方法,主机不用知道硬盘的物理结构,就能直接对目标扇区进行寻址。
根据前面的阐述,编制I/O控制层的控制程序,可对IDE控制寄器进行查询、设置和逻辑寻址,实现对指定扇区的读写。图2是读一个扇区数据的流程图,写扇区的方法和它类似,区别只是在于传送指令和数据流动方向不同。此外,在检测状态寄存器的时候,最好加上超时判断,防止程序陷入死循环。

3 逻辑映射层控制标准及实现
3.1 关于FAT标准
由于希望ARM系统对硬盘的读写操作能与主流操作系统共享,该部分软件是根据与Windows相兼容的FAT标准进行编制。用户也可以根据实际情况,把该设计思路推广到如Linux下的EX2等其它工作平台。