1 / 5
文档名称:

AT硬盘控制器编程.doc

格式:doc   大小:864KB   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

AT硬盘控制器编程.doc

上传人:260933426 2022/3/13 文件大小:864 KB

下载得到文件列表

AT硬盘控制器编程.doc

相关文档

文档介绍

文档介绍:AT硬盘控制器编程
由Hi_Cracker整理自赵炯老师的《Linux内核完全注释》 ***@whu
1,AT 硬盘接口寄存器
下面对各端口寄存器进行详细说明。
◆数据寄存器(HD_DATA,0x1f0)
这是一对16 位高速PIOAT硬盘控制器编程
由Hi_Cracker整理自赵炯老师的《Linux内核完全注释》 ***@whu
1,AT 硬盘接口寄存器
下面对各端口寄存器进行详细说明。
◆数据寄存器(HD_DATA,0x1f0)
这是一对16 位高速PIO 数据传输器,用于扇区读、写和磁道格式化操作。CPU 通过该数据寄存器向硬盘写入或从硬盘读出1个扇区的数据,也即要使用命令'rep outsw'或'rep insw'重复读/写cx=256 字。
◆错误寄存器(读)/写前预补偿寄存器(写)(HD_ERROR,0x1f1)
在读时,该寄存器存放有8 位的错误状态。但只有当主状态寄存器(HD_STATUS,0x1f7)的位0=1时该寄存器中的数据才有效。执行控制器诊断命令时的含义与其它命令时的不同。见下表所示。
在写操作时,该寄存器即作为写前预补偿寄存器。它记录写预补偿起始柱面号。对应于与硬盘基本参数表位移0x05 处的一个字,需除4 后输出。
◆扇区数寄存器(HD_NSECTOR,0x1f2)
该寄存器存放读、写、检验和格式化命令指定的扇区数。当用于多扇区操作时,每完成1 扇区的操作该寄存器就自动减1,直到为0。若初值为0,则表示传输最大扇区数256。
◆扇区号寄存器(HD_SECTOR,0x1f3)
该寄存器存放读、写、检验操作命令指定的扇区号。在多扇区操作时,保存的是起始扇区号,而每完成1 扇区的操作就自动增1。
◆柱面号寄存器(HD_LCYL,HD_HCYL,0x1f4,0x1f5)
该两个柱面号寄存器分别存放有柱面号的低8 位和高2 位。
◆驱动器/磁头寄存器(HD_CURRENT,0x1f6)
该寄存器存放有读、写、检验、寻道和格式化命令指定的驱动器和磁头号。其位格式为101dhhhh。其中101 表示采用ECC 校验码和每扇区为512 字节;d 表示选择的驱动器(0 或1);hhhh 表示选择的磁头。
◆主状态寄存器(读)/命令寄存器(写)(HD_STATUS/HD_COMMAND,0x1f7)
在读时,对应一个8 位主状态寄存器。反映硬盘控制器在执行命令前后的操作状态。各位的含义见下表所示。
当执行写操作时,该端口对应命令寄存器,接受CPU 发出的硬盘控制命令,共有8 种命令,下表所示。其中最后一列用于说明相应命令结束后控制器所采取的动作(引发中断或者什么也不做)。
表中命令码字节的低4 位是附加参数,其含义为:
R是步进速率。R=0,则步进速率为35us;R=1 ,以此量递增。程序中默认R=0。
L是数据模式。L=0 表示读/写扇区为512 字节;L=1 表示读/写扇区为512 加4 字节的ECC 码。程序中默认值是L=0。
T是重试模式。T=0 表示允许重试;T=1 则禁止重试。程序中取T=0。
◆硬盘控制寄存器(写)(HD_CMD,0x3f6)
该寄存器是只写的。用于存放硬盘控制字节并控制复位操作。其定义与硬盘基本参数表的位移0x08处的字节