SATA控制器學習資料整理

2021-10-06 13:07:39 字數 2460 閱讀 2289

目錄

1. 參考資料

2. sata結構

2.1 應用層

2.2 傳輸層

2.3 鏈路層

2.4 物理層

這是乙個中文**,可以先看中文的,再看下面英文的,英文的比中文 的寫的詳細

其實就是 design of an open-source sata core for virtex-4  fpgas這篇英文**

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

當主機端sata介面的命令暫存器被修改時,說明介面得到了乙個新的讀寫操作指令,應用層會分析得到的磁碟操作命令並根據協議進行相應的解析,解析成對應的傳輸請求,最後根據資料傳輸請求要求傳輸層進行資料的傳輸操作。

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

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

說明 :fis(frame information structure)

傳輸層接收到應用層的資料傳輸請求後,將sata介面中相關暫存器的內容按照協議規定的格式封裝層乙個幀資訊資料報fis (frame information structure)。按照協議規定的各種資料傳輸控制流量,將命令幀資訊包及資料資訊依次傳遞給鏈路層。

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

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

命令主要作用是讀取或者設定sata介面裝置的狀態或者屬性資訊,如sleep,idle,flush,cache等。裝置端收到命令後,執行命令並以傳送響應fis幀作為響應。

資料有pio資料讀寫和dma資料讀寫。pio 主要用來讀取少量資料,中間有一些控制和應答指令在裡面,但是dma適合大容量的資料傳輸。

負責控制幀的傳輸過程。鏈路層為每乙個幀定義了資料幀起始原語(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平衡。具體編碼實現過程,可以在中文**對應章節找到。

物理層收到鏈路層處理過的資料後,將這些資料利用差分訊號線傳送出去,並通過特有的帶外訊號(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硬碟初始化,等待接收或者傳送資料。

ESXi6 7直通板載SATA控制器

操作步驟 1.在vsphere web client 開啟主機ssh。主機 操作 服務 啟用安全shell ssh 2.使用ssh客戶端連線你的主機,輸入命令 lspci v grep class 0106 b 1你會看到 0000 00 1f.2 sata controller mass stor...

jmeter控制器 交替控制器

1.簡單使用 如下圖,設定1個執行緒,執行3次 執行結果如下圖 2.巢狀乙個控制器,不勾選忽略子控制器 測試計畫如下圖 巢狀乙個迴圈控制器,迴圈次數設定3次 執行緒組設定1個執行緒,執行5次 執行結果如下圖 總結 交替執行到迴圈控制器時,迴圈執行結束後,在進行下一次的交替。3.巢狀乙個控制器,勾選忽...

子控制器 和 父控制器

1 新增子控制器很簡單 分兩步 乙個是 view 乙個是 controller 1 self addchildviewcontroller tablectr 2 self.view addsubview tablectr.view 最後不要忘了加一行 tablectr didmovetoparent...