SATA學(xué)習(xí)筆記1 - Link Layer初認(rèn)識

最近因為工作原因開始學(xué)習(xí)SATA屡江,因為這個不涉及公司機(jī)密惹苗,我就把我學(xué)習(xí)的內(nèi)容搬到網(wǎng)上來劳闹,這樣也方便自己日后查看样漆。這個系列文章是按照我學(xué)習(xí)的進(jìn)度而不是按照SATA Specification或者參考書籍的順序來寫的京景,如果有機(jī)會,我會在之后重新調(diào)整文章順序仰挣。

Link Layer主要負(fù)責(zé)FIS的傳輸和接收顷锰,F(xiàn)IS是什么呢州藕?FIS就是Frame Information Structure的簡寫,SATA的Host和Device間都是通過FIS進(jìn)行通信的严嗜,我會在之后的文章中單獨介紹FIS。它通過一系列的辦法(比如添加CRC,進(jìn)行8bit/10bit編碼解碼踢俄,對數(shù)據(jù)和primitive進(jìn)行scramble)保證FIS能順利地在Host和Device間進(jìn)行傳輸,下面是Linker Layer的示意圖:

Link Layer.png

這一層要做的事情還挺多,比如進(jìn)行CRC的生成和檢測查剖,將數(shù)據(jù)進(jìn)行8b-10b的編碼和解碼菌仁,對數(shù)據(jù)和primitive進(jìn)行scramble等疟赊。下面是一個更詳細(xì)的示意圖:

Link Layer Detail.png

從上圖我們可以看出椅挣,當(dāng)Link Layer接收到來自于Transport Layer的FIS后,Link Layer需要添加CRC到FIS中。同時诉瓦,所有的FIS會被加上SOF和EOF這兩個primitive,因此昔脯,在這層傳輸?shù)腇IS長這樣:

Link Layer FIS.png

協(xié)議規(guī)定payload(FIS + CRC)最多能有2049DW(DW = 32bit)云稚,也就是8196Bytes桑李。一般的非數(shù)據(jù)類型的FIS都遠(yuǎn)遠(yuǎn)小于8196Bytes禁荒,最大的除數(shù)據(jù)類型的FIS占7DW也就是28Bytes。FIS payload的大小會影響data flow,關(guān)于data flow我也會在之后的文章中講解惊暴。下面我們就來看看這一層的一些細(xì)節(jié)罕模,首先我們來看看FIS Scrambling。

FIS Scrambling

在信號的傳輸過程中媒殉,如果信號具有一定的重復(fù)性(pattern repetition)摔敛,那么在這種情況下,EMI(Electromagnetic interference電磁干擾)會比較高桃犬。為了減少EMI行楞,我們需要將信號的周期性打亂子房,讓信號更像是隨機(jī)的。為了實現(xiàn)這一目的尾序,在Link Layer中躯砰,我們會用scrambler來對信號進(jìn)行scramble。

在這層中兰怠,一共有兩種scrambling機(jī)制李茫,第一種是只scramble FIS+CRC魄宏,不scramble任何primitive;第二種是用于scramble重復(fù)的primitives宠互,這被稱為primitive suppression予跌。 對于第一種scrambling,之所以不對primitive進(jìn)行擾亂频轿,是因為在physical layer,我們需要知道primitive到底是什么集币。如果對primitive進(jìn)行scramble的話翠忠,在這里,physical layer根本就不知道接收的primitive到底是什么(這是在unscramble前)当娱,因此考榨,我們不對primitive進(jìn)行擾亂河质。而對于第二種scrambling,因為有其它機(jī)制的存在散休,即使一些primitives被scramble了乐尊,Device端也是知道這些primitives是什么的,因此我們可以將重復(fù)的primitives進(jìn)行scramble限府。

我們下面通過一個例子來看第二種scrambling是如何實現(xiàn)的:

Primitive Suppression

要實現(xiàn)這種scrambling胁勺,我們需要使用特殊的primitive - CONT独旷。比如在這個例子中,為了減少X_RDY傳輸?shù)臄?shù)量蛇捌,我們需要先發(fā)送2個X_RDY咱台,之后再發(fā)送一個CONT回溺,當(dāng)CONT發(fā)送完后,我們就可以將剩下的X_RDY進(jìn)行scramble萍恕。當(dāng)遇到第一個不是X_RDY并且沒有被scramble的primitive時车要,說明所有的X_RDY都已經(jīng)傳輸完成翼岁,那我們就不要對之后的primitive進(jìn)行擾亂了。 注意琅坡,并不是所有的primitive都能這樣操作榆俺,比如SOF,EOF陪捷,CONT等就不能進(jìn)行primitive suppression诺擅,下面這些primitives是可以進(jìn)行primitive suppression的:

Primitive Support Suppression

8b/10b編碼譯碼

我對這部分不是很了解掀虎,只知道這么做是為了將clock信號嵌入在傳輸?shù)男盘栔校瑥亩鴾p少單獨傳輸clock信號時產(chǎn)生的EMI驰怎。

FIS Arbitration

Link Layer接收到來自Transport Layer的發(fā)送FIS通知后县忌,它會發(fā)出X_RDY的primitive給接收端继效。有一種情況就是當(dāng)Host和Device同時發(fā)出X_RDY后,如果不采取任何措施的話厉颤,兩端都會等對方發(fā)出R_RDY凡简。但此時BUS是被X_RDY占據(jù)了,兩端都不能發(fā)出R_RDY帜乞,這就形成了一種死鎖黎烈。為了解決這種問題,SATA協(xié)議要求Device端具有更高的優(yōu)先級津畸,也就是出現(xiàn)這種情況時必怜,Host端會放棄發(fā)送X_RDY梳庆,轉(zhuǎn)而發(fā)送R_RDY來回應(yīng)Device端的請求。

FIS傳輸與接收流程

下面我們來看看FIS到底是如何在Host和Device間進(jìn)行傳輸?shù)模?/p>

  1. 首先膏执,發(fā)送端的Link Layer接收到Transport Layer的發(fā)送FIS的通知后更米,會持續(xù)發(fā)出X_RDY。
  2. 當(dāng)接收端收到X_RDY后迟几,它的Link Layer持續(xù)發(fā)送R_RDY栏笆。
  3. 當(dāng)發(fā)送端接收到R_RDY后蛉加,它開始發(fā)送FIS(SOF+FIS+CRC)。
  4. 接收端收到SOF后就會持續(xù)發(fā)出R_IP厂抽。
  5. 當(dāng)發(fā)送端送出EOF后丁眼,它會持續(xù)發(fā)出WTRM并等待傳輸?shù)慕K止户盯。
  6. 接收端在收到并驗證了FIS嵌施,CRC等信息后饲化,發(fā)出R_OK莽鸭,表示接收端完成了接收工作吗伤。
  7. 之后,發(fā)送端會持續(xù)送出SYNC來讓接收端的BUS進(jìn)入idle狀態(tài)硫眨。
  8. 接收端收到SYNC后也會持續(xù)發(fā)出SYNC來使發(fā)送端的BUS進(jìn)入idle狀態(tài)足淆。

下面我們來看看示意圖:
步驟1 - 2:

FIS傳輸 步驟1-2.png

步驟3 - 4:

FIS傳輸 步驟3-4.png

步驟5 - 6:

FIS傳輸 步驟5-6.png

下面這是一個實際測試中的FIS傳輸trace,結(jié)合這個trace能更好的理解FIS的傳輸和接收:

FIS Trace.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末礁阁,一起剝皮案震驚了整個濱河市巧号,隨后出現(xiàn)的幾起案子姥闭,更是在濱河造成了極大的恐慌丹鸿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棚品,死亡現(xiàn)場離奇詭異靠欢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)铜跑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門门怪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锅纺,你說我怎么就攤上這事掷空。” “怎么了囤锉?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵坦弟,是天一觀的道長。 經(jīng)常有香客問我官地,道長减拭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任区丑,我火速辦了婚禮拧粪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沧侥。我一直安慰自己可霎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布宴杀。 她就那樣靜靜地躺著癣朗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旺罢。 梳的紋絲不亂的頭發(fā)上旷余,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天绢记,我揣著相機(jī)與錄音,去河邊找鬼正卧。 笑死蠢熄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炉旷。 我是一名探鬼主播签孔,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼窘行!你這毒婦竟也來了饥追?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤罐盔,失蹤者是張志新(化名)和其女友劉穎但绕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惶看,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡捏顺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碳竟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片草丧。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莹桅,靈堂內(nèi)的尸體忽然破棺而出昌执,到底是詐尸還是另有隱情,我是刑警寧澤诈泼,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布懂拾,位于F島的核電站,受9級特大地震影響铐达,放射性物質(zhì)發(fā)生泄漏岖赋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一瓮孙、第九天 我趴在偏房一處隱蔽的房頂上張望唐断。 院中可真熱鬧,春花似錦杭抠、人聲如沸脸甘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丹诀。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铆遭,已是汗流浹背硝桩。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留枚荣,地道東北人碗脊。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像棍弄,于是被迫代替她去往敵國和親望薄。 傳聞我的和親對象是個殘疾皇子疟游,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容