3.4 Arch-V驱动器的修复(PC3000 v12/14)
本节介绍Arch-V架构驱动器的修复。
3.4.1 设计目的
PC3000v12/14用于修复3英寸Arch-V架构鱼子酱驱动器产品,包括WD450AA、WD307AA、WD272AA、WD205AA共4个属系,ac_ident.exe工具可以对驱动器的属系型号进行准确的识别,修复时使用的程序、型号和一些参数如表3-14所示。
表3-14 工具与型号对照表
3.4.2 基本操作
参见第3.2.2节。
3.4.3 准备工作
参见第3.2.3节。
3.4.4 程序的使用
启动相应的程序,有两种模式可以选择(如图3-14所示)。
Standard mode(标准模式):常规操作模式,在驱动器能够初始化时使用。
Safe mode(安全模式):在此模式下对脱离HDA的印刷电路板(PCB)单独进行操作。当跳线同时设置成CS、SLAVE和MASTER 3种模式时,驱动器进入安全模式。
为方便叙述,现将对标准模式和安全模式的介绍往上提一级,与本节同级。
3.4.5 标准模式
在标准模式下启动时,程序将检测驱动器是否与相应属系匹配。如果不匹配,将显示“CONNECTED DRIVE NOT SUPPORTED BY THE UTILITY”(程序不支持所连接的驱动器)的提示信息,然后提供一个建议或退出该程序。反之,则列出组成该属系的驱动器的型号,并将光标自动移至所连接的驱动器型号,用户在必要时可以改变它。按【Enter】键进入主操作菜单,各菜单项及含义如下。
Servo test:伺服测试。
Surface test:表面测试。
Disc firmware zone:驱动器固件区。
Drive description:驱动器类型。
Formatting:格式化。
Logical structure scanning:逻辑结构扫描。
S.M.A.R.T. table:S.M.A.R.T表。
Defects table:缺陷表。
Automatic mode:自动模式。
Exit:退出。
伺服测试、表面测试、驱动器类型、格式化、逻辑结构扫描、S.M.A.R.T表、自动模式、退出等命令与Arch.III、Arch.IV属系的相应工具完全一样,这里不再详述,下面仅介绍“驱动器固件区”和“缺陷表”命令。
1.驱动器固件区
驱动器固件区命令用于格式化和测试驱动器服务区、查看和检查固件结构、完全重写固件、重新配置驱动器。选择此项后的子菜单项及含义如下。
Disc firmware zone:驱动器固件区。
Translator operations:译码表操作。
Spindle stop:主轴停转。
Change time scale:更改响应时间。
· 驱动器固件区
此命令对驱动器固件区的-6柱面至-1柱面、磁头0、磁头1进行操作,有以下选项。
Disc firmware surface test:驱动器固件区表面测试。该命令启动检测驱动器固件区(-6柱面至-1柱面,磁头0至磁头1)缺陷进程。检测到的缺陷将显示在屏幕上。-4柱面至-1柱面上没有缺陷时驱动器才能正常工作。PC3000目前尚不支持重定位驱动器固件区缺陷,开发者们正在努力实现这一功能。
Disc firmware structure test:驱动器固件结构测试。选择此命令会在屏幕上显示一个固件模块列表,其内容及含义如下。
✧ TRACKS DIRECTORY:磁道目录。
✧ ZONE TABLE:区域表。
✧ CONFIGURATION SECTOR:配置扇区。
✧ PLIST DEFECTS:P-List中的缺陷。
✧ GLIST DEFECTS:G-List中的缺陷。
✧ FIRMWARE MODULES:固件模块。此命令执行时,将搜索模块并测试其检验和。所有固件数据存储在柱面0并在柱面1有一份复本。如果存储了模块的扇区无法被读取,则显示“Read error”(读错误)的提示信息。如果模块可以被读取但校验和不匹配,则显示“Checksum error”(校验和错误)的提示信息。如果模块能被读取且经检查校验和也正确,将显示如下信息。
MODULE NAME dd/mm/yy Copy number Location Status 1 C:-1 H:0 OK 2 C:-1 H:1 OK specific module parameters(特殊模块参数)
✧ dd/mm/yy:模块写入时间。
在模块目录中可以看到一个版本号,它是驱动器固件的版本号。主模块显示完毕,会显示如下形式的固件模块列表。
# ID Cyl Head Sec Length Date Ver Ch.S. Status
✧ #:模块号。
✧ ID:模块标识。
✧ Cyl、Head、Sec:模块位置。
✧ Length:以扇区为单位的模块长度。
✧ Date:模块写入日期。
✧ Ver:模块版本。
✧ Ch.S.:校验字节。
✧ Status:测试结果,可以为“OK”、“READ ERR”或“CHECK ERR”。
Disc firmware zone formatting:驱动器固件区格式化。此命令用于强制格式化服务区的-14柱面至-1柱面,该过程将破坏所有服务数据。执行此命令后,需要通过镜像记录法重写固件。
Disc firmware data read/write:读/写驱动器固件数据。此命令用于实现将固件数据镜像(-1柱面至-4柱面)保存至资源文件*.rsc中,或将资源文件中的固件数据镜像写回驱动器,请参考第3.2.4节。但是要注意,在WDxxxAA驱动器中固件区占用-1柱面至-14柱面,而程序只保存-1柱面至-4柱面。因此,虽然将空白空间也写入了资源文件,并在写回时一并读取/写回,但几乎可以肯定驱动器发生了更改,因为不是所有固件数据都能被读取和写入。
Read modules:读模块。此操作用于读取磁盘服务区的固件并将其保存在模块目录“WD5_MOD”下。模块文件命名规则为~idxx.rpm, “xx”是模块标识,如~id20.rpm就是20h模块(译码表)。在读取之前首先显示一个可读取模块列表,可以选择特定模块或所有模块进行读取,所选模块将被保存在“WD5_MOD”目录下。如果该目录下已有同名文件,将不会进行提示而是直接覆盖。但是,不是固件区的所有模块都保存在模块目录下,而是只包含驱动器工作所需的模块。一些辅助模块,如Selfscan、Selfscan results等就可能没有写入模块目录。因此,为完整保存固件,推荐使用固件镜像方式进行此项操作(见本节“Disc firmware data read/write”部分)。
Write modules:写模块。此操作用于将模块写回驱动器固件区。和读模块类似,先给出“WD5_MOD”目录下可供选择的模块列表,在模块写入的同时重新计算校验和并将正确的校验和写入以代替先前的记录。由于程序在写入之前并不检查模块结构,因此需要格外注意,否则可能会对驱动器造成不可恢复的破坏。
对于WD450AA属系的驱动器,还有一个安全子系统菜单,用于查看和重设主密码和用户密码。
· 译码表操作
译码表操作包括清除译码表、从ABA到PCHS的转换和重建译码表。
Clear translator:清除译码表。该命令用于跳过缺陷表创建译码表,就好像驱动器根本就没有重定位缺陷一样。这种译码表用于确保从逻辑地址(LBA)到物理地址(PCHS)的转换或从ABA到PCHS的转换正确无误和检测重定位缺陷。
从ABA至PCHS的转换。这种转换对于这样一种情况非常有用:必须重定位一个磁盘表面上的坏扇区,但当尝试测试它时却失败,驱动器要么在该扇区处挂起,要么开始敲盘。在这种情况下,必须尽可能准确地阻止该缺陷区域,并在ABA中定义该区域,然后使用转换器来确定缺陷区域的边界磁道,并把损坏区域周围的磁道添加到缺陷表中,通过缺陷表中的添加物理磁道命令来完成操作。
Regenerate translator:重建译码表。根据P-List和(或)G-List完成驱动器译码表20h模块和25h模块的重建工作。
· 主轴停转
该选项可发送一个休眠(SLEEP)指令,用于热交换操作。
· 更改响应时间
应用程序在超过时间限度后将终止执行当前命令并向用户显示相应信息,如驱动器在15秒内没有报告就绪。但是,有一些型号的驱动器可能需要更长的时间来报告准备就绪,特别是那些固件区有模块损坏的驱动器,可能需要3分钟或者更长的时间。使用更改响应时间这一功能时,通过输入相应因子来延长以15秒为基数的响应时间,“1”代表15秒,“2”代表30秒,依此类推。
2.缺陷表
缺陷表选项用于查看、添加、清除缺陷表或完成缺陷分组。
View defects table:查看缺陷表。执行该命令将显示驱动器重定位缺陷表。查看缺陷表有助于评估驱动器磁盘面的品质和状态。
Add LBA defect:以LBA方式添加逻辑缺陷。添加缺陷输入完毕,逻辑结构中的缺陷将转换成物理定位缺陷,并根据选择被写入P-List或G-List中。添加缺陷后需要格式化驱动器。
Add physical track:添加物理磁道。该命令用于手工添加物理缺陷磁道。
Import logical defects table:导入逻辑缺陷表。该命令用于根据选项从*.dft文件将缺陷写入P-List或G-List。*.dft文件需要提前准备好,可以由PC-DEFECTOSCOPE 2.10或其他程序生成。*.dft文件的结构详见PC-DEFECTOSCOPE工具的描述。添加缺陷后必须执行格式化操作。
Clear defects table:清除缺陷表。执行此命令后,相应缺陷表将被重置,缺陷扇区数被置为0,由用户选择确定清除哪个表。
Move G-List to P-List:将G-List移入P-List。此命令用于将G-List中的内容添加到P-List中,然后重置G-List。这项操作对驱动器运转没有影响,但会增加S.M.A.R.T的“Relocated Sector Count”(重定位扇区数)参数的值。
Group to tracks:编组至磁道。此菜单项用于把已经加入缺陷表的那些缺陷扇区编组至缺陷磁道。进入此模式,会看到“LIMIT OF GROUPING INTO TRACKS”(归并入磁道最小扇区数)的提示信息,且必须输入此最小值。P-List和G-List中高于此值的扇区缺陷都将被编组成缺陷磁道,输入范围为1~50。
3.4.6 安全模式
安全模式提供了对驱动器部分特性进行访问的能力。安全模式意味着将HDA与PCB分离,单独对PCB进行测试。不过,将驱动器切换至安全模式后可以将PCB留在HDA上进行测试。同时设置跳线为CS、SLAVE、MASTER 3种模式,加电驱动器即进入安全模式。在安全模式下,驱动器不处理状态寄存器的D6(DRDY)位和D4(DSC)位。进入安全模式后显示菜单的选项及含义如下。
Work with ROM:ROM操作,用于读、写和查看驱动器ROM。
PCB testing:PCB测试。
“Viewing ROM information”选项用于查看ROM信息,包括固件版本、链表版本、支持的该属系的驱动器型号列表,示例如下。
Copyright 1993-99 ROM version:WDC 05.09B ROM revision:1F Links table version:05.36 Supported models WDC WD51AA WDC WD102AA WDC WD153AA WDC WD205AA WDC WD255AA WDC WD307AA
“Reading ROM”命令用于将ROM的内容读到扩展名为“.bin”的文件中。选择此命令,输入文件名,不用给出扩展名,读出的文件将保存在当前PC3000子目录下。
“Writing ROM”命令用于将文件写入ROM。执行此命令,需要首先选择“wd_aa.lmc”加载器文件(或兼容文件),然后选择*.bin文件并将其写入ROM(该文件必须位于PC3000子目录下)。选择文件后,将开始实际写入过程。
PCB测试命令用于检测电路板的部分部件,也就是进行扇区缓存测试和启动内部自诊断程序,详细介绍参见PC-3000AT测试器的介绍。
WD xxxAA属系的驱动器还有一种机制可以将驱动器切换至安全模式,这是一种默认方法。将PCB从HDA上取下来,不安装跳线,加电等候3分钟,电路板在到达时限后就会报告就绪。这时运行PC-3000AT程序,驱动器会被识别成该属系中最顶部的那一个型号。这就让我们能够通过测试扇区缓存和运行驱动器自诊断例程来检查电路板。在PC-3000AT测试器的控制器测试(Controller Testing)模式下可以运行该项测试。在这种模式下还可以查看驱动器类型,在不知道PCB的属系时,这是非常有用的功能。通过查看驱动器类型还可以识别其属系和ROM固件的版本。
3.4.7 技术简述
WD450AA属系驱动器的电路板如图3-16所示。
图3-16 WD450AA属系驱动器的电路板
WD205AA属系驱动器的电路板如图3-17所示。
图3-17 WD205AA属系驱动器的电路板
1.固件结构
WD驱动器固件包括存储在ROM中的微程序和配置链表、存储在磁盘服务区(驱动器固件)的可加载固件部分及数据。固件通过修订号(F/W Rev.)进行区分。通过该修订号可区分其开发进程和兼容性。一个典型的固件组成如表3-15所示。
表3-15 典型固件组成
通过在安全模式下使用“Viewing ROM information”(查看ROM信息)命令可以获取微程序的版本和ROM链表的版本。驱动器固件(Disk FW)的可加载固件部分的版本可以通过在通常模式下运行“Disc firmware structure test”命令查看,模块目录中显示的版本号就是可加载的那部分驱动器固件的版本号。
在识别驱动器命令(Identify DRV, Ech, IDE接口命令),即PC3000提供的查看驱动器类型命令运行后输出的驱动器固件版本号是一个包含驱动器3个部分固件信息的集合,示例如下。
ROM固件:82.18A。
ROM链表:10.07。
磁盘F/W:16.14A。
经过编译后输出的驱动器固件版本看起来就是“82.10A16”。就像在本例中看到的:驱动器固件版本由驱动器固件各部分版本的首字节组成,字母是从ROM微代码中借用的。在安全模式下读取微程序版本,可加载的驱动器固件部分的版本就会缺失,因为在安全模式下禁止对驱动器固件部分进行任何操作。
2.电路板兼容性
Arch-V架构的WD驱动器的电路板兼容性与先前介绍的WD驱动器相同,厂商通过专门的标签来标明记录在27C1024 ROM芯片内的固件版本,标签上带有根据工厂内部分类形成的版本号,形如“62-xxxxxx-yyy”,其中,“62”表示WD驱动器存储设备,“xxxxxx”表示属系号(即使是同一属系的驱动器,该值也可能不同), “yyy”表示该属系内的固件版本。例如,WD64AA驱动器(属于WD205AA属系)的固件版本为62-602234-080,而WD153AA驱动器(属于WD450AA属系)的固件版本为62-001003-065。这种分类方法使用非常方便,允许无错地自由选择交换电路板,只要ROM型号匹配,就表示电路板兼容。
然而,对于WD272AA属系和WD307AA属系,厂商开始在电路板上使用Flash ROM,但是上面不再有任何数字。这样,只有在安全模式下通过执行“Viewing ROM information”命令读取ROM内容后才能识别固件的版本。
3.可加载固件部分的结构
WD驱动器有14个服务柱面(-14柱面至-1柱面)用于存储固件的包括0柱面和1柱面的两份复本,然而只有前4个柱面(-1柱面至-4柱面)实际用于保存固件模块。固件数据被保存成独立的模块表,这些模块表共同组成驱动器的控制和操作系统。模块目录中保存了每个模块的地址、标识和长度,依据模块目录完成模块间的导航。每个模块都有一个标准头,标准头中按顺序包含日期、校验、标识、版本号和以扇区为单位的模块长度。主要驱动器固件模块如表3-16所示。
表3-16 主要驱动器固件模块
其中,译码表(20h~25h)和包含适配数据的模块(46h~49h)是WD xxxAA属系驱动器保证数据完整的传统上的关键模块,也许还有其他重要模块,但目前还未被识别出来。如果译码表损坏,可以根据P-List和G-List的内容重新计算并覆盖损坏的译码表。
4.更改配置
驱动器在加电初始化时将自己配置成本属系的特定型号,由转换器预放大器芯片产生的FLT/SE信号就用于此目的。主轴马达起转后,驱动器微处理器从磁头0开始对所有磁头进行一系列的检测,当检测到磁头缺失时,就向微处理器发送FLT/SE信号,这样驱动器就能确定正确的磁头数,并将自己配置成正确的型号。微处理器使用串行码发送磁头转换信号。
目前,程序开发者们还没有找到一个软件隔离缺陷盘面的方法,所以只有一种方法可以用来减少驱动器的容量,那就是“从顶部开始”禁用磁盘盘面。为禁用一个故障盘面,需要打开HDA,从缺陷盘面断开磁阻磁头,这时,它之后的所有磁头也同时被禁用了。
3.4.8 用软件方法修复驱动器
依据其当前状态,可能需要采用以下特定操作方法来修复驱动器。例如:加电时驱动器马达不转或起转后又停下,多半需要维修电路板;加电时马达起转,但代替校准的是单调地敲击限位器的声音,则多半是伺服输系统存在缺陷,可能由以下某种原因引起。
电路板与HDA由于分属于不同属系而不兼容。
HDA内磁头组件HA(Head Assembly)上的转换预放大器芯片故障。
磁头组件自身故障。
伺服数据严重损坏或者因冲击造成盘片组移位(如果马达旋转噪音增加、盘体颤动,一般就说明盘片可能发生过撞击)。
在所有上述情况中,除第一种情况可以通过软件方式修复外,其他情况软件方式无法修复。
如果加电后马达起转,磁头从启停区移走,进入PC-3000AT程序产生ABRT(04h)错误,或者读取磁盘表面时连续出现错误,则说明驱动器不能从磁盘中读取固件数据,可能由以下原因引起。
数据读取/传输通道故障。
伺服模块损坏。
驱动器固件版本与存储在电路板ROM中的固件不兼容。
在这些情况下,应确保控制电路板功能正常(最好更换电路板), ROM和HDA版本兼容,然后从下面的第1步开始恢复固件数据。如果加电后驱动器可以被初始化和重校准,而且程序读出了驱动器类型,但测试时发现坏扇区,则从以下第2步开始恢复固件数据。
第1步 恢复固件数据(FW),过程如下。
a.运行“DISC FIRMWARE STRUCTURE TEST”(驱动器固件结构测试)命令找出损坏模块。如果只是部分模块损坏而其他模块正常,可以使用第3.4.9节介绍的方法重写缺陷模块。
b.如果驱动器的多数模块损坏,可以选择“DISC FIRMWARE ZONE”(驱动器固件区)选项,运行“DISC FIRMWARE SURFACE TEST”(驱动器固件结构测试)命令,以确保-5柱面至-1柱面、磁头0和磁头1无错误。如果模块有错误,应执行“DISC FIRMWARE ZONE FORMATTING”(驱动器固件区格式化)命令。
c.选择菜单项“DISC FIRMWARE DATA READ/WRITE”(读/写驱动器固件数据)和“WRITE FW TO THE DISC”(写驱动器固件数据),根据驱动器处理器微代码版本写入驱动器固件数据。固件数据成功写入后要重启机器。
d.根据需要更正逻辑参数。
第2步 清除P-List和G-List,重置S.M.A.R.T。
第3步 运行伺服测试。
第4步 运行表面测试。
第5步 根据第3步和第4步的测试结果,得出是否要隔离缺陷磁盘表面的相关结论。如果关闭了缺陷表面,就必须继续从第2步开始修复驱动器。
第6步 使用P-List进行低级格式化,这一步应该成功完成。如果格式化出错结束,就必须重复第3步和第4步。如果更改了驱动器配置,就应根据新型号的参数修正其逻辑参数(包括柱面、磁头、扇区)。
第7步 运行逻辑结构扫描。
第8步 使用P-List和G-List执行低级格式化。
第9步 如果有必要,将系列号重新写入驱动器类型区。
第10步 使用PC-3000AT测试器执行综合测试。如果检测到错误,可重复第3步至第6步,或者运行通用缺陷重定位程序。
第11步 运行PC-3000AT综合测试,确保驱动器功能正常。
3.4.9 修复固件模块
固件数据模块损坏是最常遇到的问题。此类故障的表现是:马达能够启动,但是经过很长时间(超过1分钟)才报告准备就绪,对任何命令都给出ABRT错误。
诊断此类故障需要运行驱动器固件区菜单下的固件结构测试命令,查看固件模块列表中哪些模块已经损坏。也可以通过另一种方式来完成检查工作,即在驱动器固件区选择读模块命令,从驱动器中读取所有模块,然后退出程序查看复本模块的长度,如果某些模块的长度等于0,就可以推断这些模块有缺陷,需要重写它们。20h、21h、25h(译码表)、2Ah、2Dh(S.M.A.R.T)等模块是最常见的易损坏模块。
写模块时需要从驱动器固件区菜单中运行读/写驱动器固件数据命令。首先读出驱动器的全部模块,并将其依次添加到“WD5_MOD”目录下,然后用从兼容的驱动器中复制出来的正常模块替换该目录下的损坏模块,再将它们写入驱动器。
有些模块对保护用户数据的作用是关键性的,如果希望保留用户数据,就不能覆盖它们,如20h~25h译码表模块以及46h~49h校准参数模块。其他模块没有那么重要,可以覆盖,不过最好是从同型号且固件版本相同的驱动器中复制正常的模块。
要时刻记住:修复驱动器之前保存所有模块和ROM固件是非常有必要的,这样我们才有机会撤销所做的更改。
译码表重建可通过依次选择驱动器固件区、译码表操作、重新生成译码表选项完成。根据进入的模式,程序将提供选择基本表供重新计算译码表使用,具体如下。
Take into account P-LIST and G-LIST:考虑P-List和G-List。
Take into account use P-LIST:考虑P-List。
Take into account use G-LIST:考虑G-List。
Do not take into account neither P-LIST or G-LIST:P-List和G-List都不考虑。
工厂测试只将缺陷添加到P-List中,G-List保持为空。G-List在驱动器使用过程中由设备自身的数据保护系统填写。这样,只使用P-List重新计算驱动器译码表就可以回到工厂状态。因此,要修复20h和25h模块损坏的驱动器,应该只执行P-List表重新计算译码表,在这种情况下修复后可以恢复用户数据。
3.4.10 重写Flash ROM
Flash ROM芯片标记为28 xxx、29 xxx、49 xxx。27 xxx芯片不属于Flash芯片。WD xxxAA属系中有一些型号使用了Flash ROM,可以在安全模式下覆写。因为安全模式只是存储在ROM中的控制固件的一种软件模式,所以只有覆写ROM才是可行的。如果ROM中的部分数据被损坏或擦除,就不能在电路板上覆写ROM芯片的内容了。这时,不得不把ROM芯片拆焊下来,用ROM编程器(如PC-PROG)写入数据后再将其焊上。
为了覆写ROM,需要同时设置驱动器为CS、SLAVE、MASTER 3种模式,然后加电将驱动器转换至安全模式。依次选择“Safe Mode”(安全模式)、“Work with ROM”(对ROM操作)、“Writing ROM”(写ROM)选项,就会显示如下菜单。
Select an *.lmc loader file(选择*.lmc引导文件)
引导文件就是重命名为“wd_aa.lmc”的61h模块,包含对ROM操作的子例程(包括类型识别、擦除和写入)。可能会出现这样的情况:厂商改变了驱动器PCB上的Flash ROM芯片的类型,导致wd_aa.lmc引导程序不支持该类型,从而导致ROM没有被覆写。这种情况下,可以从支持该Flash ROM类型的WDxxxAAA驱动器复制61h模块,将其改名为*.lmc,并用它重新尝试覆写ROM。选择引导程序后,还需要选择一个包含ROM固件的二进制文件*.bin,引导程序和ROM固件文件应位于当前PC3000目录下。
写入后,应读出ROM并与ROM文件进行比较。
创建外部引导程序文件只需从有需要的Flash ROM类型芯片的正常驱动器中复制文件~id61.rpm,将其更名为引导微代码(Loader Micro Code, LMC)的扩展名即可。