yeboshi 发表于 2017-4-19 12:00:08

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

xingxiaodong 发表于 2017-4-20 16:18:04

楼主解释下,我表示看不懂

rifvpww 发表于 2017-4-20 23:21:51

学习,学习,谢谢楼主分享和解释

小宇子 发表于 2017-4-22 10:34:24

肯定是好东西,但是完全看不懂啊

yeboshi 发表于 2017-5-6 09:25:23

本帖最后由 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)进程自测试。这两个应该这才是西数真正的解释。后续将这些文件上传。

zuson 发表于 2018-2-16 18:18:51

感谢分享!不太懂!

budi99 发表于 2018-4-6 18:59:03

thanks for sharing

pp-ss10907 发表于 2018-6-14 10:16:21

感谢分享!不太懂!

coastarica 发表于 2018-8-24 17:46:12

感谢分享,求精子

cemg2 发表于 2018-9-1 12:05:31


学习,学习,谢谢楼主分享和解释
页: [1] 2
查看完整版本: WDR自校准的16个参数(上)