曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6791|回复: 0
打印 上一主题 下一主题

[存储] IDE 硬盘读写简介

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-8-9 01:01:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对 IDE 接口来说,它有两个通道:IDE0 和 IDE1 。每个通道可以连接两个设备,分别为 Master 和 Slave。一个 PC 最多可接 4 个 IDE 设备。

在 PC 中,IDE0 通道的 I/O 端口地址是 0x1F0~0x1F7 以及 0x376~0x377 。通过读写这些端口地址就能与 IDE 硬盘进行通信。下面是这些端口的使用说明:

Task File Registers 命令寄存器组
I/O 地址从硬盘读数据写数据到硬盘
0x1F0数据寄存器数据寄存器
0x1F1错误寄存器(只读寄存器)特征寄存器
0x1F2扇区计数寄存器扇区计数寄存器
0x1F3扇区号寄存器或LBA块地址0~7扇区号或LBA块地址0~7
0x1F4磁道数低8位或LBA块地址8~15磁道数地8位或LBA块地址8~15
0x1F5磁道数高8位或LBA块地址8~15磁道数高8位或LBA块地址8~15
0x1F6驱动器/磁头或LBA块地址24~27驱动器/磁头或LBA块地址24~27
0x1F7状态寄存器命令寄存器

Control/Diagnostic Registers 控制/诊断寄存器
I/O 地址
0x3f6交换状态寄存器(制度寄存器)设备控制寄存器(复位)
0x3f7驱动器地址寄存器

以读取 1000 号逻辑扇区开始的 8 个扇区为例:

第 0x1f3~0x1f6  4个字节的端口地址用来写入 LBA 地址,那么 1000 号逻辑扇区的 LBA 地址为 0x000003E8 ,所以我们需要往 0x1F3, 0x1F4 里写入 0x00,往 0x1F5 写入 0x03,往 0x1F6 写入 0xE8 。

0x1F2 这个地址用来写入命令所需要读写的扇区数,比如读取 8 个扇区就写入 8 。

0x1F7 这个地址用来写入要执行的操作的命令码,对于读操作,命令字为 0x20 。

综合起来,执行的命令序列为:
out 0x1F3, 0x00
out 0x1F4, 0x00
out 0x1F5, 0x03
out 0x1F6, 0xE8
out 0x1F2, 0x08
out 0x1F7, 0x20
在硬盘收到这些命令序列后,它就会执行相应的操作,并且将数据读取到事先设置好的内存地址中,该内存地址也是通过类似的命令方式设置。

上面作为一种示例是比较简单的一种情况,实际情况要复杂得多,驱动程序要考虑硬件状态,比如忙碌或读取出错等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 17:05 , Processed in 0.061469 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表