WDR自校准的16个参数(上)
本帖最后由 yeboshi 于 2017-4-19 12:06 编辑Trex是西数官方的维修软件,但其在WDR自校准的16个参数对我们这们这样的菜鸟一直是个处女地,高手真要藏着不分享吗,也许我们可以在TREX编程脚本发现一些有用的东西,我也对MINI_ARCO和FuLLARCO作一些翻译,等认为够完善时再分享讨论:
//----- Arco command ids
define VGADVT = 40h
define VGADVTDBG = 0140h // VGA DVT in debug mode
define MRADVT = 41h
define MRADVTDBG = 0141h // MRA DVT in debug mode
define JOG_2T = 42h
define MINIARCO = 44h
define ARCO = 46h
define HOTARCO = 4Ah
define FINALARCO = 4Bh
define HDQUAL = 4Fh
define VKFCI = 4Eh
define DOWDVT = 60h
define DOWDVTDBG = 0160h // DOW DVT in debug mode
define ATIDVT = 61h
define ATIDebDVT = 0161h
define PBERT_DVT = 62h
define OTCDVT = 63h
define OTCDebDVT = 0163h
define MOD_DVT = 63h
define OW_DVT = 68h
define OWDVT_DBG = 0168h
define VDTHQ_DVT = 69h
define RWGAP_CAL = 6Ah
define TPICAL_DVT = 6Bh // Test ID
define WARP_DVT = 6Ch // Test ID
define DFH_TD = 6Fh // Test ID
define WTR_DVT = 74h //ITR#44880
define WTR_DVTDBG = 0174h //ITR#44880
define TARGET_SEARCH = 70h //ITR#43882
define SNAP_DVT = 072h
define SVGADVT = 73h // Servo VGA was 70h
define DLU_DVT = 77h //ITR#48486 //ITR#45893
define DLU_DVTDBG = 0177h //ITR#48486 //ITR#45893
define HMS_DVT = 78h
define HMS_DVTDBG = 0178h
define EQIWOPT = 80h
define TD_DVT = 71h // Test ID
define AVALON_PLATFORM = 01h
define OTHER_PLATFORM= 02h
define FILEHDR_ONE = 01h
define FILEHDR_TWO = 02h
// ARCO file ids
define ARCO_BIN = 0C4h
define RCODVT1_BIN = 0A2h
define ARCO_DATA = 0C5h
define ARCO_RESULT = 0C6h
define TPICAL_FILEID = 0C3h
define VDTHQ_FILEID= 0C8h
subr DisplayCHNTestOptions
ulcl StringLength
ptrmode char
cls
sprintf Line1, "***ARC0 TEST Options:*** \n"
sprintf Line2, "--------------------------------------------------------- \n"
sprintf Line3, " 1-442-46 3-704-6B5-696-6F7-6A8-4A \n"
sprintf Line4, " 9-EqIwOpt10-TD DVT\n"
sprintf LastLine, " 11-Cancel\n"
printf "%s%s%s%s%s", Line1, Line2, Line3, Line4, LastLine
esubr //End DisplayCHNTestOptions
//-----------------------------------------------------------------------------
//Name: DisplayDVTTestOptions
// display the Head Dcm Table on screen
//Inputs:
// None
//Outputs:
// none
//Returns:
// none
//-----------------------------------------------------------------------------
subr DisplayDVTTestOptions
ulcl StringLength
ptrmode char
cls
sprintf Line1, " ***Pick one of the following DVT test options: *** \n"
sprintf Line2, "------------------------------------------------------ \n"
sprintf Line3, " 1-VGA 2-MRA 3-DOW 4-ATI 5-OTC 6-PBERT \n"
sprintf LastLine, " 7-SNAP8-WTR 9-DLU 10-SVGA 11-HMS 12-QUIT \n"
printf "%s%s%s%s", Line1, Line2, Line3, LastLine
esubr //End DisplayTestOptions
//-----------------------------------------------------------------------------
//Name: GetUserInputs
//Inputs:
// RCO_DATA_BIN_FILE in write buffer (required by DisplayDCM)
//Outputs:
// gDtemp, gHeadDCMCode, gMediaDCM, gCommand contains user selections
// gMediaDCM contains default value
//Returns:
// rvar1 = gCommand
// (mini arco = 44h, full arco = 46h, final arco = 4Bh, head qual = 04Fh, cancel = 0FFFFh)
//Description:
// gets user inputs and store them in the global vars
// ...gDtemp, gHeadDCMCode, gMediaDCM, gCommand
// set gMediaDCM to default value
// (1) get head dcm code from user
// (2) set gMediaDCM to a default value
// (3) get dtemp from user
// (4) get command (mini arco, full arco, headqual) from user
//
// gParam2 = DTemp
// gParam3 = HeadDCM
// gParam4 = MediaDCM
// gParam5 = Zonemap
// gParam6 = Bits2Read
// gParam7 = KFCIHQThr1
// gParam8 = KFCIHQThr2
// gParam9 = KFCIHQThr3
// gParam10 = KFCIHQThr4
// gParam11 = KFCIHQThr5
//
//Calls:
// DisplayDCM
//-----------------------------------------------------------------------------
subr GetUserInputs
ulcl temp
//----- (1) get head dcm code from user
dosubr DisplayDCM
row = PROMPT_USER_ROWNUM
col = 0
dosubr EraseLine
row = PROMPT_USER_ROWNUM
col = PROMPT_USER_COLNUM
Prompt "Enter Head Dcm Code"
gHeadDCM = GetkeyFilter "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
row = PROMPT_USER_ROWNUM
col = 0
dosubr EraseLine
row = RUNTIME_INFO_WINDOW_HEAD_DCM_ROWNUM
col = RUNTIME_INFO_WINDOW_COLNUM // reset col
wprintf "Head DCM%c", gHeadDCM
//----- (2) get media dcm code from user
row = PROMPT_USER_ROWNUM
col = 0
dosubr EraseLine
row = PROMPT_USER_ROWNUM
col = PROMPT_USER_COLNUM
Prompt "Enter Media Dcm Code"
gMediaDCM = GetKeyFilter "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if (gMediaDCM == 0) // check for ENTER key or 0
gMediaDCM = RP_MEDIA_DCM
eif
row = PROMPT_USER_ROWNUM
col = 0
dosubr EraseLine
row = RUNTIME_INFO_WINDOW_MEDIA_DCM_ROWNUM
col = RUNTIME_INFO_WINDOW_COLNUM
wprintf "Media DCM%c", gMediaDCM
//----- (3) get dtemp from user
Prompt "Enter DTEMP Temperature in degrees C (1-60, Default=40)"
gDTemp = 20
if (gDTemp == 0) // check for ENTER key or 0
gDTemp = 40
eif
Prompt "Enter DTEMP Threshold in degrees C (Default=0)"
gDTemp |= 0 << 16
row = RUNTIME_INFO_WINDOW_DTEMP_ROWNUM
col = RUNTIME_INFO_WINDOW_COLNUM // reset col
wprintf "Dtemp=%d Threshold=%d", gDTemp&0xFF, gDTemp>>16&0xFF
gParam2 = gDTemp
gParam3 = gHeadDCM
gParam4 = gMediaDCM
gParam5 = 0
gParam6 = 0
gParam7 = 0
gParam8 = 0
gParam9 = 0
gParam10 = 0
gParam11 = 0
gParam12 = 0
gParam13 = 0
gParam14 = 0
gParam15 = 0
gParam16 = 0
//----- (4) get command from user
do
dosubr DisplayCHNTestOptions
Prompt "Enter the CHANNEL test number: (see above options)"
gOperation = getvalue
cls //Clear the user screen
row = RUNTIME_INFO_WINDOW_OPERATION_ROWNUM
col = RUNTIME_INFO_WINDOW_COLNUM
switch gOperation
case 1 :
gCommand = MINIARCO
getstr gOperationString, "Mini Arco"
wprintf "%s", gOperationString
break
case 2 :
gCommand = ARCO
getstr gOperationString, "Full Arco"
wprintf "%s", gOperationString
break
case 3 :
//ITR#43882 new Target Search Test (replaced headqual with target search) start
gCommand = TARGET_SEARCH
getstr gOperationString, "Target Search Calibration"
wprintf "%s", gOperationString
Prompt "Enter number of targets to test (Enter = 1):"
temp = getvalue
if (temp == 0)
temp = 1
eif
gParam5 = temp
Prompt "Enter ECC error limit (Enter = 1000):"
temp = getvalue
if (temp == 0)
temp = 1000
eif
gParam6 = temp
Prompt "Enter number of bits to read in power of 10 (Enter = 8):"
temp = getvalue
if (temp == 0)
temp = 8
eif
gParam7 = temp
Prompt "Enter the number of ECC symbols (Enter = 0):"
temp = getvalue
if (temp == 0)
temp = 0
eif
gParam8 = temp
break
//ITR#43882 new Target Search Test (replaced headqual with target search) end
case 4 :
gCommand = TPICAL_DVT
getstr gOperationString, "TPI Calibration"
wprintf "%s", gOperationString
getstr CodeFileName, "tpical.bin"
gFileID = TPICAL_FILEID
Prompt "Enter ZoneMap (Enter = 0x010402 = Zone 1, 16, 20):"
temp = getvalue
if (temp == 0)
temp = 0x010402
eif
gParam5 = temp
Prompt "Enter Starting TPI (Enter = 1):"
temp = getvalue
if (temp == 0)
temp = 1
eif
gParam6 = temp
Prompt "Use same TPI for all heads: Common TPI (Y or N):"
if( GetKeyFilter "NY" == 'Y' )
gParam7 |= 1
eif
Prompt "Force TPI and skip test? (Y or N):"
if( GetKeyFilter "NY" == 'Y' )
gParam7 |= 2
Prompt "Enter TPI code to manually force to (Enter = 1):"
temp = getvalue
if (temp == 0)
temp = 1
eif
gParam8 |= temp << 24
eif
Prompt "Smart TPI? (Y or N):"
if( GetKeyFilter "NY" == 'Y' )
gParam7 |= 4
eif
Prompt "Enter number of victim tracks (Enter = 3):"
temp = getvalue
if (temp == 0)
temp = 3
eif
gParam8 |= temp << 8
Prompt "Enter number of bits to read in power of 10 (Enter = 8):"
temp = getvalue
if (temp == 0)
temp = 8
eif
gParam8 |= temp << 16
Prompt "Enter number of writes for each aggressor track (Enter = 0):"
temp = getvalue
gParam9 |= temp
Prompt "Enter number of writes for each seek-away track (Enter = 0):"
temp = getvalue
gParam9 |= temp << 16
Prompt "Enter error limit for each track (Enter = 0):"
gParam10 = getvalue
Prompt "Enter ECC mode (Enter = 0):"
gParam11 = getvalue
Prompt "Enter ED_Limit, ED_TH12, ED_TH23, ED_TH34 (Enter = 0):"
temp = getvalue
gParam12 |= temp
Prompt "Enter ED_TH45, ED_TH56, ED_TH67, ED_TH78 (Enter = 0):"
temp = getvalue
gParam13 |= temp
Prompt "Enter DFH writer power (Enter = 0):"
temp = getvalue
gParam14 |= temp
Prompt "Enter squeeze percentage for adjacent writes (Enter = 0):"
temp = getvalue
gParam14 |= temp << 8
Prompt "Enter # of writes for squeeze (Enter = 0):"
temp = getvalue
gParam14 |= temp << 16
break
case 5 :
gCommand = VDTHQ_DVT
getstr CodeFileName, "vdthq.bin"
gFileID = VDTHQ_FILEID
getstr gOperationString, "VDT HeadQual"
wprintf "%s", gOperationString
if( gDrvPlatform == AVALON_PLATFORM)
do
prompt "Enter Zone map, Default=0x422 (zone 1,5,10), Min=2, max =0x7fe"
gParam5 = getvalue
if (gParam5 == 0)
gParam5 = 0x422
eif
until ( (gParam5 >=2) && (gParam5 <= 0x7fe))
else
do
prompt "Enter Zone map, Default=0x8402 (zone 1,10,15), Min=2, max =0xfffe"
gParam5 = getvalue
if (gParam5 == 0)
gParam5 = 0x8402
eif
until ( (gParam5 >=2) && (gParam5 <= 0xfffe))
eif
Prompt "Enter bits to read (Enter = 1000000000):"
gParam6 = getvalue
if (gParam6 == 0) // check for ENTER key or 0
gParam6 = 1000000000 // 1e9
eif
Prompt "Enter Error threshold (Enter = 150000):"
gParam7 = getvalue
if (gParam7 == 0) // check for ENTER key or 0
gParam7 = 150000
eif
break
case 6 :
gCommand = DFH_TD
getstr gOperationString, "TouchDown calibration"
wprintf "%s", gOperationString
do
prompt "Enter Zone map, Default(zones 1-7, 18-20):"
gParam5 = getvalue
if (gParam5 == 0)
gParam5 = 0x001C00FE
eif
until (gParam5 >=2)
break
case 7 :
gCommand = RWGAP_CAL
getstr gOperationString, "RWGap Calibration"
wprintf "%s", gOperationString
prompt "Enter Zone map, Default=0x100402 (zone 1,10,20)"
gParam5 = getvalue
if (gParam5 == 0) // check for ENTER key or 0
gParam5 = 0x100000 // zones 20
eif
break
case 8 :
gCommand = HOTARCO
getstr gOperationString, "Hot ARCO"
wprintf "%s", gOperationString
break
case 9 :
gCommand = EQIWOPT
getstr gOperationString, "WPTP Opt"
wprintf "%s", gOperationString
break
case 10 :
gCommand = TD_DVT //TD DVT 0x71
getstr gOperationString, "TouchDown DVT"
wprintf "%s", gOperationString
prompt "Enter Zone map, (Default: zones 1-7, 18-20):"
gParam5 = getvalue
if (gParam5 == 0)
gParam5 = 0x001C00FE
eif
prompt "Enter Run Index (options 0-9, Default is 0):"
gParam6 = getvalue
if (gParam6 == 0)
gParam6 = 0
eif
prompt "Enter Mode (1=optimized, 2=default Iw/OSC/OSD):"
gParam7 = getvalue
break
case 11 :
gCommand = 0FFFFh
getstr gOperationString, "Cancelled"
wprintf "%s", gOperationString
break
default :
// do nothing, do-until loop will prompt user again
break
eswitch
until (gOperation >= 1 && gOperation <= 10)
rvar1 = gCommand
esubr
楼主解释下,我表示看不懂 学习,学习,谢谢楼主分享和解释 肯定是好东西,但是完全看不懂啊 本帖最后由 yeboshi 于 2017-5-10 17:58 编辑
xingxiaodong 发表于 2017-4-20 16:18
楼主解释下,我表示看不懂
大家看的这些是TREX脚本,有一定的编程基础容易看明白,很多单词有全写的也有缩写的,迟点我把miniARCO和fullARCO的译文本完善再放出,就好理解了,并极力完善一些英文缩写,不致于以前的一些教程误导别人。我们现在做的ARCO就是高级读取通道优化,说是读取优化应该是读写优化更合适,其按照固件分别对:前置放大芯片补偿、磁头偏置、写电流、信号频率、同步信号延时、飞行高度(受热空气映响)、相邻磁道干扰、伺服电机非中心振摆、磁头点动捕获,等等作出数模控制变更值,让硬盘工作在最佳状态。所涉及内容太广,仍要时间完善,不致误导大家。
*这是后面补上去的,两份关于硬盘的美国专利文件(看了全文与西数公司十分吻合)显示:Adaptive Read Channel Optimization (ARCO)适配读取通道优化,而非网传与TREX出现的高级读取通道优化。process self test (PST)进程自测试。这两个应该这才是西数真正的解释。后续将这些文件上传。 感谢分享!不太懂! thanks for sharing 感谢分享!不太懂! 感谢分享,求精子
学习,学习,谢谢楼主分享和解释
页:
[1]
2