前面的幾篇文章中,我們已經分析了SATA協議的物理層和鏈路層,下面繼續分析SATA協議的傳輸層。
傳輸層的功能,簡單的說,就是面向應用層和鏈路層來調整適應兩層傳輸的數據格式,它根據應用層的讀寫請求指令和鏈路層的應答信息來啟動數據包的傳送,傳輸層控制主機和硬盤之間傳輸控制指令和數據的幀信息結構(Frame Information Structures,FIS)的格式,傳輸層不會改變傳輸數據的內容,只會將要傳輸至應用層的數據打包成數據幀的結構,并且將接收到的數據幀還原成數據傳輸至鏈路層。
具體來說,傳輸層主要負責FIS幀信息結構的封裝與解析。發送數據時,傳輸層將映射寄存器中的命令,數據等按協議規定結構進行封裝,之后將封裝幀信息結構傳遞給鏈路層進行發送;接收數據時,傳輸層會將鏈路層傳遞的數據流按照SATA協議規定的相應數據結構進行解析,檢查FIS中的各種控制字查看數據傳輸狀態。傳輸層位于數據鏈路層的上一層,主要負責 FIS(Frame Information Structure,幀信息結構)的封裝與解封。它不需要知道一幀數據具體是如何傳輸的,只負責在發送端按照上層命令構造FIS,在接收端提取出FIS 中的數據和控制信息。
當傳輸層接收到上層FIS封裝請求后,需要完成的功能包括:
1、收集基于FIS請求類型的FIS內容;
2、按照既定的順序排列FIS內容;
3、向數據鏈路層發送幀傳輸請求并發送FIS;
4、管理Buffer/FIFO數據流,需要時告知數據鏈路層流量控制;
5、接收來自數據鏈路層的對方的傳輸狀態報告;
6、向上層報告正確或錯誤傳輸狀態;
當傳輸層接收到來自數據鏈路層的FIS后,需要完成的功能包括:
1、接收FIS并確定其類型;
2、根據FIS的類型將FIS內容分配到指定的位置;
3、對于主機端的傳輸層而言,接收到FIS的同時也需要向設備端返回一個FIS;
4、向上層報告正確或錯誤傳輸狀態。
傳輸層接收到來自于應用層的命令請求后,根據命令的不同將相關寄存器中的信息按照SATA標準協議規定的格式封裝為FIS傳遞給數據鏈路層。當數據鏈路層成功接收后,向傳輸層反饋一個傳輸完成的狀態標志。傳輸層接收到來自數據鏈路層的FIS后,判斷該FIS是否有效以及類型。如果是有效的類型,則按照SATA標準協議規定格式進行解析,并將其中的數據映射到對應的寄存器中,然后通知應用層更新相應寄存器的值。如果是無效的類型,則丟棄。就是說,對寄存器的操作,是在傳輸層完成的。表1為SATA的寄存器列表
表1 SATA寄存器列表
FIS(Frame Information Struction,幀信息結構)是一組 DWs的集合,用于主機端和設備端之間的信息交換(包括數據和控制信息),配合 SOFP和 EOFP作為開始和結束標志組成完整的一幀數據。SATA協議一共定義了八種FIS,包括寄存器、配置和數據三大類型,每一種 FIS 的第一個DW的第一個字節是類型代碼,代表FIS的類型和名稱。此外還預留了六組類型值以備未來版本升級使用。表2為FIS的類型
表2 SATA協議的FIS的類型
具體介紹一下各個FIS的功能和結構:
主機寄存器信息幀,Register FIS - Host to Device,用于將主機端寄存器組中更新過的值傳遞到設備端寄存器組中,該FIS只能由主機發送。每當主機端寄存器組的值發生變化,主機端可以發起一次Register FIS - Host to Device到設備端,設備端將接解析出的信息更新到自己的ATA 寄存器組中,并執行相應的操作。Register FIS - Host to Device 的類型代碼為 27h,位于第一DW第一字節處,該FIS 共有5 個DWs。其中,C 位的值(“0”或“1”)取決于主機端寄存器組中命令寄存器(Command Register)或設備控制寄存器(Device Control Register)發生了變化,特征寄存器(Feature Register)、設備寄存器(Device Register)、LBA 地址寄存器(LBA Address Register)等從對應的主機端寄存器組中獲取,R 位和保留字節一律賦值“0”,該幀結構如下圖所示:
圖1 Register FIS - Host to Device 幀結構圖
在主機端的命令寄存器或控制寄存器中的內容被改變時,主機端則立即觸發將映射寄存器的內容按早定義的FIS結構封裝發送出去。當設備端接收到一個主機寄存器信息幀時,主機端按協議定義的結構提出幀信息的命令,控制信息,更新自身映射寄存器中相應的信息,并來判斷是執行命令操作或執行控制操作。
從圖1可看出,該幀由5組DW組成,共20個字節構成,包含了各個必要的寄存器的信息。
設備信息幀,Register FIS - Device to Host 用于將設備端寄存器組中更新過的值傳遞到主機端寄存器組中以反饋命令執行情況,該 FIS 只能由設備發送。每當設備完成了一次命令,設備端便會發起一次 Register FIS - Device to Host 到主機端,主機端接收并解析出信息更新自己的寄存器組。Register FIS - Device to Host 的類型代碼為34h,位于第一 DW 第一字節處,該FIS共有5個DWs。其中,I 位是中斷標志位,錯誤寄存器(Error Register)、狀態寄存器(Status Register)、LBA 地址寄存器等從對應的設備端寄存器組中獲取,R位和保留字節一律賦值“0”,其幀結構如圖2所示:
圖2 Register FIS - Device to Host 幀結構圖
當設備端完成了某項命令之后,需要更新主機端的映射寄存器狀態時,則發送設備寄存器信息幀至主機端,通過狀態寄存器的信息向主機報告命令完成狀態及可能的錯誤信息。當主機端接收到一個設備寄存器信息幀,主機端會按照協議規定的格式對信息幀進行解析,并更新映射寄存器中的內容。
DMA響應信息幀,DMA Activate FIS用于設備端響應主機端發起的 DMA 傳輸請求,該FIS只能由設備發送。當主機端需要發送多個Data FISes以完成一次DMA傳輸過程時,主機端在每次發送 Data FIS 之前都必須確認成功接收到DMA Activate FIS,這說明設備端已經做好了接收 Data FIS 的準備。DMA Activate FIS 的類型代碼為 39h,位于第一 DW 第一字節處,該 FIS 共有1個DWs,其幀結構如圖3所示:
圖3 DMA Activate FIS 幀結構圖
DMA建立信息幀,DMA Setup FIS 用于設備端以 First-Party DMA 方式訪問主機內存時,在正式傳輸數據之前,對主機/設備端DMA 控制器進行配置。該FIS允許設備端自行建立DMA通道,直接對DMA控制器發送請求通知,可由主機/設備發送。DMA Setup FIS 的類型代碼為41h,位于第一DW第一字節處,該FIS共有7個DWs。其中,D 位代表數據傳輸方向;A 位表示第一次發送Data FIS是否需要 DMA Activate FIS 觸發;I 位是DMA傳輸完成的中斷標志;R位和保留字節一律賦值“0”,其幀結構如圖4所示:
圖4 DMA Setup FIS 幀結構圖
數據信息幀,Data FIS 用于主機端和設備端之間傳遞數據,主機/設備均可發送。Data FIS 的類型代碼為 46h,位于第一DW第一字節處。該FIS的長度是不確定的,根據實際情況而定,最大值不能超過2048個DWs。如果待發送的數據不足DW的整數倍,那么需要在數據末尾補“0”,其幀結構如圖5所示:
圖5 Data FIS 幀結構圖
BIST響應信息幀,BIST Activate FIS 用于使接收方進入回環測試模式,主機/設備均可發送。BIST Activate FIS 的類型代碼為58h,位于第一DW第一字節處。正常工作時不會出現,其幀結構如圖6所示:
圖6 BIST Activate FIS 幀結構圖
PIO傳輸建立信息幀,PIO Setup FIS 用于設備端向主機端提供關于 PIO 數據的充足信息,使得主機端可以更有效地控制 PIO數據傳輸,該 FIS只能由設備發送。在PIO傳輸中,無論是主機端發送數據給設備端還是設備端發送數據給主機端,在每一次傳輸 Data FIS之前設備端都會給主機端發送一次PIO Setup FIS。PIO Setup FIS 的類型代碼為 5Fh,位于第一DW第一字節處,該FIS共有5個DWs。其中,D 位代表數據傳輸方向;I 是中斷標志位;R 位和保留字節一律賦值“0”,其幀結構如圖7所示:
圖7 PIO Setup FIS 幀結構圖
無論設備端需要準備發送或接收數據,在設備端與主機端之間以 PIO數據傳輸方式進行數據傳輸時,設備端都需要向主機端發送PIO 操作信息幀,通知主機端 PIO 操作的各項相關信息,如 PIO 傳輸前后的地址,扇區大小,狀態等。當該信息幀傳輸完畢后,設備端則進入發送或接收數據狀態,等待主機端的相應信息。
設備置位信息幀,Set Device Bits FIS 用于更新主機端寄存器組中僅對設備開放寫權限的寄存器值,比如錯誤寄存器、狀態寄存器中的 6位,該 FIS 只能由設備發送。設備端首先對自己的寄存器進行改寫,然后向主機端發送一個 Set Device Bits FIS,當主機端接收到將改寫過的內容后更新自己的寄存器。Set Device Bits FIS 的類型代碼為A1h,位于第一DW第一字節處,該FIS共有2個DWs。其中,Status Hi 表示狀態寄存器的 4、5、6 位;Status Lo表示狀態寄存器的 0、1、2 位;I 是中斷標志位;R 位和保留字節一律賦值“0”,其幀結構如圖8所示:
圖8 Set Device Bits FIS 幀結構圖
由以上分析,可知,SATA的傳輸層,主要處理信息包,所用到的寄存器與PATA協議的類似。下一篇文章中將介紹SATA的應用層的原理與結構,敬請關注。
關于達思科技
達思科技,國家級高新技術企業,天津市國家保密局涉密載體數據恢復唯一協作單位,數據恢復和取證行業著名品牌,是一家以技術研發為核心生產力的技術型企業,在國內乃至全亞洲數據恢復與取證技術領先!
達思科技 中國數據恢復與取證專家!
更多數據恢復與取證技術、互聯網請關注微信公眾訂閱號:woocs
微信號:woocs
長按識別二維碼關注
專注數據恢復與取證技術、互聯網
投稿:woocs@qq.com