【我所認知的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阶段。
分享到:
相关推荐
2. **BIOS函数原型**:`bios.h`可能会提供一些函数原型,比如`bootload()`或`detect_hardware()`,这些都是与BIOS启动流程相关的函数。 3. **硬件配置结构体**:BIOS会读取CMOS(Complementary Metal-Oxide-...
根据给定的文件信息,我们可以深入探讨Optiplex常见机型最新BIOS的中英文对照表中的关键知识点。BIOS(Basic Input/Output System)是计算机启动时运行的第一个软件,负责初始化硬件并提供基本的硬件控制功能。对于...
IDE Detect Time Out是一个重要的BIOS设置,它控制着IDE设备的检测超时时间。在这个部分中,我们可以设置IDE设备的检测超时时间。 二十三、ATA(PI)80Pin Cable Detect(设置此项可以选择检测ata pi 80pin电缆的方法...
戴尔OPTIPLEX380商务台式机BIOS设置中文说明详细介绍了戴尔OPTIPLEX380商务台式机的BIOS设置,包括系统信息、内存信息、处理器信息、PCI信息、日期/时间、引导顺序、内置或USB软盘、机载SATA硬盘、机载网络控制器、...
这个库提供了丰富的功能,帮助开发者根据用户所使用的设备调整网站布局和交互,以提供更好的用户体验。 Mobile_Detect库的核心在于它能够检测多种设备特征,包括但不限于设备制造商(如Apple、Samsung)、操作系统...
### 硬盘IDE接口定义详解 在计算机硬件领域中,IDE(Integrated Drive Electronics)是一种早期的硬盘接口标准,用于连接硬盘驱动器到主板。它不仅支持硬盘驱动器,还能支持光驱等其他存储设备。IDE接口通过扁平...
} elseif ($detect->isTablet()) { // 加载平板设备的CSS和脚本 } else { // 默认的桌面设备处理 } ``` Mobile-Detect-2.8.12版本的压缩包中可能包含了类文件、示例代码和其他辅助资源,帮助开发者快速理解和集成...
- **IDE Detect Time Out (Seconds)**:设置检测IDE设备超时时间。 - **ATA (PI) 80pin Cable Detection**:检测是否使用了80针的ATA电缆。 - **Primary and Secondary IDE Master and Slave Settings**: - **...
《Detect It Easy 2.01:便捷的可执行文件分析工具》 在信息技术领域,安全分析和恶意软件检测是至关重要的环节。Detect It Easy(简称DIE)是一款专为IT专业人士设计的实用工具,其2.01版本进一步提升了在识别和...
include('sstn/mobile_device_detect.php'); mobile_device_detect(false,true,true,'m/index.php',false); 2、上传附件中的mobile_device_detect.php到sstn目录。没有就在根目录新建一个。 说明。代码中的"m...
《DetectitEasy:深入解析EXE程序检测工具》 在信息技术领域,理解并分析EXE(可执行)程序是至关重要的。DetectitEasy是一款专为此目的设计的强大工具,它能够帮助用户快速识别出EXE程序是由哪种编程语言和开发...
使用Detect.js库非常简单,只需在项目中引入Detect.js文件,然后调用其提供的API即可获取到所需的设备信息。例如,通过`detect.browser()`可以获取浏览器信息,`detect.os()`则可获取操作系统信息。这些信息对于实现...
"Encode-Detect-1.01.tar.gz" 是一个压缩包文件,通常在Linux或Unix-like操作系统中使用,用于集合多个文件或目录并压缩成一个单一的可传输或存储的文件。这种格式结合了tar(归档)和gzip(压缩)两个工具的功能,...
ssd_detect.pyssd_detect.pyssd_detect.pyssd_detect.pyssd_detect.py
DetectItEasy 32位 3.01
Mobile-Detect的主要功能在于其强大的设备识别能力。它不仅能够识别各种智能手机和平板电脑,如iPhone、iPad、Android设备等,还能区分不同的操作系统,如iOS、Android、Windows Phone等。这使得开发者可以针对性地...
"Dell BIOS 英中文对照" Dell BIOS 英中文对照是指在 Dell 机型中 BIOS 设置的英中文对照表,该对照表涵盖了机型的各种设置项目,包括系统信息、内存信息、CPU 信息、插槽信息、日期和时间、驱动器设置、SATA 操作...
标题中的“SD Detect”指的是一个小程序,专门用于测试SD卡的插入和拔出检测功能。这个程序是由slyzhang开发的,目的是在不依赖特定板级支持包(BSP,Board Support Package)的情况下,利用Windows CE(Wince)系统...
为了应对这一挑战,开发者们推出了Log4j2检测工具,如"Log4j2_detect_gui.zip",本文将详细介绍这款工具的使用及Log4j漏洞的相关知识。 首先,我们要明白Log4j2Detect是一款用于检测Log4j漏洞的图形化界面工具,由...
Detect It Easy简称Die,是一款专业查壳工具,比PEID强大得多,能查一次查到底。并支持超大文件读取,其他查壳工具无法打开的程序,这个都能读取。虽然没有PEID出名,但是相当的强大,完全可以替代PEID。 Detect ...