很久以前硬盘和硬盘控制器是分开的,后来业界几个老大研发出一种接口,叫IDE接口,可以将硬盘和硬盘控制器整合在一起。
把此接口使用的技术规范归纳成为全球硬盘标准,就产生了 ATA (AdvancedTechnology Attachment)。不过由于 IDE 这个名字已经叫开了,所以大家依然习惯称硬盘为 IDE 硬盘。
接口分为并行接口(PATA)和串行接口(SATA)。
以前一般的主机只支持 4 个并口硬盘,但自从出现串口硬盘后,情况就变了,支持多少块硬盘,取决于主板的能力。
图中 6 个并排的小接口都是 SATA,插槽里面呈字符 L 形。左边的长方形,里面有好多针的接口是 PATA 接口。
PATA 接口的线缆也称为 IDE 线,一个 IDE 线上可以挂两块硬盘,一个是主盘(Master),一个是从盘(Slave) 。
标有“主板插口”的那一头要插在图中 PATA 接口处。一个主板提供两个 IDE 插槽,支持 4 块 IDE(PATA)硬盘。这两个接口也是以 0 为起始编号的,一个称为 IDE0,另一个称为 IDE1。而按 ATA 的说法,这两个插槽称为通道, IDE0 叫作 Primary 通道, IDE1 叫作 Secondary 通道。
SATA也兼容PATA的编程接口。后面给出的端口号(端口:硬盘控制器上的寄存器)也将按照 PATA 这两个通道来分组给出。
端口是按照通道给出的,一个通道上的主、从两块硬盘都用这些端口号。要想操作某通道上的某块硬盘,需要单独指定(device寄存器)。
(1)选择通道,往该通道的 sector count 寄存器中写入待操作的扇区数。
Sector count 寄存器用来指定待读取或待写入的扇区数。硬盘每完成一个扇区,就会将此寄存器的值减 1,所以如果中间失败了,此寄存器中的值便是尚未完成的扇区。这是 8 位寄存器,最大值为 255,若指定为 0,则表示要操作 256 个扇区。
(2)往该通道上的三个 LBA 寄存器写入扇区起始地址的低 24位。
(3)往 device 寄存器中写入 LBA 地址的 24~27 位,并置第 6 位为 1,使其为 LBA 模式,设置第 4位,选择操作的硬盘(master 硬盘或 slave 硬盘)。
(4)往该通道上的 command 寄存器写入操作命令。
在写硬盘时,端口 0x1F7 或 0x177 的寄存器名称 command,它和 status 寄存器是同一个,读时为status;写时为command。
此寄存器用来存储让硬盘执行的命令。只要把命令写进此寄存器,硬盘就开始工作了。
在咱们的系统中,主要使用了三个命令。
(1)identify:0xEC,即硬盘识别。
(2)read sector:0x20,即读扇区。
(3)write sector:0x30,即写扇区。
(5)读取该通道上的 status 寄存器,判断硬盘工作是否完成。
(6)如果以上步骤是读硬盘,进入下一个步骤。否则,完工。
(7)将硬盘数据读出。
参考资料:
操作系统真象还原