硬盘控制器编程.pdf

硬盘控制器编程.pdf

ID:52238817

大小:711.92 KB

页数:6页

时间:2020-03-25

硬盘控制器编程.pdf_第1页
硬盘控制器编程.pdf_第2页
硬盘控制器编程.pdf_第3页
硬盘控制器编程.pdf_第4页
硬盘控制器编程.pdf_第5页
资源描述:

《硬盘控制器编程.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、AT硬盘控制器编程由Hi_Cracker整理自赵炯老师的《Linux内核完全注释》@whu1,AT硬盘接口寄存器下面对各端口寄存器进行详细说明。◆数据寄存器(HD_DATA,0x1f0)这是一对16位高速PIO数据传输器,用于扇区读、写和磁道格式化操作。CPU通过该数据寄存器向硬盘写入或从硬盘读出1个扇区的数据,也即要使用命令'repoutsw'或'repinsw'重复读/写cx=256字。◆错误寄存器(读)/写前预补偿寄存器(写)(HD_ERROR,0x1f1)在读时,该寄存器存放有8位的错误状态。但只有当主状态寄存器(HD_STATUS,0x1f7)的位0=1时该寄存器中的数据

2、才有效。执行控制器诊断命令时的含义与其它命令时的不同。见下表所示。在写操作时,该寄存器即作为写前预补偿寄存器。它记录写预补偿起始柱面号。对应于与硬盘基本参数表位移0x05处的一个字,需除4后输出。◆扇区数寄存器(HD_NSECTOR,0x1f2)该寄存器存放读、写、检验和格式化命令指定的扇区数。当用于多扇区操作时,每完成1扇区的操作该寄存器就自动减1,直到为0。若初值为0,则表示传输最大扇区数256。◆扇区号寄存器(HD_SECTOR,0x1f3)该寄存器存放读、写、检验操作命令指定的扇区号。在多扇区操作时,保存的是起始扇区号,而每完成1扇区的操作就自动增1。◆柱面号寄存器(HD_

3、LCYL,HD_HCYL,0x1f4,0x1f5)该两个柱面号寄存器分别存放有柱面号的低8位和高2位。◆驱动器/磁头寄存器(HD_CURRENT,0x1f6)该寄存器存放有读、写、检验、寻道和格式化命令指定的驱动器和磁头号。其位格式为101dhhhh。其中101表示采用ECC校验码和每扇区为512字节;d表示选择的驱动器(0或1);hhhh表示选择的磁头。◆主状态寄存器(读)/命令寄存器(写)(HD_STATUS/HD_COMMAND,0x1f7)在读时,对应一个8位主状态寄存器。反映硬盘控制器在执行命令前后的操作状态。各位的含义见下表所示。当执行写操作时,该端口对应命令寄存器,接

4、受CPU发出的硬盘控制命令,共有8种命令,下表所示。其中最后一列用于说明相应命令结束后控制器所采取的动作(引发中断或者什么也不做)。表中命令码字节的低4位是附加参数,其含义为:R是步进速率。R=0,则步进速率为35us;R=1为0.5ms,以此量递增。程序中默认R=0。L是数据模式。L=0表示读/写扇区为512字节;L=1表示读/写扇区为512加4字节的ECC码。程序中默认值是L=0。T是重试模式。T=0表示允许重试;T=1则禁止重试。程序中取T=0。◆硬盘控制寄存器(写)(HD_CMD,0x3f6)该寄存器是只写的。用于存放硬盘控制字节并控制复位操作。其定义与硬盘基本参数表的位移

5、0x08处的字节说明相同,见下表所示。2,AT硬盘控制器编程在对硬盘控制器进行操作控制时,需要同时发送参数和命令。其命令格式见下表所示。首先发送6字节的参数,最后发出1字节的命令码。不管什么命令均需要完整输出这7字节的命令块,依次写入端口0x1f1--0x1f7。首先CPU向控制寄存器端口(HD_CMD)0x3f6输出控制字节,建立相应的硬盘控制方式。方式建立后即可按上面顺序发送参数和命令。步骤为:检测控制器空闲状态:CPU通过读主状态寄存器,若位7为0,表示控制器空闲。若在规定时间内控制器一直处于忙状态,则判为超时出错。检测驱动器是否就绪:CPU判断主状态寄存器位6是否为1来看驱

6、动器是否就绪。为1则可输出参数和命令。输出命令块:按顺序输出分别向对应端口输出参数和命令。CPU等待中断产生:命令执行后,由硬盘控制器产生中断请求信号(IRQ14--对应中断int46)或置控制器状态为空闲,表明操作结束或表示请求扇区传输(多扇区读/写)。检测操作结果:CPU再次读主状态寄存器,若位0等于0则表示命令执行成功,否则失败。若失败则可进一步查询错误寄存器(HD_ERROR)取错误码。3,硬盘基本参数表中断向量表中,int0x41的中断向量位置(4*0x41=0x0000:0x0104)存放的并不是中断程序的地址而是第一个硬盘的基本参数表,见下表所示。对于100%兼容的B

7、IOS来说,这里存放着硬盘参数表阵列的首地址F000h:E401h。第二个硬盘的基本参数表入口地址存于int0x46中断向量中。4,硬盘设备号命名方式硬盘的主设备号是3。其它设备的主设备号分别为:1-内存,2-磁盘,3-硬盘,4-ttyx,5-tty,6-并行口,7-非命名管道由于1个硬盘中可以存在1--4个分区,因此硬盘还依据分区的不同用次设备号进行指定分区。因此硬盘的逻辑设备号由以下方式构成:设备号=主设备号*256+次设备号也即dev_no=(major<<8)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。