文章目录
- IDE 与 SATA
- 硬盘分区表结构
- 硬盘控制器主要端口寄存器
- data 寄存器
- Error && Features
- Error
- Features
- Sector count
- LBA low | mid | high
- device 寄存器
- Status
- Command
IDE 与 SATA
很久以前,硬盘控制器和硬盘是分开的,后面开发了一个新接口,这才将硬盘控制器和硬盘整合到一起,这样接口称为集成设备电路(Integrated Drive Electronices, IDE)。
IDE接口和SATA接口:
IDE(并口)硬盘 和 SATA(串口)硬盘:
PATA 接口线缆,也称 IDE 线,一条 IDE 线上可以挂在两块硬盘,一个主盘(Master),一个从盘(Slave):
一个主板支持这样的 4 块 IDE(PATA)硬盘,所以主板提供应两个 IDE 插槽。这两个 IDE 插槽分别命名为 IDE0 和 IDE1。也将 IDE0 称为 Primary 通道,将 IDE1 称为 Secondary 通道,它们都是通道。每个通道上分别有主盘和从盘。
Tips:也有可能只有一个 IDE 插槽,甚至不支持 IDE 插槽,这样就要看主板能力了。
SATA 接口线缆:
硬盘分区表结构
偏移 | 长度 | 描述 |
---|---|---|
0 | 1 | 状态(08H 可引导、00H 不可引导、其它 不合法) |
1 | 1 | 起始磁头号 |
2 | 1 | 起始扇区号(仅用了低 6 位,高 2 位为起始柱面号的第 8,9 位) |
3 | 1 | 起始柱面号的低 8 位 |
4 | 1 | 分区类型(System ID) |
5 | 1 | 结束磁头号 |
6 | 1 | 结束扇区号(仅用了低 6 位,高 2 位为结束柱面号的第 8,9 位) |
7 | 1 | 结束柱面号的低 8 位 |
8 | 4 | 起始扇区的 LBA |
12 | 4 | 扇区数目 |
硬盘控制器主要端口寄存器
data 寄存器
- 宽度:16位
- 在读硬盘时,硬盘准备好数据后,硬盘控制器将其放在内部缓冲区中,不断读此寄存器便是读出缓冲区中的数据。
- 在写硬盘时,我们要把数据源源不断地输送到此端口,数据便被存入到缓冲区里,硬盘控制器发现这个缓冲区中有数据了,便将此处的数据写入相应的扇区中。
Error && Features
Error
- 使用场景:读
- 宽度:8位
- 只在读取硬盘失败时有用,里面记录失败的信息,尚未读取的扇区保存在
Sector count
寄存器中。
Features
- 使用场景:写
- 宽度:8位
- 写硬盘时,有些命令需要指定额外参数,这些参数就写在
Fea ture
寄存器中。
Sector count
- 使用场景:读写
- 宽度:8位
- 用来指定待读取或写入的扇区数。硬盘每完成一个扇区,就会将此寄存器的值减 1,所以如果中间失败了,此寄存器中的值便是尚未完成的扇区。
- 8位寄存器,最大值位 255,若指定为 0,则表示操作 256 个扇区。(因为:1 0000 0000 舍去高位 1 从而保证 8 位,结果为 0)
LBA low | mid | high
- 使用场景:读写
- 宽度:8位
- LBA 有两种,一种 LBA28,另一种 LBA48,均用来描述一个扇区的地址。
- LBA low:存储 28 位地址的第 0~7 位
- LBA mid:存储第 8~15 位
- LBA high:存储第 16~23 位
- device 寄存器的低 4 位:存储第 24~27 位
device 寄存器
-
使用场景:读写
-
宽度:8位
-
图示:
Status
-
使用场景:读
-
宽度:8位
-
作用:保存硬盘的状态信息。
-
图示:
Command
- 使用场景:写
- 宽度:8位
- 作用:存储让硬盘执行的命令,将命令写入该寄存器,硬盘便开始工作了。
- 主要命令:
identify
:0xEC
硬盘识别read sector
:0x20
读扇区write sector
:0x30
写扇区