何处识别驱动器?

2021-06-13 05:59:05

由于大多数人都知道,通过在用ST506接口将先前独立的磁盘控制器螺栓连接到MFM驱动器并将组件连接到主机系统,通过40针带状电缆将主机连接到MFM驱动器上的AT附件标准(非正式称为IDE)。

正如它经常发生的那样,标准化过程远远落后于技术,第一个ATA标准正式成为ANSI标准X3.221-1994(显然)1994年。该标准在该工程中待了几年,但即便如此第一个ATA标准草稿出现在1990年年中,当时至少有一半的供应商一段时间运输ATA驱动器。

从软件的角度来看,IDE驱动器几乎无法区分从ST506驱动器加上控制器 - 实际上是IDE的整点。一个至关重要的差异是识别驱动器命令。

识别驱动器命令(很快重命名为识别设备,以便反映ATA的扩展范围)使得可以构建自配置系统,也称为即插即用,即使显然没有人认为将其调用ATA PNP直到大约1995年。但它来自哪里以及为什么?

我们知道,在1990年夏季,我们也在提前的ATA草稿中指定了识别驱动器。但我们还知道,在这一点上,有许多实施命令的IDE驱动器,例如1989年初的希捷ST-157A,量子推销40来自中期-1988,类似复古的小型8051a,或甚至旧的康纳cp-342(在所有情况下通过检查实际驱动器确认)。

很早的ATA草稿已经包含了识别驱动器命令(使用命令代码ech)表示它是普遍的;与此同时,这些草稿(和最终ATA-1标准)标记标记为可选的驱动器,这表明有IDE驱动器没有识别驱动器支持。

在20世纪90年之前研究识别驱动器命令的历史记错是显着困难的。维基百科声称第一个ATA草案是“公共汽车附件的普通访问方法,由凸轮委员会创建的文件CAM / 89-002,文档CAM / 89-002,这是合理的,但没有采购。

无论出于什么原因,ATA标准化努力在凸轮委员会开始,这是X3T9.2工作组的一部分。 X3T9.2的主要焦点是SCSI,尽管它也标准化了ESDI。 CAM(或通用访问方法)最终尝试创建标准化软件接口到SCSI硬件,并且其草稿文档似乎不会幸存下来。 1990年,ATA工作组直接折叠到X3T9.2中,几个ATA草稿从该期间生存。

下一个信息来源将是1990年IDE驱动器的技术参考或OEM手册。但是......没有什么。截至1989年底,康纳,希捷,量子,IBM,MICROPLIS,CDC,Western Digital,以及其他几个在市场上有德德驱动器。但是,即使在同一时期的SCSI和ESDI驱动器中有大量的存档文档,手册也无法在线提供。

部分问题毫无疑问,对于绝大多数用户,包括技术用户,这些手册并非所有这些都很有趣。对于一个基本的IDE驱动器,很少他们尚不熟悉PC /技术参考 - 再次,兼容性是重点。一个例外是识别驱动器命令。

在硬件方面绘制一个空白,我以为我可能有更多运气追踪哪些软件使用该命令。我发现的惊讶了我一点:即使识别驱动器命令已经围绕1990年以来一直待遇,主要操作系统似乎没有使用它直到1992-1993:

Windows NT 3.1使用了在1993年7月的atdisk.sys驱动程序中识别驱动器,但在1993年3月的Beta中没有

OS / 2 2.0在1992年3月在其名为IBM1S506.ADD驱动程序中的识别识别驱动器

Microsoft OS / 2 1.3使用识别ESDI-506中的识别驱动器。在安装软盘上,但不在Diskette B上的磁盘驱动程序(1991)

OS / 2清楚使用的识别驱动器相对较早,但细节很复杂。虽然微软的OS / 2 1.2和1.3使用了识别驱动器,但IBM没有。更重要的是,OS / 2 2.0的Betas未使用识别驱动器,直到1992年,很可能是因为磁盘驱动程序在添加支持之前从OS / 2 1.x代码库中叉。

IBM在整个1991年的OS / 2 2.0预发布中使用了Disk01.sys驱动程序,但是1992年初的最终测试版与ADD和DMD驱动程序转换为IBM的全新模块化存储堆栈。

查看IBM OS / 2 2.0存储堆栈的1992年源代码(幸运的是生存)很明显,“识别驱动器命令的信息必须来自IBM驱动器部门。

OS / 2 2.0驱动程序使用标识驱动器查询默认磁盘几何图形,这可能看起来像一个好主意,但可能不是,因为它可能与BIOS设置编程到驱动器中的几何图形不匹配。 IBM1S506.ADD驱动程序还使用识别驱动器来查询和(如果存在)启用多扇区传输支持,该功能可能会在可用时带来明显的性能提升。

我没有MS / 2 1.21的源代码依赖01.SYS驱动程序,但此时,1990年6月是最早已知的操作系统识别驱动器的使用情况。类似于IBM的OS / 2 2.0,Microsoft驱动程序使用标识驱动器来检测是否支持读/写多个命令,如果是,则启用多扇区传输。

好的,操作系统可能并没有真正使用1990年之前的识别驱动器。但肯定是有人必须用它,对吗?为什么在第一个地方将在那里?在1990年之前,驱动器肯定支持识别命令。

事实上,BIOS可以使用它......但是我无法在1993年或1992年之前找到使用识别驱动器的常见生物空间的任何证据。

然后,识别驱动器的最可能用户将是Compaq,因为Compaq(与西方数字)一起是IDE和Compaq机器背后的驱动力,以前在其他任何人之前使用过IDE驱动器。

然而,检查1988年的DeskPro 386 BIOS没有显示任何识别驱动器使用量。尽管如此,如果有人在20世纪80年代使用识别驱动器,则它应该是Compaq。

Jeff Parsons将我指向旧的技术参考资料,对Compaq DeskPro机器进行了旧的技术参考。结果结果非常有用。

DeskPro 386的第2卷技术参考从1986年(原始DeskPro,第386 PC)显示40 MB驱动器选项实际上使用了40线带电缆与“现代”并联ATA几乎相同。 40 MB的驱动器是半高5.25英寸CDC WREN,带有自定义西式数码PCB; PCB包括相当于PC /硬盘控制器(方便也是WD产品),并且通过上述40线带状电缆连接到DeskPro 386内的多I / O板。

除了一边:带有WD适配器板的WREN HH常被声称是第一个IDE驱动器,但这只是故事 - Compaq的一半使用3.5英寸的小驱动器,其中包含一个单独的WD适配器板和40线带状电缆DeskPro 386出来前几个月的便携式II。有偶数照片(滚动一点)。 WD适配器板是WD1003-IWH的型号,在本文的开头附近。只有Compaq-Only WREN可能是第一个实际集成的IDE驱动器,而是DeskPro 386,驱动器出现的DeskPro 386不是Compaq的第一个使用IDE布线的机器。

好的,所以DeskPro 386绝对有一种IDE驱动的某种东西。甚至更好,DeskPro 386 Tech Ref还通过代码ech文件进行了一个基本的“识别”命令。这意味着该命令已在1986年存在!这是它看起来的样子:

毋庸置疑,这只是原始ATA标准指定的识别驱动器命令的一个小子集,但它完全兼容它。

可是等等!一个注释澄清了识别命令(加上两种)仅在130 MB驱动器上可用,而不是40 MB IDE驱动器!那么130 MB驱动器是什么?这是一个ESDI驱动器,控制器几乎肯定是西方数字WD1005-WAH。因此,识别驱动器命令是由ESDI控制器实现的,然后在IDE驱动器中显示出来!这必须是为什么DeskPro技术ref标记为识别命令结果的内容作为“esdi参数词”。

不幸的是,我无法找到WD1005或WD1007 ESDI控制器的详细文档。有关WD1002和WD1003系列控制器提供的详细数据表,但不适用于ESDI。

唯一的扎实信息(谢谢Compaq)是WD1005-WAH实现了识别命令,但与ESDI驱动器有什么关系? WD1005-WAH是如何工作的?

从现存文件中,这很明显,西部数字WD1005-WAH是一个类似于PC / WD1003-WAH的16位ISA适配器,但它可以控制ESDI驱动器(或两者)而不是ST506样式驱动器。与此同时,它提供了与WD1003-WAH完全兼容的寄存器和命令界面,因此不需要自己的BIOS。

换句话说,通过WD1005-WAH控制器连接到主机的ESDI驱动器查看主机系统就像标准PC / AT驱动器一样。几何翻译可能存在可能的问题,因为高端的ESDI驱动程序已经运行到BIOS限制,但除此之外,就软件而言,与ESDI驱动器的WD1005-WAH有关,就像软件一样,与PC完全相同/固定磁盘控制器,带有ST506样式驱动器。

但是,ESDI连接提供了重要的线索,让我把答案队拼接到识别驱动器命令来自的问题,或者至少形成非常明智的猜测。

ESDI驱动器是一个常用于高端硬盘的ST506驱动器的过度。 ESDI更快 - 而ST506仅限于5 Mbps,ESDI可以处理10 Mbps,随着时间的推移,超过20 Mbps。 ESDI驱动器在驱动器上有一个数据分隔符,而不是在控制器上;虽然ST506控制器基本上移动了数据线的模拟信号,但ESDI使用与驱动器产生的时钟信号同步的NRZ编码。 ESDI驱动器还可以处理较大的容量,500 MB,理论上是大量的千兆字节。

ESDI驱动器还接受一小组命令,这些命令做像选择头部,搜索或返回驱动器配置。

设计ESDI的人们可能意识到完全缺乏ST506驱动智能的结果:要求用户告诉控制器驱动几何形状是什么。控制器没有办法告诉但不得不知道,唯一可用的手段是最不可靠的:人类。 ESDI驱动器知道他们拥有的几何和控制器可以问它们。

ESDI命令接口非常简单:为驱动器写一个16位命令字,获取16位结果。这是ESDI驱动器可以从1984年发布的CDC发布的规范草案的eSDI草案中告诉他们自己:

当然,eSDI驱动器响应请求配置命令返回16位单词并不巧合,并且第一个九个单词完全使用Compaq技术参考。曾经想过为什么为识别驱动器的第三个词保留在ATA?因为它报告了可移除媒体驱动器的汽缸数,所以ATA的某些东西不支持。

这是第一个单词(常规配置)在1984年ESDI规范中查看的:

为了比较,这里是1993年底的最终ATA草案中的相同表:

一般配置位 - 重要信息:150保留用于非磁驱动器14 1 =格式速度公差间隙需要13 1 =轨道偏移选项可用12 1 =数据选通偏移选项可用11 1 =转速容差是&gt; 0,5%10 1 =磁盘传输速率&gt; 10 MBS 9 1 =磁盘传输速率&gt; 5MBS但&lt; = 10mbs 8 1 =盘传送速率<= 5mbs 7 1 =可拆卸盒驱动器6 1 =固定驱动器5 1 =主轴电机控制选项实现4 1 =头部开关时间&gt; 15 USEC 3 1 =不是MFM编码2 1 =软扇区1 1 =硬扇区0 0 =保留

这显然是同一个表......而且,ESDI起源解释了为什么一半的比特甚至没有对IDE产生任何真正的意义。谁关心IDE驱动器是硬或软部门的,或者内部转移率为5,10或15 Mbps?当然不是使用它的软件。但是,在驾驶ESDI磁盘时,ESDI控制器将非常关心这些参数。

实际上确实ech,标识驱动器的命令代码,代表'esdi配置'?这可能很好。

除此之外,我无法确认我的西方数字WD1007V-SE2控制器是否支持识别驱动器命令,因为我没有工作ESDI驱动器(帮助,任何人?)。我相当确定控制器的BIOS不使用识别驱动器,但它使用不同的命令e0h。该命令与ATA标准中指定的待机立即进行冲突,但WD1007V清楚地使用它来向驱动器发送命令字并读回16位回复。 WD1007V BIOS使用e0h命令查询相同的信息,识别驱动器将返回,但零碎。其中一个可能的原因可能是难以安全地分配用于识别驱动器的缓冲区,导致控制器邮政程序。

我们还可以从1987年12月审查Compaq DeskPro 286技术参考,大约是原始DeskPro 386 Tech Ref的一年。它是类似的,但不同的,它以奇数方式不同。这是它对识别命令所做的:

请注意,虽然1986年较旧的Tech Ref定义的单词7和8,但是从1987年后的Tech Ref中消失了。缺少的两个也恰好是与ESDI有些特定的单词,并且在ATA中未定义(留下特定于供应商)。大多数IDE驱动器在那里没有报告任何值,尽管某种旧的旧康纳驱动器。另请注意,较新的Tech Ref删除了对ESDI的引用,可能是因为命令不再特定于ESDI驱动器。

这就是为什么当Tech Ref指出“20 MB和40 MB集成驱动器不支持识别,读取扇区缓冲区或写入扇区缓冲区命令时,它会变得相当令人困惑。” Dec'87 DeskPro 286 Tech Ref涵盖IDE(AKA“Compaq 16”),ST506和ESDI驱动器。如果该陈述为真,则意味着ESDI和ST506驱动器/控制器都支持识别命令,而IDE驱动器则不是,这是非常难以置疑的。 Tech Ref是错误的,这更有可能是不支持这些命令的ST506驱动器,而ESDI和IDE驱动器则执行。

所以......识别驱动器命令(ech)于1986年存在,并且必须由Western Digital WD1005 ESDI控制器实现。至少最初,这显然是为了方便地将所有ESDI驱动器的配置信息返回到软件的方法。

问题是,什么软件?正如我们上面所见,OS / 2开始使用1990年的识别驱动器,但许多其他操作系统等待了其他几年。如果OS / 2首先,这很难说,但至少在考虑通用驱动程序时可能会很难。

与此同时,该命令已经存在至少四年,到1990年,它得到了许多IDE驱动器和至少一些ESDI控制器的支持。

在ESDI方面,WD不是实现控制器中唯一实现识别驱动器的供应商。文档是稀缺的,但是至少1989年的OMTI 8640文档描述了“读取参数”(ech)命令,以及“启动esdi”命令(e0h)命令,看起来非常类似于我的WD1007V的BIOS在内部使用的内部。

在IDE方面,很难说谁支持什么而不检查实际驱动器,但识别驱动器命令肯定在那里。我能够确认1988年的Conner CP-341i支持识别驱动器,而不仅仅是这样,它甚至可以支持读/写多个命令。

我还检查了一些奇数康纳CP-342驱动器,发现它还支持识别驱动器,但不读/写多个; CP-342可能是康复之外的OEM可用的第一个IDE驱动器。为什么我的cp-342奇数?该驱动器是在1989年制作的,但PCB充满了1987年的组件。ROM上的贴纸清楚地说“CP 1989”,贴纸上的修订(5.85)匹配识别驱动器报告的匹配。结果是,虽然Conner的1989年固件可被提供支持的识别驱动器,但这不是完全的新信息,我不能得出结论,虽然它非常有可能,但我无法得知1987年的固件。好奇地,CP-342在识别驱动器输出中呼叫本身CP-341(未指望!),CP-341是仅初期的Compaq-opl模型。

在这篇文章中的大部分写完之后,Tom Gardner善于提供另一个有价值的信息。 Conner CP3022从1988年2月的产品规格记录了识别驱动器命令;这是该文件的第四个修订,没有理由怀疑识别驱动器命令在那时是新的; Conner几乎肯定在1987年肯定实施了它。 Conner CP3022规范对于调用命令识别驱动器是值得注意的,而不是仅仅识别它在Compaq技术引用中命名。

值得注意的是,Conner文件的单词7和8,Compaq未记录。同样值得注意的是,与Compaq Tech Tech Refs相比,Conner的识别驱动器定义显着扩展,并且实际上是稍后出现在第一个ATA标准中的相当大的子集(其实际上与1990年ATA标准草稿几乎相同) 。

此时,无法判断康纳是否将识别驱动信息延伸到自己的主动项或其他人(康柏?)要求它。无论如何,Conner提供了型号,固件版本和序列号。已经有一个提供支持读/写多个命令 - 并非所有Conner驱动器都这样做,但Conner IDE驱动器可能在其他任何人之前实现了这种能力。还有神秘的“双字传输标志”,以及有关驱动器缓冲区的信息。

有关通过读/写长命令传递的ECC字节数的信息。这可能对Compaq的诊断非常重要:ST506和早期IDE驱动器使用了4个字节,而ESDI驱动器使用7个字节的ECC。

显而易见的是,在第一个ATA草案出现之前,识别驱动器命令在出现的第一个ATA草案之前有点普遍,即使它似乎没有广泛(如果是完全)通过操作系统使用。

退休的WD固件工程师确认了我怀疑这个命令背后的驱动力是PC OEM,特别是康柏,但也可能也是戴尔和其他人。 OEM对驱动器以兼容的方式返回识别信息的既得利益,并有足够的纽约尔迫使驱动制造商制造它。

仍然是那些OEM实际使用识别驱动器命令的问题,几乎是他们必须拥有的OEM - 否则为什么要询问它?

识别驱动器最明显的用户将是Compaq的设置和/或诊断实用程序。我未能在1987年或更早的公司中找到任何使用识别驱动器,即使Compaq记录的识别驱动器识别为1986年5月,Compaq Diagnostics版本5.02似乎没有似乎使用识别驱动器。

最后,我在检查本页检查Compaq Portable II诊断软盘时击中金色。这是Compaq Diagnostics 5.08,文件日期为1988年1月29日。他们看起来不太喜欢:

但尽管他们的潮湿外观,但Compaq诊断(Test.com)和设置实用程序(Setup.exe)在启动时发出识别驱动器命令。 我不确定uti究竟是什么 ......