隨著我們對SATA協議的逐步分析,SATA的物理層、鏈路層、傳輸層的基本原理和結構我們基本上都搞清楚了,現在,我們來看SATA協議的最后一部分,應用層的原理與結構,有的文獻上將應用層內部劃分出一個命令層來,但總的來看,功能上都是類似的。
應用層是 SATA協議的頂層結構,它負責所有ATA指令的執行與解析,向處理器報告當前硬盤運行狀態,生成對數據的讀寫請求,讀取和設置硬盤的工作性能模式,還包括對控制指令模塊寄存器的訪問。SATA應用層和PATA協議的應用層功能相同,主要負責所有ATA指令的解析和向處理器報告當前工作狀態。當主機的BIOS程序或軟件向硬盤控制器發送主機指令時,應用層對主機發送的SATA指令進行解析和執行,它通過指令和控制寄存器來接收指令,硬盤控制器的微處理器通過中斷和狀態信息設置狀態寄存器,響應相應的操作,并向主機報告當前的工作狀態,微處理器指示硬盤系統軟件執行下一步操作,設置ATA協議內部DMA的控制,實現數據的高速傳輸。主機向指令寄存器寫入指令,并讀取指令的狀態信息,設備處理器通過設置指令寄存器中的各種參數,控制中斷、復位和其他各種狀態。
應用層的命令處理部分,也可稱之為命令層,主要負責ATA命令的解析。在發送端,命令層將主機端的映射寄存器(Shadow Register Block)或者設備端的ATA 寄存器(ATA Register)內更新的寄存器值提取出來并轉換成對應不同交互機制的命令類型,然后通知傳輸層構造 FIS;在接收端,命令層通過解析傳輸層的FIS所攜帶的信息,判斷出是哪一種命令類型并作相對應的操作。SATA2.0標準協議中規定的命令主要包括兩大部分:與PATA兼容的ATA命令集和SATA新特性添加的新命令。其中常用的主要有IDENTIFY DEVICE、READ DMA、READ DMA EXT、READ SECTOR(S)、WRITE DMA EXT等。為了實現這些命令,SATA2.0標準協議將他們分為12個類型,每一種類型對應著不同的交互機制,每一種命令還采用不同的命令碼來加以區分,具體見表1、2 所示。
表1 SATA命令類型
表2 SATA常用命令表
以READ DMA EXT命令為例,介紹整個交互機制和過程。READ DMA EXT命令屬于DMA-In 命令類型,命令碼位25h。該命令使用DMA數據傳輸方式從設備端向主機端發送數據,一次DMA傳輸的數據必須為8K字節的整數倍。其交互過程如下圖1所示:
圖1 DMA-In類型命令交互過程
詳細流程為:
1、主機軟件首先初始化主機端的DMA控制器,包括指定用于存放硬盤數據的內存空間地址;
2、主機軟件初始化主機端的映射寄存器(BSY=0);
3、主機軟件向主機端映射寄存器發起READ DMA EXT命令(BSY=1),命令層識別該命令的交互機制并通知傳輸層構造一個Register FIS - Host to Device 發送到設備端;
4、設備端接收到該FIS后,校驗其正確性并解析出命令內容;
5、設備端執行命令-READ DMA EXT,讀取硬盤中目標扇區的數據并存儲在硬盤本地緩存中;
6、設備端然后通過Data FIS向主機端發送數據,根據扇區數決定發送Data FIS的數量,一次Data FIS所能傳輸的數據量為16個扇區(16×512Bytes=8KB);
7、主機端接收到數據后校驗是否出現錯誤;
8、通過DMA 控制器將主機端的緩存中的數據轉移到主機內存中,當速度不匹配時需要進行流量控制;
9、當數據全部發送完成后,設備端將完成狀態通過Register FIS-Device to Host發送給主機端;
10、主機端更新映射寄存器組中的值;
11、主機端向主機軟件發起中斷,報告完成狀態,結束命令。
應用層是SATA2.0標準協議的頂層,它為主機軟件提供編程接口,負責執行所有的ATA命令。應用層包含映射寄存器和SATA協議規定的寄存器組,主機軟件可以根據中斷標志和狀態信息訪問并更新這些寄存器,使得SATA標準接口根據命令完成相應的操作。主機端映射寄存器與PATA相兼容,包括了命令寄存器、設備寄存器、設備控制寄存器、錯誤寄存器、狀態寄存器等。下面對這些寄存器進行簡要介紹,如表 3所示。
表3 主機端映射寄存器表
除了映射寄存器之外,SATA還規定了16組SCR寄存器(Status and Control Register,狀態控制寄存器)。SCR寄存器獨立于映射寄存器之外,用于SATA標準接口新特性的狀態報告和錯誤信息。目前協議使用了 5 組,剩下的作為未來升級使用,其定義見表4。
表4 SCR 寄存器定義表
SATA 傳輸層完成各種FIS幀的封裝后,應用層利用這些封裝好的 FIS進行接口通訊。協議根據接口各種數據傳輸方式需要,定義設計各種不同的數據傳輸控制流程, SATA 協議設備端常用數據傳輸控制操作流程:
非數據命令類型操作流程
非數據命令操作類型主要讀取或設置SATA接口設備端的狀態或屬性信息等,如SLEEP , IDLE , FLUSH CACHE等命令。設備端收到此類命令后,執行該命令并以發送響應FIS幀作為回應,而響應FIS幀中包括了執行命令后的狀態信息以及可能的出錯信息,具體執行操作流程如圖2所示。
圖2 非數據命令類型操作流程
2. PIO數據讀寫命令類型操作流程
PIO 數據讀寫操作命令類型主要用作從 SATA 設備端的硬盤內部扇區中讀取少量數據,如讀取設備整體屬性的命令IDENTIFY,扇區讀取命令READ等。設備端收到命令后,設置狀態寄存器并準備發送數據,準備完畢后先發送PIO SETUP FIS信息幀,然后再將準備好的數據封裝成DATA FIS信息幀發送給主機端,如此循環直至數據傳輸完畢,最后發送響應 FIS信息幀表示傳輸完畢,具體執行操作流程如圖3。
圖3 PIO數據讀命令類型操作流程
3. DMA 數據讀寫命令類型操作流程
DMA 數據傳輸與 PIO大致相同,不同點在于DMA傳輸操作需要配置 DMA控制器,并利用該控制器來進行數據傳輸操作,而且一次可以傳輸多個DATA FIS信息幀,因此DMA數據傳輸率比PIO較高。
總體上看,SATA的應用層主要完成命令的處理和數據的傳輸,這些操作和PATA協議高度兼容,并添加了體現SATA特性的一些新的寄存器和命令。理解這些寄存器和命令的使用,是主機端驅動開發和設備端數據讀取的基礎。
通過連續5篇文章的分析,我們對SATA協議已經有了一個清晰的認識,對SATA的框架基本上分析了一遍,但“光說不練是假把式”,后續的文章中,我們將動用SATA協議分析的利器-SATA總線分析儀,連接主板和SATA硬盤,具體的展現SATA主機端和設備端通信的細節,敬請期待。
關于達思科技
達思科技,國家級高新技術企業,天津市國家保密局涉密載體數據恢復唯一協作單位,數據恢復和取證行業著名品牌,是一家以技術研發為核心生產力的技術型企業,在國內乃至全亞洲數據恢復與取證技術領先!
達思科技 中國數據恢復與取證專家!
更多數據恢復與取證技術、互聯網請關注微信公眾訂閱號:woocs
微信號:woocs
長按識別二維碼關注
專注數據恢復與取證技術、互聯網
投稿:woocs@qq.com