- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AT硬盘控制器编程
AT硬盘控制器编程
由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 为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)
该寄存器是只写的。用于存放硬盘控制字节并控制复位操作。其定义与硬盘基本参数表的位移0x08处的字节说明相同,见下表所示。
2 ,AT 硬盘控制器编程
在对硬盘控制器进行操作控制时,需要同时发送参数和命令。其命令格式见下表所示。首先发送6 字节的参数,最后发出1 字节的命令码。不管什么命令均需要完整输出这7 字节的命令块,依次写入端口0x1f1 -- 0x1f7。
首先 CPU 向控制寄存器端口(HD_CMD)0x3f6 输出控制字节,建立相应的硬盘控制方式。方式建立后即可按上面顺序发送参数和命令。步骤为:
检测控制器空闲状态:CPU 通过读主状态寄存器,若位7 为0,表示控制器空闲。若在规定时间内控制器一直处于忙状态,则判为超时出错。
检测驱动器是否就绪:CPU 判断主状态寄存器位6 是否为1 来看驱动器是否就绪。为1 则可输出参数和命令。
输出命令块:按顺序输出分别向对应端口输出参数和命令。
CPU 等待中断产生:命令执行后,由硬盘控制器产生中断请求信号(IRQ14 -- 对应中断int46)或置控制器状态为空闲,表明操作结束或表示请求扇区传输(多扇区读/写)。
检测操作结果:CPU 再次读主状态寄存器,若位0 等于0 则表示命令执行成功,否则失败。若失败则可进一步查询错误寄存器(HD_ERROR)取错误码。
3,硬盘基本参数表
中断向量表中,int 0x41 的中断向量位置(4 * 0x41 =0x0000:0x0104)存放的并不是中断程序的地址而是第一个硬盘的基本参数表,见下表所示。对于100%兼容的BIOS 来说,这里存放着硬盘参数表阵列的首地址F000h:E401h。第二个硬盘的基本参数表入口地址存于int 0x46 中断向量中。
4,硬盘设备号命名方式
硬盘的主设备号是3。其它设备的主设备号分别为:
1-内存,2-磁盘,3-硬盘,
您可能关注的文档
最近下载
- 《红楼梦》中的文化娱乐与艺术表达.pptx VIP
- TZHYL-智慧医院医用耗材 SPD 供应链风险控制指南.pdf VIP
- 数据挖掘知到课后答案智慧树章节测试答案2025年春中国人民解放军国防科技大学.docx VIP
- VDA6.3潜在供方审核P1.xlsx VIP
- 电力公司线路工程资料移交清单 .pdf VIP
- 黑龙江 2023年兽医实验室考试:兽医实验室技术理论真题模拟汇编(共285题).doc VIP
- 2025至2030年中国商务服务市场调查研究及行业投资潜力预测报告.docx
- 第10课 相互了解 相互尊重 教案 人民版中华民族大家庭.pdf VIP
- 2025年七年级数学(上)第1单元《有理数易错题练习》及答案 .pdf VIP
- GB_T 20394-2019 体育用人造草.docx VIP
文档评论(0)