IDE控制器中的寄存器【转载】
IDE控制器中有两组寄存器:命令寄存器和控制寄存器。命令寄存器用于接收命令和传送数据,控制寄存器用作驱动器控制。表10.15列出了IDE控制器中的寄存器。
从表中可以看出以下三点:
·两组寄存器用CS0(上划线)和CSl(上划线)信号来区分,而组内的寄存器用DA2、DAl和DAO加以区分。
·表中有两个寄存器共用一个端口地址的情况:在读操作时,访问一个寄存器;而在写操作时,访问另一个寄存器。这样安排是为了节省I/O地址资源。
·控制寄存器组中实际安排的寄存器并不多,真正用作控制的只有一个。这为以后扩充保留了足够的空间。
目前,大部分主板配有两个IDE接口,对第一个IDE接口,使CS0(上划线)和CSl(上划线)有效的地址范围分别是1FOH~lF7H和
3FOH~3F7H,对第二个接口,使这两个信号有效的地址范围分别是170H~177H和370H~377H。下面具体说明各个寄存器的功能。在说明中
只给出了第一个IDE接口的端口地址,第二个IDE接口的端口地址可类推。
①数据寄存器(1FOH读/写):该寄存器用来在主机和磁盘驱动器的缓冲区之间进行8位或16位的数据交换。IOCSl6(上划线)信号有效表明进行的是16位数据传输。在进行PIO方式传输时要使用该寄存器。
②错误寄存器(1F1H读):这是一个8位的寄存器。它反映控制器在诊断方式(在加 电、复位或执行驱动器诊断命令时所处的方式)或操作方式(执
行除诊断命令以外的所有命令时所处的方式)下的错误原因。例如,在操作方式下,该寄存器的最高位为1表示访问的扇区是坏扇区,最低位为1表示地址标志没有
找到。
③特性寄存器(1 F1H写):一般情况下不使用该寄存器,根据ATA标准它被用来设置接口的某些特性。例如,在ST506控制器中,该寄存器的内容等于柱面号除以4,表示开始写预补偿的起始柱面号。
④扇区数寄存器(1F2H读/写):该寄存器记录要访问的扇区的数目。每访问一个扇区,其值自动减1。如果初值为O,则表示扇区数是256。
⑤扇区号寄存器(1F3H读/写):该寄存器记录要访问的第一个扇区的编号。如果使用LBA寻址(逻辑块寻址)方式,它记录起始逻辑扇区的逻辑地址的第O字节(第7~0位)。
⑥柱面号寄存器(1F4H,1F5H读/写):这是由两个8位寄存器组成的16位寄存器,1F4H为低字节,1F5H为高字节。它用来记录要操作
的柱面的编号。ATA标准允许多达65536个柱面。如果使用LBA寻址方式,这两个寄存器包含起始逻辑扇区的逻辑地址的第一和第二字节(第15~8位和
第23~16位)。
⑦驱动器/磁头寄存器(1F6H读/写):该寄存器记录要操作的驱动器号、磁头号和寻址方式,其定义见表10.16。
其中,HS3~HSO为磁头选择,采用LBA寻址方式时,为起始逻辑扇区的逻辑地址的第三字节的低4位(第27~24位)。该字节的高4位通常情况下为
0。DRV为驱动器选择,0表示选择主驱动器,l表示选择从驱动器。L表示采用的寻址方式,为l表示采用LBA寻址方式,为0表示采用CHS方式。
⑧状态寄存器(1 F7H读):该寄存器记录了硬盘驱动器执行命令后的状态。读该寄存器会清除未得到响应的中断请求信号。为了避免发生这种情况,可以读取辅助状态寄存器3F6H,这两个寄存器的内容完全相同。该寄存器的格式见表10.17。
其中,BSY为驱动器忙,DRDY为驱动器准备好,DWF为驱动器写失败,DSC为寻道结束,DRQ为请求服务,CORR为数据传输将继续进行(在出现了可以纠正的读错误的情况下),IDX为收到索引信号,ERR为命令执行出错。
⑨命令寄存器(1F7H写):该寄存器接收并保存发送到控制器的命令。命令一发送到命令寄存器中,该命令就会开始执行。
⑩辅助状态寄存器(3F6H读):它与状态寄存器的内容相同,但读该寄存器时不会清除中断请求信号。
⑪ 设备控制寄存器(3F6H写):该寄存器的定义见表10.18。
SRST为软件复位,该位为l,复位硬盘驱动器。当这一位变为0,相应的硬盘驱动器就会执行启动过程。IEN(上划线)为中断允许位,该位为0,允许中断,反之,中断被禁止。
⑫ 驱动器地址寄存器(3F7H读):在ATA-1标准中该寄存器用来保存命令执行后的某些信息。在ATA-2标准中没有定义该寄存器。