SerialATATechnology2012.06.11AusterLaiSATABasicsSATA1.0傳輸速度為1.5Gbit/s。支援進階主機控制器介面(AHCI)功能,可讓SATA儲存裝置啟用進階SATA功能,例如NCQ及熱插拔。SATA2.0傳輸速度可達3.0Gbit/s在2004年正式推出,符合ATA-7規範。SATABasicsSATA2.0進步的地方在於:1.3.0Gb/s的高傳輸速度2.支援真正的SATA指令排序(NCQ)3.PortSelector:可使Host埠的兩個獨立SATAPort連接至同一設備SATABasics4.PortMultiplier:是一種可以在一個控制器上擴展多個SATA設備的技術5.介面和連線的強化:SATA3Gb/s資料線長度最多2m。SATA1.5Gb/s只是1m,PATA更短到50cmSATABasicsSATA3.01.傳輸速度可達6Gbit/s2.新增NCQ的指令數目、優先權及演算法,包括為即時性的資源提供優先處理,主要用於影像及音像傳輸。3.採用全新INCITSATA8-ACS標準,改良傳輸訊號技術亦大幅減低了傳輸時所需功耗。SATABasicsSATA資料線由兩條傳送方向相反的差分信號對(LVDS,共4根)組成,發送(Tx)和接收(Rx)各走一路。不過,SATA在一對信號線上傳送資料的同時需要用另一對信號線返回流控(flowcontrol)資訊,所以仍然是半雙工(halfduplex)。SATAIO還是SATAII?SATAII並不是規格的名稱,而是制定SATA1.0延伸架構的組織名稱,該組織已經正式改名為SATAIO。SATAII是SATA1.0a的『延伸』,延伸的新技術完全相容於SATA1.0,但不代表廠商就一定要加入這些新功能。從SATAIO聲明解讀,新技術可以選擇性加入而非必要,如果硬碟廠出了一台標有SATAII(SATAIO)的產品,但既沒3GB/S也沒NCQ,事實上也不能說它錯。NativeCommandQueuing(NCQ)硬碟有支援NCQ,指令會先保留在硬碟控制晶片內,最多可以保留到32組指令,硬碟會根據指令所需要的資料位置重新排列,以最佳的順序送出,而降低指令的存取時間。NCQ示意圖,沒有NCQ時讀寫順序為1234,碟片要轉兩圈。有NCQ後指令會重排成1324,碟片只需要轉一圈。SATAArchitectureModelSATAArchitectureModelPhysicalLayer:1.OOBhandshake,2.Serial&ParallelDataTransfer,3.還有BISTfunctionLinkLayer:1.將要打出去的data做編碼,將收進來的data做解碼,2.維持LinkLayer的handshake機制.TransportLayer:1.將ApplicationLayer要做的Command轉化成FIS的handshake,2.對FIS的組成和解開.ApplicationLayer:1.最高層級的Layer,進行ATA或ATAPIcommand的執行,2.implementation上很多是用軟體處理.PhysicalLayerTransmission(Tx)andReception(Rx)ofa6Gb/sserialstreamPoweronsequencingSpeednegotiationProvidestatustolinklayerSupportpowermanagementrequestsOut-of-Band(OOB)signalgenerationanddetectionPhysicalLayer-OOB通訊鏈結的建立是靠OOB(OutOfBand)的檢測實現的,並且向上層LinkLayer提供了物理層的鏈結情況。透過OOBhandshake,host與device可以決定要在Gen1,Gen2或Gen3做data傳輸。OOB主要的用意有:1:初始化(initialization)2:傳送速度的協商3:重置(Reset)4:從省電狀態的喚醒PhysicalLayer-OOBOOB信號的實踐,實際上是仰賴著COMRESET/COMINIT與COMWAKE三個PHY信號線。1:COMRESET:主機對裝置的硬體重置。2:COMINIT:裝置送往主機。3:COMWAKE:主機或是裝置可以激發該信號來將PHY從省電狀態抽離。COMREST、COMINIT和COMWAKE,由四個D/K組成,其组成为:{D27.3D10.2D10.2K28.5}(ALIGNPrimitive)PhysicalLayer-OOBCOMRESET由兩部分相互間隔構成,一部分是突發長度為160個UI(UnitInterval)約106.7ns的ALIGN,另一部分是長度為480UI約320ns的Idle。COMREST和COMINIT形式上是一樣的,但COMREST只能從host到device,而COMINIT只能從device到host。PhysicalLayer-OOBOOBDetect:通過檢測ALIGN資料流程的寬度和ALIGN資料流程的間隙達到的。PhysicalLayer-Initiate通迅鏈結建立過程:1:主機重置,發出COMREST。2:設備檢測到COMRESET後以COMINIT回應。(COMINIT為重新連接開始信號,設備可以在任意時間發送COMINIT重新建立連接)若沒有COMINIT的通知,HOST就會重覆步驟1,直到DEVICE回覆為止,這也是系統允許熱插拔的關鍵。3:主機calibrate,發出COMWAKE。4:設備接收到COMWAKE後,設備連續發送6個COMWAKE信號,接著連續發送ALIGN進行傳送速度的協商。PhysicalLayer-Initiate5:主機鎖存資料。主機接收到COMWAKE後,以支援的最低速率連續發送D10.2資料,同時鎖存檢測接收的資料,當檢測到設備發送的ALIGN後,以接收的速率將ALIGN轉發給設備。D10.2是0101010101...這樣0和1交替的波形,可以讓device端更容易做clockrecovery的動作.主機在發送了COMWAKE後至少要在880ps內接檢測到ALIGN,否則主機重啟上電序列重新檢測設備,直到應用層將其終止。6:設備鎖存資料,檢測到ALIGN後發送同步信號SYNC,通訊建立成功,進入到正常操作模式。如在54.6us內未檢測到ALlGN,則進入錯誤處理,等待重新連接。7:當主機接收到三個非ALIGN後,鏈結建立完成,進入正常操作。PhysicalLayer-InitiatePhysicalLayer-InitiateDevice與Host連接是首先從Device支持的最高速開始的,如果最高速不滿足則用較低速率再次匹配,直到最低速率也不能匹配後Device將進入error狀態;換速等待時間為54.6us(2048個ALIGNDWORD傳輸時間);PhysicalLayerDetailedBlockDiagramLinkLayer1.Providesframeflowcontrol2.CRCgeneration/checking3.Scrambles/descramblesdataandcontrolwords4.8b/10bencodingConduct5.ConvertsdatafromtransportlayerintoframesLinkLayer傳輸層有FIS要傳送,鏈結層計算CRC值、加擾和8B/10B編碼後,加上SOF和EOF封裝成frame,傳遞給物理層。通過插入各種primitive進行流量控制,在成功傳遞完有效資料後,連接層等待對方的應答,並把結果傳給上層;從物理層接收到有效資料時,進行8B/10B解碼、解擾以及CRC效驗,然後將資料提交到傳輸層。LinkLayer-8B/10B8B/10B編解碼:資料值可以統一的表示為Dx.y或Kx.y,其中D表示為資料字元,K表示為特殊的控制字元,x表示輸入的原始資料的低5位元,y表示輸入的原始資料的高3位元。輸出位元數目總共是10個位元,但只有「+2」「+0」「-2」三種組合。「+2」是指4個位元0,與6個位元1;「+0」是指5個位元「0」,與5個位元「1」;「-2」是指6個位元「0」,與4個位元「1」,利用這種「不均等性-Disparity」的特性而具有強大的直流平衡(DCBalance)功能,可使得發送的「0」、「1」數量保持一致,連續的「1」或「0」基本上不超過5位。LinkLayer-8B/10B編碼分為兩個階段:階段一,把低5位元資料結合D/K#與CRD的當前狀態(正或負)查5B/6B資料編碼表,產生高6位元資料。階段二,把高3位元資料結合D/K#與CRD當前狀態查3B/4B編碼資料表,產生低4位元資料。對K控制字元的編碼方式和D資料字元編碼方式一樣。協定中只使用了兩個控制字元K28.3和K28.5LinkLayer-8B/10BLinkLayer-8B/10B例如一組8位元的資料是10110101(B5h):首先,分成兩組101與10101a=10101(21)b=101(5),符號為D21.5,在下表中的位序為HGFEDCBA,a(EDCBA)經過5B/6B編碼為abcdei,b(HGF)經過3B/4B編碼為fghj。LinkLayer-8B/10BLinkLayer-8B/10BExample:HEXnumber45HEXnumberBCLinkLayer–CRDCurrentRunningDisparity(CRD),反映所發送的‘1’和‘0’的總數,用一位二進位數字來表示正和負(-1and1)。當傳輸完一次資料後,SATA必須根據當前的傳輸資料計算下一個CRD值。交替使用RD+和RD-欄的值,使差分信號的直流分量盡量小。計算規則如下:(1)資料‘l’的個數大於‘0’的個數,那麼CRD為正。(2)資料‘0’的個數大於‘1’的個數,那麼CRD為負。(3)資料中‘l’的個數等於‘0’的個數,則CRD的值不變。LinkLayer–CRD00111111101011100101010010018bCharacter0x3FThis10bCharactertransmittedwhenCRDnegativeThis10bCharactertransmittedwhenCRDpositiveThischaracter6ones4zerosDisparity+2--nextCRDpositiveThischaracter4ones6zerosDisparity-2--nextCRDnegativeLinkLayer–Scrambling資料在進行8b/10b編碼之前,必須先行資料打散(Scramble)的處理,目的是為了降低EMI。實現方式是由LFSR(LinearFeedbackShiftRegister)的方式來實踐;基本原理是將資料的8位元與LFSR暫存器的16位元輸出做XOR的處理。多項式G(x):LinkLayer–Scrambling規定LFSR的初始值為0xFFFF,LFSR必須在SOF標誌前就要被初始化,在SOF與EOF之間的資料,包括CRC值都需要加擾。對於操作基元Primitive是不需要加擾的資料處理流程:對於一個資料包,在SOF後的資料就必須計算其CRC值,同時這個資料必須和擾碼器的輸出進行XOR操作,操作結果送往8B/10B編碼器編碼;反之,在接收方,資料先通過10B/8B解碼,再與擾碼器的輸出結果進行XOR操作,最後計算資料的CRC值。LinkLayer–CRCCRC的計算是以SOF和EOF之間的所有資料(即不包括操作基元)為物件,以Dword(32-bit)為單位,如果資料的內容不是Dword的整數倍,需要在資料包的後面用‘0’來補充。協議規定CRC的初始值為0X52325032,SOF和EOF之間的所有資料不能超過2064個