【我所認知的BIOS】—>IDE detect
By LightSeed
2009-9-3
1、什么是 IDE?
IDE是Integrated Device Electronics的简称,是一种硬盘的传输接口,它有另一个名称叫做ATA(AT Attachment),这两个名词都有厂商在用,指的是相同的东西。IDE的规格后来有所进步,而推出了EIDE(Enhanced IDE)的规格名称,而这个规格同时又被称为Fast ATA。所不同的是Fast ATA是专指硬盘接口,而EIDE还制定了连接光盘等非硬盘产品的标准。而这个连接非硬盘类的IDE标准,又称为ATAPI接口。而之后再推出更快的接口,名称都只剩下ATA的字样,像是Ultra ATA、ATA/66、ATA/100等。图1是一般主板上的IDE接口

图1主板IDE接口
早期的IDE接口有两种传输模式,一个是PIO(Programming I/O)模式,另一个是DMA(Direct Memory Access)。虽然DMA模式系统资源占用少,但需要额外的驱动程序或设置,因此被接受的程度比较低。后来在对速度要求愈来愈高的情况下,DMA模式由于执行效率较好,操作系统开始直接支持,而且厂商更推出了愈来愈快的DMA模式传输速度标准。而从英特尔的430TX芯片组开始,就提供了对Ultra DMA 33的支持,提供了最大33MB/sec的的数据传输率,以后又很快发展到了ATA 66,ATA 100以及迈拓提出的ATA 133标准,分别提供66MB/sec,100MB/sec以及133MB/sec的最大数据传输率。值得注意的是,迈拓提出的ATA 133标准并没能获得业界的广泛支持,硬盘厂商中只有迈拓自己才采用ATA 133标准,而日立(IBM),希捷和西部数据则都采用ATA 100标准,芯片组厂商中也只有VIA,SIS,ALi以及nViidia对次标准提供支持,芯片组厂商中英特尔则只支持ATA 100标准。
各种IDE标准都能很好的向下兼容,例如ATA 133兼容ATA 66/100和Ultra DMA33,而ATA 100也兼容Ultra DMA 33/66。
要特别注意的是,对ATA 66以及以上的IDE接口传输标准而言,必须使用专门的80芯IDE排线,其与普通的40芯IDE排线相比,增加了40条地线以提高信号的稳定性。
以上这些都是传统的并行ATA传输方式,现在又出现了串行ATA(Serial ATA,简称SATA),其最大数据传输率更进一步提高到了150MB/sec,将来还会提高到300MB/sec,而且其接口非常小巧,排线也很细,有利于机箱内部空气流动从而加强散热效果,也使机箱内部显得不太凌乱。与并行ATA相比,STAT还有一大优点就是支持热插拔。图2是一般主板上的SATA接口

图2主板SATA接口
在选购主板时,其实并无必要太在意IDE接口传输标准有多快,其实在ATA 100,ATA 133以及SATA 150下硬盘性能都差不多,因为受限于硬盘的机械结构和数据存取方式,硬盘的性能瓶颈是硬盘的内部数据传输率而非外部接口标准,目前主流硬盘的内部数据传输率离ATA 100的100MB/sec都还差得很远。所以要按照自己的具体需求选购。
2、IDE硬盘的一些知识
2.1 端口的说明
计算机主机对IDE接口硬盘的控制是通过硬盘控制器上的二组寄存器实现。一组为命令寄存器组(Task File Registers),I/O的端口地址为1F0H~1F7H,其作用是传送命令与命令参数,如表1所示。另一组为控制/诊断寄存器(Control/Diagnostic Registers),I/O的端口地址为3F6H~3F7H,其作用是控制硬盘驱动器,如表2所示。

表2 IDE驱动器/磁头寄存器
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
1
|
L
|
1
|
DRV
|
HS3
|
HS2
|
HS1
|
HS0
|
状态寄存器:保存硬盘控制器命令执行后的状态和结果,如表5所示。

2.2 IDE硬盘上的跳线
让我们看一下如何安装和设置IDE硬盘。硬盘上有标准电源插座和40针的数据线接口,连接数据线时请把色线和接口上的第一根针对应。

图3 一块硬盘的正面图
这是一种硬盘的设置说明,4个跳线的含义是这样的:
PK:当这个跳线短接时,磁头被固定在安全位置,防止运输过程中磁头的移动。
CS:Cable Select,此方式利用经过特殊处理的数据线来设定主盘和副盘,第28根数据线为选择线,有则为主盘,无则为副盘。
DS:当这个跳线短接时,硬盘作为主盘 (Master)。
SP:当这个跳线短接时,硬盘作为副盘 (Slave)。
硬盘的跳线一般不会超出这四种,有些硬盘只采用一个跳线来设置主盘或副盘,比如,当短接时作主盘,断开时作副盘。
(注:以上资料均来自网络,由我整理如有侵权的话,请联系Lightseed@163.com,我会及时删除。主要是为了说明IDE的完整性故加在这里。)
3、怎么来判断IDE硬盘存在?
3.1 Detect IDE设备的困难
判断IDE的存在与否其实是一个很复杂的过程。不管是在AWxxx的code还是在AMx的code都是一样。不能漏判已经连接在主板上的IDE设备(包括ATAPI设备),也不能因为担心漏判而印象detect IDE设备的速度。有点矛盾哦,所以一般都是取两者的中间点的。
3.2 Detect的技巧
我看了一下detect IDE设备在网上有其他的方法,(因为本身设备如果不存在的话,那么如果你连续多次去操作设备肯定是会出问题的,所以就可以判断设备是否存在了。只是大家方法不太一样罢了。)那么我用AWxxx的方法来做。最核心的地方是,当我选择了相应的IDE channel上的设备后,读取1X6H的数值回来与本身写入1X6H的寄存器做比较,如果相同那么就算是该IDE drive存在,反之亦反。
图4是IDE detect的核心流程,当然了在实际的bios code中是不会这么简单的啦。也许不能说是最复杂的部分,但是起码是比较复杂的部分了。

图4 一个简单的IDE detect的流程图
3.4通过IO的方式获取硬盘rom上的信息
在IDE detect的过程中,我们为了防止自己由于可能是偶然的原因第一次判断到IDE 设备是存在的,就再加了一层保险。当我们detect到了IDE设备了后,顺便就把它的identify information一起读取出来了。(因为这个identify information实在是太重要了,处处都要用到,肯定是要从drive里读取出来的。)假如在读取的过程中出了问题,那么我们再在这里做一次确认,经过确认有可能IDE drive是不存在的哦。这样我们就一箭双雕了,同样是要读identify information,还给detect加了一层保险。
3.5 ATA 设备和ATAPi的区分
在IDE设备中,有ATA设备和ATAPi设备之别。比如说,我们的IDE disk,和IDE cdrom。这个我们可以通过对IDE 设备下不同的命令来判断设备的反应。比如说,我们先假设该设备是ATA设备,那么我们就下0ECH命令来读取该设备的identify information,如果设备能够正常准备好数据供我们读取,那么说明该设备必定是ATA设备。反之,我们再从新下ATAPi的读取identify information的命令。通常情况下,就应该能够正确返回数据了,否则就是说连ATAPi也没有反应了,那么我们就可以认为这个channel上的这个master/slave上是没有IDE设备的。也映衬了3.4当中说论述的结果。
4、IDE detect 实例
;[]---------------------------------------------------------[]
;Input : BL = Drive Number
; DX = 1X0h port
;Output : ZF = equal or not
;Note : the function of this rutine is check IDE device
;[]---------------------------------------------------------[]
Confirm_IDE proc near
mov ah,0a0h ;set master
test bl,1 ;slave?
jz short Is_Master_Drive
mov ah,0b0h ;set slave
Is_Master_Drive:
add dl,6 ;1x6h port
mov al,ah ;output value
out dx,al ;select drive
IODELAY
not al ;flush register
in al,dx ;get value of port
sub dl,6
cmp al,ah ;correctly?
ret
Confirm_IDE endp
正如我们3.4所说,为了确保万无一失,假如我们通过上面的函数判断到了IDE设备已经存在,那么就紧接着下读取identify information的命令。进一步去判断设备能否正常读取identify information,如果能,那么恭喜您检测成功了。顺便把identify information存储到相应的buffer里去吧。
下面这个函数,我们就可以利用它来测试任何一个port的任何位。比如说我们要test 某些状态位等等,就可以直接调用这个函数。
;[]---------------------------------------------------------[]
; Test_For_Port:
; ENTRY : dl = port
; ah = isolate which bits, (and),
; al = value to be compared
; EXIT : CF = 1 failure
; CF = 0 ok
; Note :
;[]---------------------------------------------------------[]
Test_For_Port proc Near
push bx
mov bx,ax ;save pattern to BX
in al,dx ;get value of port
iodelay
and al,bh ;isolate
cmp al,bl ;equte to wish
pop bx
ret
Test_For_Port endp
上面的这个函数仅仅是一个范例,当然是不够严谨的。中间其实我们还应该加上,假如第一次判断有误,那么我手动作一些延迟后再来判断一次,如果判断出错那么可以暂时认为该位是没有准备好的。(当然这些就由大家任意发挥了,如果您不加我想也是没有问题的,只是有些许的不严谨罢了。)
5、结束
以上基本就是我对IDE了解,总的来说,IDE的东西真的好多好多,而且也很复杂。上面的两个程序仅仅是对AWxxx code detect IDE缩略的介绍,实际上在BIOS的code中是很严谨的,共分9步。(不管是4.51版本还是6.00版本都是同一个算法。)而且每一步骤由于担心会误判也会有一定时间的循环。总之就是比较严谨啦。至于AMx的话,有兴趣我们再来讨论,目前还只是study阶段。
分享到:
相关推荐
Rocky Linux 8.10内核包
内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。
内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。
__UNI__DB9970A__20250328141034.apk.1
rust for minio
国网台区终端最新规范
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
一个简单的机器学习代码示例,使用的是经典的鸢尾花(Iris)数据集,通过 Scikit-learn 库实现了一个简单的分类模型。这个代码可以帮助你入门机器学习中的分类任务。
pyqt离线包,pyqt-tools离线包
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
SQL常用日期和时间函数整理及在sqlserver测试示例 主要包括 1.查询当前日期GETDATE 2.日期时间加减函数DATEADD 3 返回两个日期中指定的日期部分之间的差值DATEDIFF 4.日期格式转换CONVERT(VARCHAR(10),GETDATE(),120) 5.返回指定日期的年份数值 6.返回指定日期的月份数值 7.返回指定日期的天数数值
GSDML-V2.3-Turck-BL20_E_GW_EN-20160524-010300.xml
T_CPCIF 0225-2022 多聚甲醛.docx
《基于YOLOv8的智能仓储货物堆码倾斜预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
蚕豆脱壳机设计.zip
台区终端电科院送检文档
Y6一39一No23.6D离心通风机 CAD().zip
django自建博客app
台区终端电科院送检文档
非开挖水平定向钻机动力头装置设计.zip