IO端口 | 端口用途 | ||
Primary通道 | Secondary通道 | 读操作时 | 写操作时 |
0x1F0 | 0x170 | Data | Data |
0x1F1 | 0x171 | Error | Feature |
0x1F2 | 0x172 | Sector count | Sector count |
0x1F3 | 0x173 | LBA low | LBA low |
0x1F4 | 0x174 | LBA mid | LBA mid |
0x1F5 | 0x175 | LBA high | LBA high |
0x1F6 | 0x176 | Device | Device |
0x1F7 | 0x177 | Status | Command |
Control Block registers | |||
0x3F6 | 0x376 | Alternate status | Device Control |
- Data寄存器为16位,其他寄存器为8位
- LBA28(Logical Block Address)模式:用28位描述一个扇区的地址,每个扇区512字节,最大支持128GB,从0开始编号来定位区块,第一区块LBA=0,第二区块LBA=1,依此类推。还有LBA48模式,最大可寻址范围是2的48次方。
- Command寄存器写入命令硬盘就开始工作,命令如下:
identify:0xEC,硬盘识别
read sector:0x20,读扇区
write sector:0x30,写扇区
从下到上依次为0~7位
硬盘操作顺序:
- 选择通道,往该通道的sector count寄存器写入待操作的扇区。
- 往该通道上的三个LBA寄存器写入扇区起始地址的低24位。
- 往Devcie寄存器写入LBA地址的24~27位,并置第6位为1,使其为LBA模式,设置第4位,选择操作的硬盘(主盘或从盘)。
- 往该通道的Command寄存器写入操作命令。
- 读取该通道的Status寄存器,判断硬盘工作是否完成。
- 如果以上步骤是读硬盘,进入下一个步骤,否则,完工。
- 将硬盘数据读出