|
一、备用服务区的原理
厂商在N40P/CALYPSO/SABRE/FALCON系列硬盘驱动器中使用了备用服务区,N40P系列比较特殊,不是所有N40P系列驱动器都具有备用服务区,通过查看模块列表可以验证N40P系列是否具有备用的服务区。如果PN=95h模块存在,说明这个硬盘不具有备用服务区。有一个特殊的情况,应当注意,当你在一个具有备用服务区的N40P系列驱动器上,加载了一个创建自没有备用服务区硬盘的LDR以后,或许在模块列表中会出现PN=95h模块,一旦打开它,你会发现PN=95h模块是空的。这样的盘,是具有备用服务区的。而CALYPSO/SABRE/FALCON系列全部具有备用服务区。
备用服务区是厂商用来在生产过程中创建主服务区,以及隐藏它的缺陷。在备用服务区中包含了该驱动器的部分原始模块,它的结构与主服务区类似,但是功能与模块内容是有区别的。
主服务区的FW,叫做Program A,人们习惯称它为A区;备用服务区的FW,叫做ProgramC,也就是大家说的C区。N40P系列备用服务区的FW版本类似于NCRxxxx0,CALYPSO系列备用服务区的FW版本类似于YCRxxxx0,只有FALCON系列特殊,它的FW版本类似于RDMxxx0的样子。[因此,FALCON系列的备用服务区也被称为D区。]
在一个具有备用服务区的驱动器引导过程中,主轴启转后,BOOT-ROM首先从主服务区读取模块中的微代码以及转译器,并检查它们的结构状态,如果它们的结构无效或者无法读取,BOOT-ROM便转向装载备用固件区。也就是说,当主服务区的代码模块或者转译器异常,BOOT-ROM便转向装载备用固件区。
使一个具有备用服务区的硬盘驱动器转向备用服务区引导,有两个办法:
1、在安全模式下,使用专用的ProgramC_LDR引导驱动器到备用固件区。
[此方法适用于无法从主服务区正常引导的驱动器]
2、•在“Utility status”对话框中,勾选“Write all module copies”。
•在module viewing (Ctrl-Alt-2)中打开PN=18h模块,并修改模块头的两个字节为任意字符,回写。
[此方法适用于可从主服务区完整引导的驱动器]
二、备用服务区的功能
在原理部分曾提到“备用服务区是厂商用来在生产过程中创建主服务区,以及隐藏它的缺陷。”,事实上,备用服务区的使用贯穿了驱动器生产的整个环节,当驱动器的HDA装配完毕,首先要写Sevo标志,以及我们刚刚提到的备用服务区。再封闭Sevo Window,装配PCB。这个环节中装配的PCB并不是销售时我们见到的样子,它是带有AI接口的工程PCB,上面有各TP以及串行通讯口。这个AI接口是通过一条专用电缆与工厂的I/O盒相连,I/O盒是一个通用设备,它可以从工厂的控制主机中Download某系列驱动器的控制代码,然后脱机使用。当工程PCB接驳好带有相应控制代码的I/O盒,就可以启动备用服务区的SelfTest程序了。
SelfTest程序首先应用工厂计算得到的SA缺省适配,按照物理地址检查预设的主服务区范围,排除缺陷,并将完好扇区编目,生成主服务区的转译器,并缓冲在备用服务区的Swap0区域。对于FALCON系列驱动器,还要检查另外一个预设服务区,我们把它叫做“ProgramB”,也就是B区,生成B区的转译器,并缓冲在备用固件区的Swap1区域。之后,应用编目后的UBA地址对主服务区做适配调整,再根据调整的结果,继续编目一定数量的扇区作为SA保留扇区,但这些保留扇区不做缺陷检测。
生成了SA区的转译器以后,SelfTest程序试图将两个特定扇区填充数据,并标记为缺陷。如果成功,开始根据备用固件区的模块生成主服务区模块。对新生成模块进行校验。校验结束,对主服务区模块进行标记,标记当前进程,并暂停SelfTest,等待I/O盒的键盘交互式返回PN=48h中一些数据,PN=48h的数据填充完毕,将继续进行SelfTest进程。
接下来的进程,就是我们在主服务区可以看到的那些进程了。
如果SelfTest进程因为媒质缺陷过多,会返回0006进程,等待I/O盒的键盘返回下一级型号所需的PN=48h中的一些数据……
这就是在工厂中备用服务区的功能。
在现有条件下,多数朋友可能无法获得I/O盒以及控制代码。但是,备用固件区中的大部分功能仍然是可以利用的,因为最后一次工厂测试时使用的控制代码,被保存在备用固件区的SelfTest模块组中了。我们通过打开、注销、更改个别流程,可以基本实现工厂级别的SelfTest. |
|