ATA 接口技术

伍红兵 沈鑫剡

摘要:目前微机中最为流行的硬盘接口的技术细节,为硬盘接口设计提供了全面的技术信息。
关键词:硬盘接口 ATA标准 IDE接口 LBA模式

1 ATA简介

  硬盘接口IDE(Integrated Drive Electronies)也称AT总线接口,是当前新型硬盘驱动器普遍采用的一种接口。它最早由Texan和Compaq公司提出,目的是把硬盘控制器嵌入到驱动器中。1988年10月,ANSI中的X3T9.2工作组的一个委员会开始讨论IDE的有关问题。1993年2月发表了该标准的3.1版本,使其成为了正式的ANSI标准,并赋予了一个新的名称--ATA(AT Attachment)。从概念上说,ATA与IDE具有基本相同的含义。
  随着软件要求的提高及硬盘驱动器技术的进步,ATA标准也在不断地改进,近几年出现了以下几个新版本。
  (1)ATA-2
  这一标准兼容ATA,并扩展了一些功能,它不仅增加了faster PIO模式和DMA模式,而且提高了即插即用性及与未来版本的兼容性。同时它还增加了一种新的寻址方式--LBA。
  (2)ATA-3
  这是最新的版本,其主要特征是:提高了稳定性,尤其是PIO mode 4的稳定性;提供了一种简单的基于口令的安全方案;更复杂的电源管理;自我监视、分析、报告技术S.M.A.R.T.,使得驱动器能警告用户一些紧急错误。ATA-3并没有定义一种更快的模式。虽然一些设备厂商推出“mode 5”的设备,但并不是指一种比ATA-2更新的PIO模式。
  (3)Ultra-ATA
  Ultra-ATA在概念上类似于Ultra-SCSI,它在目前的ATA-3标准和未来的ATA-4标准目前还未完成之间架起了一座桥梁。它增加了一种新的、高性能的模式--DMA/33,它的带宽位为33MB/s,2倍于DMA mode 2。Intel的Pentium Ⅱ芯片组和TX Pentium芯片组支持这种模式。
  值得一提的是以下几个容易混淆的名词--EIDE、Fast-ATA。EIDE(Enhanced IDE)是由Western Digital公司提出的一个用于营销的商业名称,它建立在ATA-2和ATAPI这二个事实标准之上。Fast-ATA则是为了与WD公司竞争,由Seagate和Quantum发布的名称,但它只建立在ATA-2标准之上。

2 IDE接口定义

  IDE接口的ATA标准包含信号电缆和电源线的电器特性,该标准考虑到新技术的发展,不仅适用于通用的5V逻辑,也适用于3.3V的电路逻辑。IDE电缆长度小于46cm,除DASP、PDIAG、IOCS16和SPSYNC:PSEL信号外,几乎所有信号都使用TTL电平线路收发器,IDE接口引脚定义如表1所示。

表1 IDE接口引脚定义

引脚

信号

信号描述

信号方向

引脚

信号

信号描述

信号方向

1

RSET

复位

I

2

GND


I/O

3

DD7

数据位7

I/O

4

DD8

数据位8

I/O

5

DD6

数据位6

I/O

6

DD9

数据位9

I/O

7

DD5

数据位5

I/O

8

DD10

数据位10

I/O

9

DD4

数据位4

I/O

10

DD11

数据位11

I/O

11

DD3

数据位3

I/O

12

DD12

数据位12

I/O

13

DD2

数据位2

I/O

14

DD13

数据位13

I/O

15

DD1

数据位1

I/O

16

DD14

数据位14

I/O

17

DD0

数据位0

I/O

18

DD15

数据位15

I/O

19

GND



20

N.C

未用


21

DMARQ

DMA请求

O

22

GND



23

DIOW/

写选通

I

24

GND



25

DIOR/

读选通

I

26

GND



27

IORDY

通道就绪

O

28

DPSYNC:CXEL

同步电缆选择


29

DMACK/

DMA应答

O

30

GND



31

INTRQ/

中断请求

O

32

IOCS13/

16为IO

O

33

DA1

地址1

I

34

PDIAG/

诊断完成

O

35

DA0

地址0

I

36

DA2

地址2

I

37

CS1FX/

片选0

I

38

CS3FX/

片选1

I

39

DASP/

驱动器激活

O

40

GND



3 IDE接口时序

  IDE接口有二种数据传送方式:一种是可编程I/O(PIO),另一种是DMA方式。ATA标准为PIO和DMA方式定义了三种工作模式,模式0是常用的,也是最慢的1种方式。可以从“确认驱动器”命令的返回参数中了解驱动器当前的工作模式。
  (1)通过PIO传送数据:在该方式下,CPU对控制器的访问都是通过PIO进行的,包括从控制器读取状态信息和错误信息,以及向控制器发送命令和参数,时序如图1所示。

图1 IDE接口时序(PIO模式)

  对于1个PIO数据传输,CPU置地址信号DA0、DA1、DA2、CS1FX/、CS3FX/有效后(大约70ns),DIOW/或DIOR/有效,同时,CPU或控制器把传送数据放置到数据总线上,根据数据传送方向,控制器或CPU读取数据线上的数据。操作完成后,释放数据线、地址线和IOCS16/线,这样,一个操作周期结束。
  (2)单字DMA方式:这种方式主要用于多用户系统中,在I/O操作的准备阶段,CPU可以处理其它事务,单字DMA时序如图2所示。

图2 IDE接口时序(单字DMA模式)

  当控制器数据准备好后,置DMARQ信号,启动1次DMA操作,DMA控制器以DMACK/信号作为DMA请求的应答信号,同时使DIOR/为低,完成1个数据的传输,然后控制器撤销DMARQ信号,释放数据线,准备启动下一次操作。
  (3)多字DMA方式:这种方式与单字DMA方式的操作十分相似,只是在1个字传输结束后,控制器仍然保持DMARQ信号有效,直到最后1个字传输完成。多字DMA时序如图3所示。

图3 IDE接口时序(多字DMA模式)

4 IDE寄存器及IDE命令

  IDE控制器中有2组寄存器:命令寄存器和控制寄存器。命令寄存器被用来接受命令和传送数据;控制寄存器组用作磁盘控制。这2个寄存器组用CS1FX/和CS3FX/信号区分。CS1FX/的地址范围是1F0H~1F7H,CS3FX/的地址范围是3F0H~3F7H。具体如表2所示。

表2 地址译码

信号

地址

CS1FX

CS3FX

DA2

DA1

DA0

1

0

0

0

0

1F0

1

0

0

0

1

1F1

1

0

0

1

0

1F2

1

0

0

1

1

1F3

1

0

1

0

0

1F4

1

0

1

0

1

1F5

1

0

1

1

0

1F6

1

0

1

1

1

1F7

0

1

1

1

0

3F6

0

1

1

1

1

3F7

0

1

*

*

*

未用

  目前,许多计算机配置了2个IDE接口,对于第2个IDE接口,这2个信号的地址范围分别是170H~177H和370H~377H。
  在ATA标准中以寄存器方式传送数据、命令和地址。这些寄存器除数据寄存器为16位以外,其它寄存器均为8位。PC机分配给寄存器的地址有二组,一组为1F0H~1F8H,另一组为170H~178H。通常ATA适配器采用IOQ14中断。
  (1)数据寄存器(1F0H R/W):这是一个16位PIO数据寄存器,用于对扇区的读、写和格式化操作。CPU通过该寄存器向硬盘控制寄存器写入或从硬盘控制寄存器读出扇区缓冲区的数据,如使用“REP OUTSW”或“REP INSW”指令,通过数据寄存器也可以进行DMA方式的数据传输。
  错误寄存器(1F1H R):该寄存器是1个8位的寄存器,它反映控制寄存器在诊断方式或操作方式下的错误原因。在不同方式下有不同的意义。
  ①诊断方式:硬盘控制器在加电、复位或执行驱动器诊断命令以后的工作方式。此时驱动器包含诊断码,该代码反映了诊断后的结果,如表3所示。

表3 诊断代码

代码

意义

代码

意义

10H

无错误

04H

ECC电路错

02H

控制器错

05H

控制器处理机错

03H

数据缓冲区错

8XH

从驱动器诊断代码

  ②操作方式:硬盘控制器执行除诊断命令以外的所有命令后进入该方式,如果状态寄存器的ERR=1,则该寄存器包含命令执行后的错误代码,错误寄存器的内容如表4所示。

表4 错误寄存器

D7

D6

D5

D4

D3

D2

D1

D0

BBK

UNC

MC

IDNF

MCR

ABRT

TKONF

AMNF

  BBK(Bad block detected):坏扇区
  UNC(uncorrectable data error):ECC错误;
  MC(media change):介质改变;
  IDNF(ID not found):ID没找到;
  MCR(media change requested):介质改变请求;
  ABRT(abouted command):命令放弃;
  TKONF(track 0 not found):0磁道错;
  AMNF(address mark not found):地址标志没找到。
  (2)特性寄存器(1F1H W):一般情况下不使用该寄存器,根据ATA标准它被用来设置接口的某些特性。
  (3)扇区数寄存器(1F2 R/W):它记录读、写命令的扇区数。当多扇区传输时,每完成1个扇区操作,该寄存器自动减1,直至为0。如果初值为0,则表示256。如果有错误发生,该寄存器包含已经操作成功的扇区数。
  (4)扇区号寄存器(1F3H R/W):它记录读、写和校验命令指定的起始扇区号。如果驱动器使用逻辑块寻址(LBA,logical lock address)方式,该寄存器记录逻辑扇区号的0字节。
  (5)柱面号寄存器:(1F4H 1F5H R/W):它记录读、写、校验、寻址和格式化命令指定的柱面号,ATA标准允许65536柱面,但早期的IDE控制器中只允许1024个柱面。低8位在1F4H寄存器中,高8位在1F5H寄存器中。如果是LBA寻址方式,这2个寄存器包含起始扇区的1和2字节。
  (6)驱动器/磁头寄存器(1F6H R/W):它记录读、写、校验、寻道和格式化命令指定的驱动器号、磁头号和寻址方式。其定义如表5所示。

表5 驱动器/磁头寄存器定义

D7

D6

D5

D4

D3

D2

D1

D0

1

L

1

DRV

HS3

HS2

HS1

HS0

  HS0~HS3(磁头选择):在LBA方式中,是逻辑扇区号的高4位。
  DRV(驱动器选择):0选择主驱动器,1选择从驱动器。
  L(LBA方式):L=1,置驱动器为LBA模式;L=0,置驱动器为CHS模式。
  (7)状态寄存器(1F7H R):它反映硬盘驱动器执行命令后的状态,读该寄存器要清除中断请求信号,如果要避免清除中断,可以读辅助状态寄存器3F6H,这2个寄存器的内容完全相同,其定义如表6所示。

表6 状态寄存器定义

D7

D6

D5

D4

D3

D2

D1

D0

BSY

DRDY

DWF

DSC

DRQ

CORR

IDX

ERR

  BSY:驱动器忙;
  DRDY:驱动器准备好;
  DWF:驱动器失败;
  DSC:寻道结束;
  DRQ:请求服务,驱动器请求通过寄存器与处理器交换1个字节数据;
  CORR:当可以纠正的读错误发生时,该位置1,数据传输继续进行;
  IDX:收到索引信号;
  ERR:命令执行出错。
  命令寄存器(1F7H W):该寄存器接收处理器输出的HDC命令,命令格式和含义如表7所示。其中12种是强制性的(M),其它是选择性的(O)。有些命令有2个操作码,后1个是早期操作码,有的驱动器上仍在使用,如CONNER驱动器。

表7 命令代码

命令名

代码

O/M

命令名

代码

O/M

承认介质改变

DBH

O

长读(长读-禁止重试)

22H,23H

M

启动

DCH,DDH

O

扇区读校验(禁止重试)

40H,41H

M

检查电源模式

98H,E5H

O

复位

E7H

O

门锁

DEH

O

恢复驱动器状态

EAH

O

开锁

DFH

O

寻道

7XH

M

驱动器诊断

90H

M

设置特性参数

EFH

O

格式化磁道

50H

M

设置多扇区模式

C6H

O

确认驱动器

ECH

O

设置休眠模式

99H,E6H

O

空闲

97H,E3H

O

设置准备模式

96H,E2H

O

立即进入空闲

95H,E1H

O

立即进入准备模式

94H,E0H

O

初始化驱动器参数

91H

M

写扇区缓冲区

E8H

O

预补偿

1XH

M

DMA写(DMA写-禁止重试)

CAH,CBH

O

读扇区缓冲区

E4H

O

多扇区写

C5H

O

DMA读(DMA读-禁止重试)

C8H,09H

O

部分写

E9H

O

读驱动器状态

E9H

O

写扇区(写扇区-禁止重试)

30H,31H

M

多扇区读

C4H

O

长写(长写-禁止重试)

32H,33H

M

读扇区(读扇区-禁止重试)

20H,21H

M

写校检

3CH

O

  辅助状态寄存器(3F6H R):它包含与状态寄存器相同的内容,但读该寄存器时不会清除中断请求信号。
  硬盘控制寄存器(3F6H W):该寄存器定义如表8所示。

表8 硬盘控制寄存器

D7

D6

D5

D4

D3

D2

D1

D0

-

-

-

-

1

SRST

IEN/

0

  SRST:软件复位,当该位为1,复位驱动器。
  IEN/:中断允许位,该位为0,允许中断。
  驱动器地址寄存器(3F7H R):该寄存器包含命令执行后的某些信息,它与软盘驱动器共享,D7位是软盘驱动器的更换磁盘位。寄存器的所有位都是负逻辑。其定义如表9所示。

表9 驱动器地址寄存器

D7

D6

D5

D4

D3

D2

D1

D0

-

WTG/

HS3/

HS2/

HS1/

HS0/

DS1/

DS0/

  WTG/:写操作门控信号;
  HS3/~HS0/:当前选择头号的反码;
  DS1/:该位为0,选从驱动器;
  DS0/:该位为0,选主驱动器。

5 硬盘的编址方式

  ATA标准允许65536个柱面,每个扇区512B。扇区寻址有2种方式:物理寻址方式和逻辑寻址方式。
  物理寻址方式(CHS方式):用柱面、磁头和扇区号表示1个特定的扇区。起始扇区是0磁道、0磁头、1扇区,接下来是2扇区,直到E0F扇区,接下来是同一柱面1头、1扇区……。
  逻辑地址方式(LBA方式):对于参数寄存器来说,其柱面值最大为65536,磁头数最大为16,扇区最大为255。因此参数寄存器可支持的最大磁盘容量为65536*16*255=13.69GB。而BIOS所能支持的最大值分别为1024、255、63,支持的最大容量为1024*255*63=8.4GB。
  IDE接口对磁盘的容量限制是由BIOS和参数寄存器二者结合产生的。因此柱面、磁头、扇区数被限制在1024、16、63,最大只能支持1024*16*63=528MB。采用逻辑块方式寻址可以突破528MB的容量限制。该方式以28位的宽度可寻址到228=268435455块扇区,容量达137GB。如表10所示。

表10 LBA编址

寄存器名

D7

D6

D5

D4

D3

D2

D1

D0

起始扇区寄存器(1F3H)

LBA7

LBA6

LBA5

LBA4

LBA3

LBA2

LBA1

LBA0

柱面号低字节寄存器(1F4H)

LBA15

LBA14

LBA13

LBA12

LBA11

LBA10

LBA9

LBA8

柱面号高字节寄存器(1F5H)

LBA23

LBA22

LBA21

LBA20

LBA19

LBA18

LBA17

LBA16

驱动器/磁头号寄存器(1F6H)

1

LBA

1

DRV

LBA27

LBA26

LBA25

LBA24

  逻辑块地址与物理地址的关系为:LBA地址=(柱面号*磁头数+磁头号)*扇区数+扇区数-1
  采用LBA方式寻址,没有磁头和磁道的转换操作,在访问连续扇区时,操作速度比物理地址方式要快。
  LBA寻址方式虽然需要BIOS做些修改,但它与Microsoft和IBM的INT13功能扩展规范是兼容的。为了能够用LBA方式存取大于528MB的硬盘,IDE提供了二种方式供主机系统选择,这二种方式均在CMOS中设置。
  第1种方式称为自动配置,这主要是向那些不用BIOS存取磁盘的操作系统(如Netware和UNIX)提供的。它运用标准DPT(磁盘参数表)从IDE驱动器上获得有关驱动器容量的信息传向操作系统。
  第2种方式是为DOS和WINDOWS设计的,称为自动转换。在CMOS设置中选择这种类型、主机加电初始化时,BIOS会创建1张EDPT(增强型磁盘参数表)。EDPT表包含2组驱动器参数:一组来自Identify命令获取的驱动器信息;另一组则是BIOS给操作系统的,这些信息不是驱动器返回信息的简单拷贝,它还要做些转换。根据Identify命令返回的信息,BIOS将实际的CHS转换成IDE的CHS或者转换成LBA的CHS,能够支持的最大磁盘容量为8.4GB,而且BIOS改动最小。

6 接口设计

  由于IDE驱动器的控制器包含在驱动器的内部,使得IDE接口设计比较简单。接口卡除了提供IDE接口所必需的片选信号和控制信号,还要提供控制对硬盘和软盘共享的I/O端口3F7H进行访问所必需的逻辑。图4、图5为1个具有缓冲的IDE硬盘接口的电路设计。

图4 具有缓冲的IDE硬盘接口的电路

图5 D7控制逻辑

伍红兵(南京工程兵工程学院计算机教研室210007)
沈鑫剡(南京工程兵工程学院计算机教研室210007)

参考文献

[1]Schmidt F.The SCSI Bus and IDE Interface.AD- DISON-WESLEY,19932 张载鸿.微机接口技术教程.北京:清华大学出版社,1992

收稿日期:1999-12-11