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