USB詳解(1.概述)

  本小節對USB系統進行概述,包括USB由來、電氣特性、如何進行傳輸,USB包的構成,USB傳輸方式,讓大家對USB協議有簡單、整體的認知。

1.USB簡介

  USB即Universal Serial Bus,通用串行總線,由Intel、Compaq、Digital、IBM、Mircrosoft、NEC以及Northern Telecom等計算機公司和通信公司於1995年聯合制定,並逐漸形成了行業標準。當時USB主要是用來解決外設不支持熱拔插的問題,可以設想插個鍵盤/外設需要重新開機的麻煩程度,並且還具有供電簡單(總線供電)、傳輸速度快、擴展簡易(通過集線器最多可擴展127個外設)、兼容性良好等優點。USB自推出以來,以成功替代了串口和並口,成爲21世紀大量計算機和只能設備的標準擴展接口和必備接口之一,現已經發展的到了USB3.2版本。

2.USB的電氣特性

  usb總共有4條線(在USB OTG技術中有5條線,多餘一條用來做身份識別,即設備可以做從機/主機),分別是Vbus D+ D- GND,USB傳輸採用差分傳輸(干擾性強),所以USB是單雙工傳輸方式,使用NRZI編碼的方式:數據爲1時電平不翻轉,爲0時電平反轉,爲了防止數據不反轉,在每6個1之後插入0翻轉,發送的使用通過SIE(串行接口引擎)串行化和編碼,LSB在前,接收的時候並行和反串行化。USB傳輸線上有如下幾個狀態用來傳輸,在低速設備(1.5Mb/s) J態:D+ =‘0’ D- =’1‘,K態:D+ =‘1’ D- =‘0‘ SE0態:D+ =’0‘ D -=‘0’, 在全速(12Mb/s)和高速(480Mb/s)中則相反,低速下空閒狀態爲"K",全速下空閒狀態爲“J”,高速下空閒狀態爲“SE0”。USB在未配置時能夠從總線獲取的電流爲100ma,配置之後可以獲取最大電流爲500ma。

3.USB最小傳輸單元:包

3.1 usb包的構成

USB總線上傳輸數據是以包爲基本單位的,一個包被分成不同的域,不同類型的包所包含的域是不一樣的,但基本的格式如下所示,這裏PID的低4爲表示PID的類型,高四位爲低四位的取反校驗,而PID後面的數據則由CRC來校驗。

同步域(告訴SIE開始進行傳輸了,在不同速度設備中不一樣) PID包標識符(8位) EOP(包結束的標誌,兩個數據位寬的SE0,SE0通常表示一些特殊的意義:包結束、復位信號等。)

在USB2.0中有如下幾種包格式:
在這裏插入圖片描述

3.2 令牌包,啓動一次USB傳輸

  USB所有的數據都是主機發起的,從機只是被動響應,所以令牌包告訴從機進行響應,如何響應。輸出令牌包(OUT):通知設備將要輸出一個數據包。輸入令牌包(IN):通知設備將要返回一個令牌包,USB規定,數據的方向都是相對於主機來說的,OUT表示主機輸出,IN表示主機輸入。建立令牌包(SETUP):它跟輸出令牌包的作用一樣,通知設備將要輸出一個數據包,區別在於SETUP令牌包之後只使用DATA0數據包,且只能發到設備的控制端點,並且設備必須要接收,而OUT令牌包沒有這些限制。幀起始包(SOF):在每幀(或微幀)開始時發送,它以廣播的形式發送,全速設備和告訴設備可以收到。在四個令牌中,中有SOF令牌後不接數據。
SOF包結構如下所示:

同步域 PID 11位幀號 5位CRC5 EOP

IN、OUT、SETUP包的接口如下所示(可以看出總線最大設備數和每個設備對打端點數)

同步域 PID 7位地址 4位端口號 5位CRC5 EOP

3.3 數據包,數據傳輸

DATA0、DATA1,在USB2.0中增加了DATA2和MDATA包,主要用在告訴分裂事務和高帶寬同步傳輸中。之所以有不同的數據包類型是用在握手包出錯時糾錯。當數據包成功接收/發送的時候,主機/從機會切換數據包類型,當發送端沒有接收到握手包,那麼會重新發送,此時接收端的數據包已經切換了,就會發現數據包類型不一致,那麼USB系統會試圖從錯誤中恢復。
數據包接口如下所示:

同步域 PID 數據(字節0~字節N) 16位CRC16 EOP

3.4 握手包,傳輸是否被對方確認

  ACK:表示正確收到數據並有足夠的空間來容納數據,主機和從機都可以使用ACK來確認,而NAK、STALL、NYET只有從機能夠返回,主機不能使用這些握手包。NAK:表示沒有數據需要返回,或者數據正確接收但是沒有足夠的空間來容納,主機收到NAK會在適當的時機進行重試傳輸。STALL:表示從機無法執行這個請求,或者端點已經被掛起了,表示一種錯誤的狀態,,從機返回STALL之後需要主機進行干預才能解除這種STALL狀態。NYET:只有在USB2.0的高速設備輸出事務中使用,但沒有足夠的空間來接收下一次數據,主機在下一輸出數據時先使用PING令牌包來試探從機是否具有空間接收數據。
  握手包的結構最簡單,只有同步域、PID和EOP:

同步域 PID EOP

3.5 特殊包

  特殊包在一些特殊的重要場合使用,PRE、ERR、SPLIT、PING。PRE、SPLIT、PING是令牌包,ERR是握手包,ERR、PING、SPLIT是USB2.0協議新增的。PRE:通知集線器打開其低速端口的前導包,PRE令牌包與握手包的結構一樣,只有同步域、PID和EOP。PING:在USB2.0中,當數據接收完之後沒有足夠的空間來接收下一次數據,從機會返回NYET包,主機會在適當時機使用PING令牌包查看設備是否具備接收能力。SPLIT:高速事務分裂令牌包,通知集線器將告訴數據包轉化爲全速或者低速數據包發送給其下面的端口。

4.USB的四種傳輸模式

4.1 USB事務

  USB傳輸事務通常由一個/多個事務組成,事務通常由兩個或三個包組成:令牌包、數據包、握手包。令牌包:啓動一個事務,總是由主機進行發送。數據包:可以從主機到設備,也可以從設備到主機,方向由令牌包來指定。握手包:數據接收者發送,當數據接收正確之後發送握手包。

4.2 批量傳輸

  一次批量傳輸事務由三個階段:令牌包階段、數據包階段和握手包階段。
在這裏插入圖片描述

4.2.1 批量輸出

1.主機發送一個OUT令牌包,包含了設備地址、端點號。
2.主機發送數據包。
3.設備解碼令牌包、數據包都準確無誤,則使用ACK或者NYET(沒有能力接收下一次),從機是掛起則回覆STALL。

4.2.2 批量輸入

1.主機發送一個IN令牌包,包含了設備地址、端點號。
2.設備檢測到錯誤則不應答,等待主機超時。若果沒有錯誤但沒有數據需要返回,則使用NAK來應答主機,從機是掛起狀態則使用STALL應答
3.主機檢測數據無錯誤則應答ACK,若由錯誤則不應答,等待超時。

4.2.3 高速設備PING

在高速設備中增加一個PING令牌包,不發出數據,直接等待設備握手包,檢測設備是否由能力接收數據或需要發送數據,避免發送數據浪費帶寬,因此PING事務只有令牌包和握手包。

4.3 中斷傳輸

  中斷傳輸是一種保證查詢頻率的傳輸。除了對端點查詢的策略上不一樣之外,中斷傳輸和批量傳輸的結構基本上是一樣的,只是中斷傳輸中沒有PING和NYET兩種包。
在這裏插入圖片描述

4.4 等時傳輸

等時傳輸用在數據量大,對實時性要求高的場合,例如音頻設備、視頻設備,對數據的正確性要求不要,所以等時傳輸不能保證數據100%正確的。等時事務如下圖所示:
在這裏插入圖片描述

4.5 控制傳輸

控制傳輸比前面三種傳輸方式複雜,主要有2個以上個事務過程,數據過程會有多個事務。控制傳輸有三個過程:建立過程、數據過程(可選)、狀態過程。

4.5.1 建立過程

  建立過程使用一個建立事務,建立事務是一個輸出數據的過程,與批量輸出事務相比,有幾處不一樣:首先令牌包不一樣,建立事務使用SETUP令牌包,其次是數據包類型,SETUP只能使用DATA0包;最後是握手包,設備只能使用ACK來應答,而不能使用NAK或者STALL來應答,即設備必須要接收建立事務的數據。
在這裏插入圖片描述
在這裏插入圖片描述

4.5.2 數據過程

  數據過程是可選的,即一個控制傳輸可能沒有數據過程,數據過程使用批量事務。如果有可能有一筆/多筆數據過程。需要注意的是,數據過程必須傳輸同一個方向,控制寫必須輸出,控制讀必須輸入,一旦數據傳輸方向發生變化,就會認爲進入到狀態過程。數據過程必須以DATA1包開始,然後再DATA0和DATA1之間交替。

4.5.3 狀態過程

  狀態過程的方向與數據過程的方向相反(也是使用批量事務),控制寫使用批量輸入事務,控制讀使用批量輸出事務。

4.6 傳輸類型與支持的最大包長

  每個端點描述符中規定了端點所支持的最大數據包長。主機每次發送的數據包,都不能超過端點的最大包長。
1.控制傳輸的端點,低速模式最大包長固定爲8字節,高速模式最大包長固定爲64字節,而全速模式可在8、16、32、64字節中選擇。
2.等時傳輸的端點,全速模式最大包長上限爲1023字節,高速模式最大包長上限爲1024字節,低速模式不支持等時常熟。
3.中斷傳輸的端點,低速模式最大包長上限爲8字節,全速模式最大包長上限爲64字節,高速模式最大包長上限爲1024字節。
4.對於批量傳輸的端點,高速模式固定爲512字節,全速模式包長可在8、16、32、64字節中選擇,低速模式不支持批量傳輸。

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