SATA控制器學習資料整理

目錄

1. 參考資料

2. SATA結構

2.1 應用層

2.2 傳輸層

2.3 鏈路層

2.4 物理層


1. 參考資料

首先,先推薦幾個好的參考資料

https://www.doc88.com/p-592167157036.html

這是一箇中文論文,可以先看中文的,再看下面英文的,英文的比中文 的寫的詳細

https://download.csdn.net/download/weiweiliulu/12465007

其實就是 Design of an Open-Source Sata Core for Virtex-4  FPGAs這篇英文論文

2. SATA結構

SATA 的每一層都分工明確,層次分明。

2.1 應用層

       當主機端SATA接口的命令寄存器被修改時,說明接口得到了一個新的讀寫操作指令,應用層會分析得到的磁盤操作命令並根據協議進行相應的解析,解析成對應的傳輸請求,最後根據數據傳輸請求要求傳輸層進行數據的傳輸操作。

說明:具體SATA我也沒調試過,只是看文章。我的理解是,應用層收到新的寄存器值,會根據下面的寄存器表,使用case語句,解析出不同傳輸操作。把不同的操作使能信號送入傳輸層,傳輸層再進一步做格式封裝。

       既然是寄存器,不得不說一下寄存器映射表,對應表可以看到每一個值對應的含義。把對應的寄存器值轉換成對應的操作。

說明 :FIS(frame information structure)

2.2 傳輸層

    傳輸層接收到應用層的數據傳輸請求後,將SATA接口中相關寄存器的內容按照協議規定的格式封裝層一個幀信息數據包FIS (frame information structure)。按照協議規定的各種數據傳輸控制流量,將命令幀信息包及數據信息依次傳遞給鏈路層。

具體的FIS 協議包內容較長,放到下一個博文描述。

    傳輸層位於中間,有打包同樣也有解包。 傳輸層發送命令和數據。

     命令主要作用是讀取或者設置SATA接口設備的狀態或者屬性信息,如sleep,idle,flush,cache等。設備端收到命令後,執行命令並以發送響應FIS幀作爲響應。

      數據有PIO數據讀寫和DMA數據讀寫。PIO 主要用來讀取少量數據,中間有一些控制和應答指令在裏面,但是DMA適合大容量的數據傳輸。

2.3 鏈路層

     負責控制幀的傳輸過程。鏈路層爲每一個幀定義了數據幀起始原語(SOF)和數據結束幀原語(EOF)。接收方通過辨認他們來判斷一個幀的邊界。鏈路層給幀信息封裝上SOF和EOF原語,數據,以及CRC校驗後,再將待發送的數據進行擾碼,擾碼完畢後再進行8B/10B編碼,最後由物理層發送出去。原語8b/10b轉換後,就是K碼和D 碼。本質上還是十六進制的數,fpga也處理不了所謂的碼字。表中也描述了碼字與十六進制數據之間的對應關係和原語的意義。

原語對應表

8b/10b在很多高速接口中都有,有什麼作用呢?

8b/10b編碼機制主要是保證數據傳輸的有效性和抗干擾性。使發送 0  1 頻率基本保持一致,並且連續的1或者0不超過5位。即每5個連續的1或0之後必須插入一位0或者1,從而保證信號DC平衡。具體編碼實現過程,可以在中文論文對應章節找到。

2.4 物理層

      物理層收到鏈路層處理過的數據後,將這些數據利用差分信號線發送出去,並通過特有的帶外信號(OOB)來檢查總線上是否掛載設備,完成上電初始化和復位。物理層的OOB信號是一個重點。

     OOB信號主要包含兩種:comreset/comminit信號和comwake信號。comreset信號有效週期是106.7ns的ALING信號序列,其後跟隨320ns空閒信號以示分開。comreset/comminit信號格式一樣,差別就是comreset信號只由主機端發送,而comminit由設備端發送。comwake信號的有效週期是106.7ns的ALING,其後是106.7ns的空閒信號。也就是comreset/comminit的空閒時間不一樣。comwake信號主機端和設備端均可發送。ALING是什麼呢?具體看原語對應表中介紹。

 我的理解是,最開始發送的是32比比特數據,後來變成1比特的高低電平發出去。根據發送數據源和空閒時間來區分誰是誰。模式時鐘是150M ,可以算出來需要幾個時鐘。

中間狀態機也是比較複雜,具體看英文論文中P22和中文論文中P14描述。

一個方法驗證鏈路是否建立,可以最終肯定有一個輸出的LINKUP 信號,也就是使能信號。

 

//////////測試////

sata 在測試的時候需要額外關注這幾個地方。

1)SATA復位 上電初始化完成,連接成功的使能信號 (OOB)

2)MGT接收器信號鎖定。MGT接收模塊OK

3) MGT發送器信號鎖定。MGT發送模塊OK

以上三步表示物理層已經實現了SATA硬盤初始化,等待接收或者發送數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章