USB(Universal Serial Bus)全稱通用串口總線,USB爲解決即插即用需求而誕生,支持熱插拔。USB協議版本有USB1.0、USB1.一、USB2.0、USB3.1等,USB2.0目前比較經常使用,USB是主從模式的結構,設備與設備之間、主機與主機之間不能互連,爲解決這個問題,擴大USB的應用範圍,出現了USB OTG,全拼 ON The Go。USB OTG 同一個設備,在不一樣的場合下可行在主機和從機之間切換。併發
一、USB特色大數據
USB1.0和USB1.1支持1.5Mb/s的低速模式和12Mb/bs的全速模式。在USB2.0以上支持480Mb/s的高速模式。 編碼
二、 自供電設備:設備從外部電源獲取工做電壓 總線供電設備:設備從VBUS(5v) 取電 。對總線供電設備,區分低功耗和高功耗USB設備 spa
低功耗總線供電設備:最大功耗不超過100mA
高功耗總線供電設備: 枚舉時最大功耗不超過100mA,枚舉完成配置結束後功耗不超過500mA
設備在枚舉過程當中,經過設備的配置描述符向主機報告它的供電配置(自供電/總線供電)以及它的功耗要求視頻
三、 USB總線信號:
USB使用的是差分傳輸模式,兩個數據線D+和D-
差分信號1:D+ > VOH(min) (2.8V) 且D- < VOL(max)(0.3V)
差分信號0:D- > VOH and D+ < VOL blog
總有如下個狀態,接口
J狀態(高電平):D+ 高,D- 低
K狀態(低電平):D+低,D- 高
SEO狀態:D+ 低,D- 高
Reset信號:D+ and D- < VOL for >= 10ms
主機在要和設備通訊以前會發送Reset信號來把設備設置到默認的未配置狀態。即主機拉低兩根信號線(SE0狀態)
並保持10ms
Idle狀態:J狀態數據發、送先後總線的狀態
Suspend狀態:3ms以上的J狀態 事務
SYNC: 3個KJ狀態切換,後跟隨2位時間的K狀態同步
Resume信號:20ms的K狀態+低速EOP
主機在掛起設備後可經過翻轉數據線上的極性並保持20ms來喚醒設備,並以低速EOP信號結尾
帶遠程喚醒功能的設備還可本身發起該喚醒信號;前提是設備已進入idle狀態至少5ms,而後發出喚醒K信號,維持1ms到15ms並由主機在1ms內接管來繼續驅動喚醒信號
SOP:從IDLE狀態切換到K狀態
EOP:持續2位時間的SE0信號,後跟隨1位時間的J狀態
Keep alive即低速EOP信號效率
喚醒slave設備操做
四、USB插入檢測和速度檢測
全速高速設備在D+接上拉1.5k電阻,低速設備在D-接上拉1.5K電阻。主機檢測到某一個數據線電平拉高並保持了一段時間,就認爲有設備連上來了, 先把高速設備檢測爲全速設備,而後再經過「Chirp序列」的總線握手機制來識別高速和全速設備。主機必需在驅動SE0狀態以復位設備以前,馬上採樣總線狀態來判斷設備的速度 。
D+和D-數據線上的下拉電阻起做用,使得兩者都在低電平;主機端看來就是個SE0狀態;一樣地,當數據線上的SE0狀態持續一段時間了,就被主機認爲是斷開狀態。
五、USB傳輸
一個傳輸有多個事務組成,一個事務由2到3個包組成。傳輸又分爲四種類型:批量傳輸、等時(同步)傳輸、中斷傳輸、控制傳輸。注意:USB傳輸數據先發數據低位再發高位數據。
USB協議定義了四種傳輸類型:
批量(大容量數據)傳輸(Bulk Transfers): 非週期性,突發
大容量數據的通訊,數據能夠佔用任意帶寬,並容忍延遲 。如USB打印機、掃描儀、大容量儲存設備等
低速 USB 設備不支持批量傳輸,高速批量端點的最大包長度爲 512,全速批量端點的最大包長度能夠爲 八、1六、3二、64。
批量傳輸在訪問 USB 總線時,相對其餘傳輸類型具備最低的優先級,USB HOST 老是優先安排其餘類型的傳輸,當總線帶寬有富餘時才安排批量傳輸。
高速的批量端點必須支持PING 操做,向主機報告端點的狀態,NYET 表示否認應答,沒有準備好接收下一個數據包,ACK 表示確定應答,已經準備好接收下一個數據包。
中斷傳輸(Interrupt Transfers): 週期性,低頻率
容許有限延遲的通訊 如人機接口設備(HID)中的鼠標、鍵盤、軌跡球等
中斷傳輸是一種保證查詢頻率的傳輸。中斷端點在端點描述符中要報告它的查詢間隔,主機會保證在小於
這個時間間隔的範圍內安排一次傳輸。
中斷傳輸是一種輪詢的傳輸方式,是一種單向的傳輸,HOST經過固定的間隔對中斷端點進行查詢,如有數據傳輸或能夠接收數據則返回數據或發送數據,不然返回NAK,表示還沒有準備好。
中斷傳輸的延遲有保證,但並不是實時傳輸,它是一種延遲有限的可靠傳輸,支持錯誤重傳。
對於高速/全速/低速端點,最大包長度分別能夠達到1024/64/8 Bytes。
高速中斷傳輸不得佔用超過 80%的微幀時間,全速和低速不得超過 90%。
中斷端點的輪詢間隔由在端點描述符中定義,全速端點的輪詢間隔能夠是1~255mS,低速端點爲10~255mS,高速端點爲(2interval-1)*125uS,其中 interval取 1到 16之間的值。
除高速高帶寬中斷端點外,一個微幀內僅容許一次中斷事務傳輸,高速高帶寬端點最多能夠在一個微幀內進行三次中斷事務傳輸,傳輸高達 3072 字節的數據。
所謂單向傳輸,並非說該傳輸只支持一個方向的傳輸,而是指在某個端點上該傳輸僅支持一個方向,或輸出,或輸入。若是須要在兩個方向上進行某種單向傳輸,須要佔用兩個端點,
分別配置成不一樣的方向,能夠擁有相同的端點編號。
等時(同步)傳輸(Isochronous Transfers): 週期性
持續性的傳輸,用於傳輸與時效相關的信息,而且在數據中保存時間戳的信息 ,如音頻視頻設備
等時(同步)傳輸用在數據量大、對實時性要求高的場合,如音頻設備,視頻設備等,這些設備對數據的延遲很敏感。對於音頻或視頻設備數據的100%正確性要求不高,少許的數據錯誤是能夠容忍的,主要是保證數據不能停頓,因此等時傳輸是不保證數據100%正確的。當數據錯誤時,再也不重傳操做。所以等時傳輸沒有應答包,數據是否正確,由數據的CRC校驗來確認。
控制傳輸(Control Transfers): 非週期性,突發
用於命令和狀態的傳輸
控制傳輸可分爲三個過程:(1)創建過程 (2)數據過程(可選) (3)狀態過程
特性:
每一個USB設備都必須有控制端點,支持控制傳輸來進行命令和狀態的傳輸。USB主機驅動將經過控制傳輸與USB設備的控制端點通訊,完成USB設備的枚舉和配置
方向:
控制傳輸是雙向的傳輸,必須有IN和OUT兩個方向上的特定端點號的控制端點來完成兩個方向上的控制傳輸
控制傳輸是一種可靠的雙向傳輸,一次控制傳輸可分爲三個階段。第一階段爲從HOST到Device的SETUP事務傳輸,這個階段指定了這次控制傳輸的請求類型;
第二階段爲數據階段,也有些請求沒有數據階段;第三階段爲狀態階段,經過一次IN/OUT 傳輸代表請求是否成功完成。
控制傳輸經過控制管道在應用軟件和 Device 的控制端點之間進行,控制傳輸過程當中傳輸的數據是有格式定義的,USB 設備或主機可根據格式定義解析得到的數據含義。
其餘三種傳輸類型都沒有格式定義。
控制傳輸對於最大包長度有固定的要求。對於高速設備該值爲 64Byte;對於低速設備該值爲 8;全速設備能夠是 8或 16或 32或 64。
最大包長度 表徵了一個端點單次接收/發送數據的能力,實際上反應的是該端點對應的Buffer 的大小。Buffer 越大,單次可接收/發送的數據包越大,反之亦反。
當經過一個端點進行數據傳輸時, 若數據的大小超過該端點的最大包長度時,須要將數據分紅若干個數據包傳輸,而且要求除最後一個包外,全部的包長度均等於該最大包長度。
這也就是說若是一個端點收到/發送了一個長度小於最大包長度的包,即意味着數據傳輸結束。
控制傳輸在訪問總線時也受到一些限制,如:
a. 高速端點的控制傳輸不能佔用超過 20%的微幀,全速和低速的則不能超過 10%。
b. 在一幀內若是有多餘的未用時間,而且沒有同步和中斷傳輸,能夠用來進行控制傳輸。
六、USB的編碼方案
USB採用不歸零取反來傳輸數據,當傳輸線上的差分數據輸入0時就取反,輸入1時就保持原值,爲了確保信號發送的準確性,當在USB總線上發送一個包時,傳輸設備就要進行位插入***做(即在數據流中每連續6個1後就插入一個0)。
七、USB的數據格式
(一)域:是USB數據最小的單位,由若干位組成(至因而多少位由具體的域決定),域可分爲七個類型:
一、同步域(SYNC),八位,值固定爲0000 0001,用於本地時鐘與輸入同步
二、標識域(PID),由四位標識符+四位標識符反碼構成,代表包的類型和格式,這是一個很重要的部分,這裏能夠計算出,USB的標識碼有16種,具體分類請看問題五。
三、地址域(ADDR):七位地址,表明了設備在主機上的地址,地址000 0000被命名爲零地址,是任何一個設備第一次鏈接到主機時,在被主機配置、枚舉前的默認地址,由此能夠知道爲何一個USB主機只能接127個設備的緣由。
四、端點域(ENDP),四位,由此可知一個USB設備有的端點數量最大爲16個。
五、幀號域(FRAM),11位,每個幀都有一個特定的幀號,幀號域最大容量0x800,對於同步傳輸有重要意義(同步傳輸爲四種傳輸類型之一,請看下面)。
六、數據域(DATA):長度爲0~1023字節,在不一樣的傳輸類型中,數據域的長度各不相同,但必須爲整數個字節的長度
七、校驗域(CRC):對令牌包和數據包(對於包的分類請看下面)中非PID域進行校驗的一種方法,CRC校驗在通信中應用很泛,是一種很好的校驗方法,至於具體的校驗方法這裏就很少說,請查閱相關資料,只須注意CRC碼的除法是模2運算,不一樣於10進制中的除法。
(二)包:由域構成的包有四種類型,分別是令牌包、數據包、握手包和特殊包,前面三種是重要的包,不一樣的包的域結構不一樣,介紹以下
一、令牌包:可分爲輸入包、輸出包、設置包和幀起始包(注意這裏的輸入包是用於設置輸入命令的,輸出包是用來設置輸出命令的,而不是放據數的)
其中輸入包、輸出包和設置包的格式都是同樣的:
SYNC+PID+ADDR+ENDP+CRC5(五位的校驗碼)
幀起始包的格式:
SYNC+PID+11位FRAM+CRC5(五位的校驗碼)
二、數據包:分爲DATA0包和DATA1包,當USB發送數據的時候,當一次發送的數據長度大於相應端點的容量時,就須要把數據包分爲好幾個包,分批發送,DATA0包和DATA1包交替發送,即若是第一個數據包是 DATA0,那第二個數據包就是DATA1。但也有例外狀況,在同步傳輸中(四類傳輸類型中之一),全部的數據包都是爲DATA0,格式以下:
SYNC+PID+0~1023字節+CRC16
三、握手包:結構最爲簡單的包,格式以下
SYNC+PID
八、USB 2.0 和USB 3.0 對比
A型接口:USB2.0鏈接器在前,而USB3.0鏈接器在後
B型接口:USB3.0鏈接器設置於USB2.0鏈接器的上方。