【我所認知的BIOS】—IDE detect

news/2024/7/16 7:15:32 标签: ide, 英特尔, ibm, 希捷, output, function

【我所認知的BIOS—>IDE detect

By LightSeed

2009-9-3   

1、什么是 IDE

IDEIntegrated Device Electronics的简称,是一种硬盘的传输接口,它有另一个名称叫做ATAAT Attachment),这两个名词都有厂商在用,指的是相同的东西。IDE的规格后来有所进步,而推出了EIDEEnhanced IDE)的规格名称,而这个规格同时又被称为Fast ATA。所不同的是Fast ATA是专指硬盘接口,而EIDE还制定了连接光盘等非硬盘产品的标准。而这个连接非硬盘类的IDE标准,又称为ATAPI接口。而之后再推出更快的接口,名称都只剩下ATA的字样,像是Ultra ATAATA/66ATA/100等。图1是一般主板上的IDE接口

 

1主板IDE接口

早期的IDE接口有两种传输模式,一个是PIOProgramming I/O)模式,另一个是DMADirect Memory Access)。虽然DMA模式系统资源占用少,但需要额外的驱动程序或设置,因此被接受的程度比较低。后来在对速度要求愈来愈高的情况下,DMA模式由于执行效率较好,操作系统开始直接支持,而且厂商更推出了愈来愈快的DMA模式传输速度标准。而从英特尔430TX芯片组开始,就提供了对Ultra DMA 33的支持,提供了最大33MB/sec的的数据传输率,以后又很快发展到了ATA 66ATA 100以及迈拓提出的ATA 133标准,分别提供66MB/sec100MB/sec以及133MB/sec的最大数据传输率。值得注意的是,迈拓提出的ATA 133标准并没能获得业界的广泛支持,硬盘厂商中只有迈拓自己才采用ATA 133标准,而日立(IBM),希捷和西部数据则都采用ATA 100标准,芯片组厂商中也只有VIASISALi以及nViidia对次标准提供支持,芯片组厂商中英特尔则只支持ATA 100标准。

各种IDE标准都能很好的向下兼容,例如ATA 133兼容ATA 66/100Ultra DMA33,而ATA 100也兼容Ultra DMA 33/66

要特别注意的是,对ATA 66以及以上的IDE接口传输标准而言,必须使用专门的80IDE排线,其与普通的40IDE排线相比,增加了40条地线以提高信号的稳定性。

以上这些都是传统的并行ATA传输方式,现在又出现了串行ATASerial ATA,简称SATA),其最大数据传输率更进一步提高到了150MB/sec,将来还会提高到300MB/sec,而且其接口非常小巧,排线也很细,有利于机箱内部空气流动从而加强散热效果,也使机箱内部显得不太凌乱。与并行ATA相比,STAT还有一大优点就是支持热插拔。图2是一般主板上的SATA接口

 

2主板SATA接口

在选购主板时,其实并无必要太在意IDE接口传输标准有多快,其实在ATA 100ATA 133以及SATA 150下硬盘性能都差不多,因为受限于硬盘的机械结构和数据存取方式,硬盘的性能瓶颈是硬盘的内部数据传输率而非外部接口标准,目前主流硬盘的内部数据传输率离ATA 100100MB/sec都还差得很远。所以要按照自己的具体需求选购。

2IDE硬盘的一些知识

2.1 端口的说明

计算机主机对IDE接口硬盘的控制是通过硬盘控制器上的二组寄存器实现。一组为命令寄存器组(Task File Registers)I/O的端口地址为1F0H~1F7H,其作用是传送命令与命令参数,如表1所示。另一组为控制/诊断寄存器(Control/Diagnostic Registers)I/O的端口地址为3F6H~3F7H,其作用是控制硬盘驱动器,如表2所示。

 

 

 

 

2 IDE驱动器/磁头寄存器

 

ideh: 1.5pt solid black; mso-border-insidev: 1.5pt solid black; mso-table-layout-alt: fixed;" border="1" cellspacing="0" cellpadding="0">

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:当这个跳线短接时,磁头被固定在安全位置,防止运输过程中磁头的移动。

 CSCable Select,此方式利用经过特殊处理的数据线来设定主盘和副盘,第28根数据线为选择线,有则为主盘,无则为副盘。

 DS:当这个跳线短接时,硬盘作为主盘 (Master)

 SP:当这个跳线短接时,硬盘作为副盘 (Slave)

硬盘的跳线一般不会超出这四种,有些硬盘只采用一个跳线来设置主盘或副盘,比如,当短接时作主盘,断开时作副盘。

(注:以上资料均来自网络,由我整理如有侵权的话,请联系Lightseed@163.com,我会及时删除。主要是为了说明IDE的完整性故加在这里。)


3、怎么来判断IDE硬盘存在?

3.1 Detect IDE设备的困难

判断IDE的存在与否其实是一个很复杂的过程。不管是在AWxxxcode还是在AMxcode都是一样。不能漏判已经连接在主板上的IDE设备(包括ATAPI设备),也不能因为担心漏判而印象detect IDE设备的速度。有点矛盾哦,所以一般都是取两者的中间点的。

3.2 Detect的技巧

我看了一下detect IDE设备在网上有其他的方法,(因为本身设备如果不存在的话,那么如果你连续多次去操作设备肯定是会出问题的,所以就可以判断设备是否存在了。只是大家方法不太一样罢了。)那么我用AWxxx的方法来做。最核心的地方是,当我选择了相应的IDE channel上的设备后,读取1X6H的数值回来与本身写入1X6H的寄存器做比较,如果相同那么就算是该IDE drive存在,反之亦反。

4IDE 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当中说论述的结果。


4IDE 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缩略的介绍,实际上在BIOScode中是很严谨的,共分9步。(不管是4.51版本还是6.00版本都是同一个算法。)而且每一步骤由于担心会误判也会有一定时间的循环。总之就是比较严谨啦。至于AMx的话,有兴趣我们再来讨论,目前还只是study阶段。


http://www.niftyadmin.cn/n/959385.html

相关文章

关于RAID

一:什么是RAIDa: RAID:Redundant Arrays of Inexpensive(Independent) Disksb: 1988年由加利福尼亚大学伯克利分校(University of California-Berkeley) “A Case for Redundant Arrays of Inexpensive Disks”c: 多个…

【我所認知的BIOS】--MTRR (MEMORY TYPE RANGE REGISTERS)

【我所認知的BIOS】-->MTRR (MEMORY TYPE RANGE REGISTERS) By LightSeed 2009-9-27 1、MTRR的概念 内存类型范围寄存器(MTRRs,翻译过来真别扭,后面都以MTRR直接来说了)提供了一种机制,这…

转载Linux下开启MySQL日志

转载https://blog.csdn.net/weixin_38187469/article/details/79273962 开启mysql日志1、查看日志是否启用mysql> show variables like log_bin;出现off就代表没有开启。2、编辑my.cnf退出mysqlLinux下输入[rootizuf60sguf4gh3h771pjx6z etc]# vim my.cnf 新增两句话server-…

家庭局域网_如何用电视盒子局域网共享电脑资源,赶紧Mark!

海美迪盒子解码强画质好,播放稳定,是我们观看影视内容的最佳伴侣。——广告结束进入正题——好多海粉们买了咱家海美迪盒子后,只知道看芒果/腾讯等在线视频,这,很浪费!很浪费!其实它还可以看你本…

【我所認知的BIOS】—SMM (SYSTEM MANAGEMENT INTERRUPT )

【我所認知的BIOS】—>SMM (System management mode 学习笔记) By LightSeed 2009-9-11 1、System management mode综述 这篇文章里面我主要是谈谈对IA32的了解,而且也纯粹是笔记而已,没有太多的组织语言。 1.1 什么是…

程序员必看!2019 年招聘排名 TOP 10 的技能!

在当今竞争激烈的环境中,程序员必须不断学习和持续更新硬技能。那么成为一名企业急需的程序员需要学习什么呢?本文,小千列出了 IT 专业人员在人才竞争中必须具备的十大关键技能,这也是 2019 年技术人员需要掌握的关键核心。1、Pyt…

一次访问优化

2019独角兽企业重金招聘Python工程师标准>>> 公司一个业务要用用户的所有保单号访问数据库,获取用户的精彩服务,如图: 问题:先不要说街客,内部的测试都过不了,因为测试账号有200几张保单&#x…

高手进阶,终极内存技术指南——完整/进阶版 I(转)

高手进阶,终极内存技术指南——完整/进阶版 I老實話,我個人覺得這兩篇文章真的寫的很不錯,前段時間在study關於DDR內存的初始化以及其相關知識的時候,詳細學習了它。個人很佩服原文的作者能夠寫出這麼深刻的文章。(應該…