• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    硬盘基地手机版
  • 关注官方公众号
    微信扫一扫关注
    硬盘基地公众号
  • [讨论] WDR自校准的16个参数(上)

    [复制链接]
    yeboshi 发表于 2017-4-19 12:00:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
    本帖最后由 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-44  2-46   3-70  4-6B  5-69  6-6F  7-6A  8-4A \n"
       sprintf Line4, "    9-EqIwOpt  10-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-SNAP  8-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[enter|0]=40)"
       gDTemp = 20
       if (gDTemp == 0)                            // check for ENTER key or 0
          gDTemp = 40
       eif

       Prompt "Enter DTEMP Threshold in degrees C (Default[enter|0]=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[enter]=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[enter]=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[enter]=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

    精彩评论10

     楼主| 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)进程自测试。这两个应该这才是西数真正的解释。后续将这些文件上传。
    回复 支持 反对

    使用道具 举报

    budi99 发表于 2018-4-6 18:59:03 | 显示全部楼层
    thanks for sharing
    回复 支持 反对

    使用道具 举报

    coastarica 发表于 2018-8-24 17:46:12 | 显示全部楼层
    感谢分享,求精子
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注0

    粉丝1

    帖子13

    发布主题
    阅读排行 更多
    广告位

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    .

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    .
    Email:9443120@qq.com
    移动电话:13011628855

    Powered by Intohard X1.0© 2001-2013 Inhdd Inc.( 鲁ICP备09029790号 )