USB(一)——USB通用串行总线基础知识详述
-
目錄
1.?USB簡介
2. USB的特性
2.1 USB的性能特點
2.2、 USB的電氣特性
3.? USB總線系統中的設備
?4. USB2.0 傳輸協議
?4.1 包(package)是什么?
4.1.1 同步域(SYNC)
4.1.2 標識符字段(PID)
4.1.3? 數據字段(DATA)
4.1.4? 循環冗余校驗字段(CRC)
4.1.5?包結尾字段
4.2 事務(transaction)是什么?
4.2.1 輸入(IN)事務處理
4.2.2. 輸出(OUT)事務處理
4.2.3 設置(SETUP)事務處理??
?
4.3?什么是傳輸?
4.3.1 控制傳輸 (Control Transfer)
?4.3.2 批量傳輸 (Bulk Transfer)
4.3.3 中斷傳輸(Interrupt Transfer)
4.3.4?同步傳輸(Isochronous Transfer)
4.4??USB總線上的工作情況
?5. 幾點重要備注
5.1 幾個概念之間的關系
5.2 幾點補充
1.?USB簡介
USB(Universal Serial Bus)通用串行總線是由Compaq、Digital Equipment、Intel、Microsoft、IBM、NEC及Northern? Telecom等7家公司聯合開發的一種流行的外設接口標準。
——1994年開始研究,
——1996年? USB 1.0 速度只有1.5Mb/s
——1998年? USB 1.1版本
傳輸速率(兩種模式):低速(Low Speed)1.5Mbps
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??全速(Full Speed)12Mbps
——2000年4月? USB 2.0版本
USB 2.0兼容所有USB 1.0外部設備及電纜線等,傳輸速率達480Mbps(高速High Speed 系列)。
——2008年11月? USB 3.0版本
最大傳輸速率高達5.0Gb/s,也就是625MB/s ——Super Speed
引入了新的電源管理機制,支持待機、休眠和暫停等狀態。
-
2. USB的特性
?
-
2.1 USB的性能特點
?? 傳輸速度快
? 連接簡單快捷?
可以熱插拔,
? 通用連接器
A型連接頭用于固定的外圍設備;B型連接頭用于經常插拔的設備。?
? 無須外接電源 數據線供電
?? 擴充外設能力強
?? 不需要系統資源
USB設備不占用內存或I/O地址空間,而且也占用IRQ和DMA通道,所有事務處理都是由USB主機管理。
?? 錯誤檢測和恢復
USB事務處理包括錯誤保護機制,確保數據無錯誤發送。在發生錯誤時,事務處理可以重來。
?
-
2.2、 USB的電氣特性
(1)信號線
| 連接序號 | 信號名稱 | 典型連接線 |
| 1 | VBUS (USB電源) | 紅 |
| 2 | D+(正差分信號) | 白 |
| 3 | D-(負差分信號) | 綠 |
| 4 | GND (USB地) | 黑 |
| 外層 | 屏蔽層 | — |
(2)全速/低速USB總線設備連接方法
全速設備:D+上接1.5k上拉電阻;
低速設備: D-上接1.5k上拉電阻;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? USB全速(高速)設備硬件接線圖?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?USB低速設備硬件接線圖
(3)電氣特性
收發器:對地電源電壓為4.75~5.25V,設備吸入的最大電流值為500mA ,D+、 D-上不加電壓。
USB設備:高速在D+上加3.0~3.6V電壓, 低速反之。
D+、D-線電氣特性:
??? 無驅動:高速VD+ > 2.7V, ?VD-<0.8V, 低速反之;
??? 有驅動:高速VD+ > 2.0V, ?VD-<2.0V, 低速反之。
D+、D-線信號特性:
??? 高電平:VD+ - VD->200mV,VD+ >2.0V ;
??? 低電平:VD- - VD+ >200mV,VD- >2.0V 。
D+、D-線數據特性:NRZI(不歸零反向碼)
??? 邏輯0:D+、D-線上電平高、低間跳變;
??? 邏輯1:D+、D-線上電平不變。
-
3.? USB總線系統中的設備
可以分為三個類型:
–USB主機( USB主控制器/根集線器(USB Host) ):只能有一個,管理USB系統,每秒產生一幀數據;發送配置請求對USB設備進行配置操作,對總線上的錯誤進行管理和恢復。
–USB 集線器(USB?HUB):類似于網絡集線器,完成USB設備的添加(擴展)、刪除和電源管理等。
–USB總線設備(USB功能外設 USB function)。
-
?4. USB2.0 傳輸協議
上面是UART協議一個8位數據傳輸的幀格式。
上面是SPI協議一個8位數據傳輸的時序。片選拉低,對應外設被選中,在相應時鐘沿進行數據采樣,片選拉高停止傳輸。
基本可以看出,要實現串口通信,想把數據一個接一個的傳出去或收回來,至少傳輸數據前給個開始信號,傳輸結束后給個停止信號。
USB同樣如此,以下是USB通信協議的幾個重要概念:
我們定義這樣幾個狀態:假設D+,D-分別表示usb信號線的電平信號。那么對于usb full speed function(high speed ,low speed是不同的),我們定義差分數據線上可能出現的四個狀態:
Data J state:D+=1,D-=0;
Data K state:D+=0,D-=1;
SE0:D+=D-=0;
SE1:D+=D-=1;
-
?4.1 包(package)是什么?
數字串構成域,域再構成包,包是USB系統中信息傳輸的基本單元,所有數據都是經過打包后在總線上傳輸的。
? USB包由五部分組成,即同步字段(SYNC)、包標識符字段(PID)、數據字段、循環冗余校驗字段(CRC)和包結尾字段(EOP),包的基本格式如下:
| SYNC(8或32 bits) | PID(8 bits) | DATA(0-1023bytes) | CRC(5或6bits ) | EOP(2 bit) |
域(字段)由若干位組成(多少位由具體的域決定),域可分為七個類型:
?
-
4.1.1 同步域(SYNC)
由8位/32位組成,作為每個數據包的前導,用來產生同步作用,使USB設備與總線的包傳輸率同步,它的數值固定為000000001。
- 作用:① 通知USB串行接口引擎數據要開始傳輸;② 同步主機和設備之間的時鐘。
- 格式:Full/low-speed為8位,high-speed為32位。① 全速/低速設備的同步域為00000001;② 高速設備的同步域為31個0,后面跟1個1;注意:這是對發送端的要求,接收端在解碼時,0的個數可以少于這個數。
?
-
4.1.2 標識符字段(PID)
- 包標識符PID是用來標識一個包的類型。
- PID共有8位,目前USB協議僅使用4位(PID0~PID3),另外4位(PID4~PID7)是PID0~PID3的取反,用來校驗PID。
- 傳輸的順序為PID0,PID1,PID2,PID3,...,PID7。
| PID0 | PID1 | PID2 | PID3 | ~PID0 | ~PID1 | ~PID2 | ~PID3 |
?包的類型包括令牌包(token packet, PID1~0為01)、數據包(data packet, PID1~0為11)、握手包(handshake packet, PID1~0為10)、特殊包(special packet, PID1~0為00):
| PID類型 | PID名 | PID[3:0] | 說明 |
| 令牌類 | OUT | 0001B | 通知設備將要輸出數據 |
| IN | 1001B | 通知設備將要輸入數據 | |
| SOF | 0101B | 通知設備這是一個幀起始包 | |
| SETUP | 1101B | 通知設備將要開始一個控制傳輸 | |
| 數據類 | DATA0 | 0011B | 不同類的數據包 |
| DATA1 | 1011B | ||
| DATA2* | 0111B | ||
| MDATA* | 1111B | ||
| 握手類 | ACK | 0010B | 確認 |
| NACK | 1010B | 不確認 | |
| STALL | 1110B | 掛起 | |
| NYET* | 0110B | 未準備好 | |
| 特殊類 | PRE | 1100B | 前導(這是一個令牌包) |
| ERR* | 1100B | 錯誤(這是一個握手包) | |
| SPLIT* | 1000B | 分裂事務(這是一個令牌包) | |
| PING* | 0100B | PING測試(這是一個令牌包) | |
| - | 0000B | 保留,未使用 |
-
4.1.2.1? 令牌包
(1)OUT、IN、SETUP令牌包格式:
| 同步域 | 8位標識符PID | 7位地址 | 4位端點號 | 5位CRC5校驗 | EOP |
例如:?
(2)SOF令牌包格式:
在每幀(或微幀)開始時發送,以廣播的形式發送,所有USB全速設備和高速設備都可以接收到SOF包。??
? ? 1) 對于full-speed總線,每隔1.00 ms ±0.0005 ms發送一次;
??? 2) 對于high-speed總線,每隔125 μs ±0.0625 μs發送一次;
| 同步域 | 8位標識符PID | 11位幀號 | 5位CRC5校驗 | EOP |
例如:
-
4.1.2.2?數據包
- 用來攜帶主機與設備之間要傳遞的信息,其內容和長度根據PID、傳輸類型的不同而各不相同,有四種類類型的數據包:DATA0, DATA1, DATA2,and MDATA。
數據包格式:
| 同步域 | 8位標識符PID | 字節0 | 字節1 | … | 字節n | 16位CRC16校驗 | EOP |
例如:
-
4.1.2.3 握手包
- ACK:正確接收數據,并且有足夠的空間容納數據。主機和設備都可以使用ACK來確認,而NAK、STALL、NYET只有設備才能夠返回,主機不能使用這些握手包。
- NAK:① 沒有數據需要返回;② 數據接收正確,但是沒有足夠的空間容納數據。
- STALL:設備無法執行這個請求或者設備已掛起。設備返回STALL,需要主機干預才能解除這種STALL狀態。
- NYET:只在USB2.0高速設備輸出設備中使用,表示設備本次數據成功接收,但是沒有足夠的空間來接收下一次的數據。主機在下一次輸出數據前,將使用PING令牌包來探測設備是否有足夠的空間接收數據,以免浪費不必要的帶寬和時間。
握手包格式:
| 同步域 | 8位標識符PID | EOP |
例如:?
-
4.1.2.4 特殊包不介紹?
?
-
4.1.3? 數據字段(DATA)
在USB包中,數據字段可以包含設備地址、端點號、幀序列號以及數據等內容。它僅存于DATA數據包中,根據不同的傳輸類型,擁有不同的字節大小,從0到1023字節(同步傳輸)。在總線傳輸中,總是先傳輸字節的最低位,最后傳輸字節的最高位。
(1)ADDR設備地址數據域:
ADDR數據域由7位組成,可用來尋址多達127個外圍設備。
(2)ENDP端點數據域:
ENDP數據域由4位組成,通過這4個位最多可尋址出32個端點。這個ENDP數據域僅用在IN、OUT與SETUP令牌信息包中。對于慢速設備可支持端點0以及端點1作為中斷傳輸模式,而全速設備則可以擁有16個輸入端點(IN)與16個輸出端點(OUT)共32個端點。
(3)Frame Number:
當USB令牌包的PID為SOF時,其數據字段必須為11位的幀序列號。幀序列號由主機產生,且每個數據幀自動加一,最大數值為0x7FF。當幀序列號達到最大數時將自動從0開始循環。
?
-
4.1.4? 循環冗余校驗字段(CRC)
根據不同的信息包類型,CRC數據域由不同數目的位所組成。其中重要的數據信息包采用CRC16的數據域(16位),而其余的信息包類型則采用CRC5的數據域(5位)。
?
-
4.1.5?包結尾字段
全速/高速模式的EOP是一個約為2個數據寬度的SE0,高速模式的EOP是通過故意的位填充錯誤實現的。單端0(SE0):D+和D-同時保持低電平。單端0的用處:① 包結束;② 復位信號(USB集線器對USB設備的復位操作,就是將總線設置為SE0約10ms)。
Q: 如何一個位填充錯誤是EOP還是傳輸錯誤?A: 通過CRC校驗,即如果CRC正確,則說明這個位填充是EOP;否則說明傳輸錯誤。
-
4.2 事務(transaction)是什么?
在USB上數據信息的一次接收或發送的處理過程稱為事務處理(Transaction)即:The delivery of service to an endpoint。?一個transaction由一個到幾個packet組成,具體由哪些packet組成,它取決于具體的事務。
Transaction可以分成IN、OUT和SETUP三大事務,如下:?
Setup transaction:主機用來向設備發送控制命令 ;
? ? ? ? ? ? ? ? ? ? ? ?Data IN transaction:主機用來從設備讀取數據 ;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Data OUT transaction:主機用來向設備發送數據??;
Transaction可能由如下包組成:
???????? 一個token packet
???????? 可選的data pcket
?????????可選的handshake packet
?????????可選的special packet
?
-
4.2.1 輸入(IN)事務處理
???? 輸入事務處理:表示USB主機從總線上的某個USB設備接收一個數據包的過程。
????? ???【正常】的輸入事務處理
? ? ? ??【設備忙】時的輸入事務處理????
???? ?【設備出錯】時的輸入事務處理
??
4.2.2. 輸出(OUT)事務處理
????????輸出事務處理:表示USB主機把一個數據包輸出到總線上的某個USB設備接收的過程。
??? ?【正常】的輸出事務處理
? ? ?【設備忙時】的輸出事務處理
?
??? ?【設備出錯】的輸出事務處理
?
4.2.3 設置(SETUP)事務處理??
?? ?【正?!康脑O置事務處理
?
?? ?【設備忙時】的設置事務處理
?? ?【設備出錯】的設置事務處理
?4.3?什么是傳輸?
? 在USB的傳輸中,定義了4種傳輸類型:
?????????控制傳輸 (Control Transfer)
?????????中斷傳輸 (Interrupt Transfer)
?????????批量傳輸 (Bulk Transfer)
?????????同步傳輸 (Isochronous)
4.3.1 控制傳輸 (Control Transfer)
????? 控制傳輸由2~3個階段組成:
????? 1) 建立階段(Setup)
????? 2) 數據階段(無數據控制沒有此階段)(DATA)
????? 3) 狀態階段(Status)
??????每個階段都由一次或多次(數據階段)事務傳輸組成(Transaction)。
??????控制數據由USB系統軟件用于配置設備(在枚舉時),其它的驅動軟件可以選擇使用control transfer實現具體的功能,數據傳輸是不可丟失的。
4.3.1.1 建立階段
???? 主機從USB設備獲取配置信息,并設置設備的配置值。建立階段的數據交換包含了SETUP令牌封包、緊隨其后的DATA0數據封包以及ACK握手封包。它的作用是執行一個設置(概念含糊)的數據交換,并定義此控制傳輸的內容(即:在Data Stage中IN或OUT的data包個數,及發送方向,在Setup Stage已經被設定)。
4.3.1.2 數據階段
?????根據數據階段的數據傳輸的方向,控制傳輸又可分為3種類型:
???? 1) 控制讀取(讀取USB描述符)
???? 2) 控制寫入(配置USB設備)
???? 3) 無數據控制
???? 數據傳輸階段:用來傳輸主機與設備之間的數據。
???????控制讀取
???? 是將數據從設備讀到主機上,讀取的數據USB設備描述符。該過程如下圖的【Control Read】所示。對每一個數據信息包而言,首先,主機會發送一個IN令牌信息包,表示要讀數據進來。然后,設備將數據通過DATA1/DATA0數據信息包回傳給主機。最后,主機將以下列的方式加以響應:當數據已經正確接收時,主機送出ACK令牌信息包;當主機正在忙碌時,發出NAK握手信息包;當發生了錯誤時,主機發出STALL握手信息包。
???????控制寫入
?????? 是將數據從主機傳到設備上,所傳的數據即為對USB設備的配置信息,該過程如下的圖【Control Wirte】所示。對每一個數據信息包而言,主機將會送出一個OUT令牌信息包,表示數據要送出去。緊接著,主機將數據通過DATA1/DATA0數據信息包傳遞至設備。最后,設備將以下列方式加以響應:當數據已經正確接收時,設備送出ACK令牌信息包;當設備正在忙碌時,設備發出NAK握手信息包;當發生了錯誤時,設備發出STALL握手信息包。
4.3.1.3 狀態階段
???????狀態階段:用來表示整個傳輸的過程已完全結束。
?????? 狀態階段傳輸的方向必須與數據階段的方向相反,即原來是IN令牌封包,這個階段應為OUT令牌封包;反之,原來是OUT令牌封包,這個階段應為IN令牌封包。
?????? 對于【控制讀取】而言,主機會送出OUT令牌封包,其后再跟著0長度的DATA1封包。而此時,設備也會做出相對應的動作,送ACK握手封包、NAK握手封包或STALL握手封包。
????? 相對地對于【控制寫入】傳輸,主機會送出IN令牌封包,然后設備送出表示完成狀態階段的0長度的DATA1封包,主機再做出相對應的動作:送ACK握手封包、NAK握手封包或STALL握手封包。
?
?4.3.2 批量傳輸 (Bulk Transfer)
???????用于傳輸大量數據,要求傳輸不能出錯,但對時間沒有要求,適用于打印機、存儲設備等。
???????批量傳輸是可靠的傳輸,需要握手包來表明傳輸的結果。若數據量比較大,將采用多次批量事務傳輸來完成全部數據的傳輸,傳輸過程中數據包的PID 按照 DATA0-DATA1-DATA0-…的方式翻轉,以保證發送端和接收端的同步。
????????USB 允許連續 3次以下的傳輸錯誤,會重試該傳輸,若成功則將錯誤次數計數器清零,否則累加該計數器。超過三次后,HOST 認為該端點功能錯誤(STALL),放棄該端點的傳輸任務。
????????一次批量傳輸(Transfer)由 1 次到多次批量事務傳輸(Transaction)組成。
????????翻轉同步:發送端按照 DATA0-DATA1-DATA0-…的順序發送數據包,只有成功的事務傳輸才會導致 PID 翻轉,也就是說發送端只有在接收到 ACK 后才會翻轉 PID,發送下一個數據包,否則會重試本次事務傳輸。同樣,若在接收端發現接收到到的數據包不是按照此順序翻轉的,比如連續收到兩個 DATA0,那么接收端認為第二個 DATA0 是前一個 DATA0 的重傳。
??????它通過在硬件級執行“錯誤檢測”和“重傳”來確保host與device之間“準確無誤”地傳輸數據,即可靠傳輸。它由三種包組成(即IN事務或OUT事務):
??????? 1) token
??????? 2) data
??????? 3) handshake
1) For IN Token (即:IN Transaction)
???????ACK: 表示host正確無誤地接收到數據
???????NAK: 指示設備暫時不能返回或接收數據? (如:設備忙)
???????STALL:指示設備永遠停止,需要host軟件的干預 (如:設備出錯)?
2) For OUT Token?(即:OUT Transaction)
???? 如果接收到的數據包有誤,如:CRC錯誤,Device不發送任何handshake包
???????ACK: Device已經正確無誤地接收到數據包,且通知Host可以按順序發送下一個數據包
????????? NAK: Device?已經正確無誤地接收到數據包,且通知Host重傳數據,由于Device臨時狀況(如buffer滿)
??????????STALL: 指示Device?endpoint已經停止,且通知Host不再重傳
3) Bulk讀寫序列
????? 即由一系統IN事務或OUT事務組成。
4.3.3 中斷傳輸(Interrupt Transfer)
??? 中斷傳輸由IN或OUT事務組成。?
??? 中斷傳輸在流程上除不支持PING 之外,其他的跟批量傳輸是一樣的。他們之間的區別也僅在于事務傳輸發生的端點不一樣、支持的最大包長度不一樣、優先級不一樣等這樣一些對用戶來說透明的東西。
???? 主機在排定中斷傳輸任務時,會根據對應中斷端點描述符中指定的查詢間隔發起中斷傳輸。中斷傳輸有較高的優先級,僅次于同步傳輸。
???? 同樣中斷傳輸也采用PID翻轉的機制來保證收發端數據同步。下圖為中斷傳輸的流程圖。
???? 中斷傳輸方式總是用于對設備的查詢,以確定是否有數據需要傳輸。因此中斷傳輸的方向總是從USB設備到主機。
????
???? DATA0或DATA1中的包含的是中斷信息,而不是中斷數據。
4.3.4?同步傳輸(Isochronous Transfer)
1) 它由兩種包組成:
??????? 1) token
??????? 2) data
?????? 同步傳輸不支持“handshake”和“重傳能力”,所以它是不可靠傳輸。
????? 同步傳輸是不可靠的傳輸,所以它沒有握手包,也不支持PID翻轉。主機在排定事務傳輸時,同步傳輸有最高的優先級。
????? 同步傳輸適用于必須以固定速率抵達或在指定時刻抵達,可以容忍偶爾錯誤的數據上。實時傳輸一般用于麥
克風、喇叭、UVC Camera等設備。實時傳輸只需令牌與數據兩個信息包階段,沒有握手包,故數據傳錯時不會重傳。
4.4??USB總線上的工作情況
?5. 幾點重要備注
?
5.1 幾個概念之間的關系
- ?一個【傳輸】(控制、批量、中斷、等時)由多個【事務】組成;一個【事務】(IN、OUT、SETUP)由一個或多個【Packet】組成。
- 包是USB總線上數據傳輸的最小單位,不能被打斷或干擾,否則會引發錯誤。若干個數據包組成一次事務傳輸,一次事務傳輸也不能打斷,屬于一次事務傳輸的幾個包必須連續,不能跨幀完成。一次傳輸由一次到多次事務傳輸構成,可以跨幀完成。
- USB數據在【主機軟件】與【USB設備特定的端點】間被傳輸?!局鳈C軟件】與【USB設備特定的端點】間的關聯叫做【pipes】。一個USB設備可以有多個管道(pipes)。
- 幀(frame)是什么?
幀是一個時間概念,在USB中,高速USB 總線的幀周期為125us,全速以及低速 USB 總線的幀周期為 1ms,它是一個獨立的單元,包含了一系列總線動作,USB將1幀分為好幾份,不同的部分執行不同的功能。
數據在 USB總線上的傳輸以包為單位,包只能在幀內傳輸。幀的起始即幀頭由一個特定的包(SOF 包)表示,幀尾為 EOF。EOF不是一個包,而是一種電平狀態,EOF期間不允許有數據傳輸。?
?
5.2 幾點補充
(1) 雖然高速USB總線和全速/低速USB總線的幀周期不一樣,但是SOF包中幀編號的增加速度是一樣的,因為在高速USB系統中,SOF包中幀編號實際上取得是計數器的高11位,最低三位作為微幀編號沒有使用,因此其幀編號的增加周期也為 1mS。
(2) PC機識別USB設備是否插入
USB接口只有4條線: VCC(5V),GND,D-,D+。 PC機的USB插孔的D-和D+數據線均連接15K歐姆的下拉電阻。而USB設備端的D-或D+數據線連接1.5K歐姆的上拉電阻。當設備插入PC機的時候,會將PC機的D-或D+端的電壓拉高,當PC機在D-或D+端檢測到高電平時,就知道有設備插入了。如果是PC機D-端被拉高,接入的則是USB低速設備;如果是PC機D+端被拉高,接入的則是USB全速或高速設備,具體是全速設備還是高速設備,會由PC機和USB設備發包握手確定。
(3) PC機獲取外部設備信息
檢測到設備插入,主機以描述符的形式向從機索要它的信息,從機同樣以描述符的形式實話實說(一旦知道你插入了,人家就得問你是誰,你也必須說實話,獲取她的同意,否則違法)。明確一點:和其他主從機設備通信一樣,USB外部設備(從機)不會主動給PC機(主機)發數據,除非主機有那個需求,向從機索要。
(4)USB的傳輸類型:
? ?? ?a. 控制傳輸:可靠,時間有保證,比如:USB設備的識別過程
? ?? ?b. 批量傳輸: 可靠, 時間沒有保證, 比如:U盤
? ?? ?c. 中斷傳輸:可靠,實時,比如:USB鼠標
? ?? ?d. 實時傳輸:不可靠,實時,比如:USB攝像頭
- 所有USB通信數據的來源和目的都是基于端點,每個USB外設只有唯一一個地址,最多包含16個端點,注意:3.(IN) 和3.(OUT)是兩個不同的端點。
- USB傳輸的對象:端點(endpoint)
?????每一個端點都有傳輸類型,傳輸方向。我們說"讀U盤"、"寫U盤",可以細化為:把數據寫到U盤的端點1,從U盤的端點2里讀出數據。除了端點0外,每一個端點只支持一個方向的數據傳輸。注意:端點0用于控制傳輸,既能輸出也能輸入。 主從模式通信中,不特別聲明,程序里說的輸入(IN)、輸出(OUT) "都是" 基于USB主機的立場說的。比如鼠標的數據是從鍵盤傳到PC機, 對應的端點稱為"輸入端點"。
(5)數據編解碼和位填充?
USB采用NRZI(非歸零編碼)對發送的數據包進行編碼 。
? ? ? ?輸入數據0, 編碼成“電平翻轉” ;輸入數據1, 編碼成“電平不變” ;(NRZI遇0翻轉,遇1不變)。
? ? ? ?編碼出來的序列,高電平:J狀態;低電平:K狀態 。
在USB中,每個USB數據包,最開始都有個同步域(SYNC),這個域固定為?0000 0001,這個域通過NRZI編碼之后,就是一串方波,接受者可以用這個?SYNC?域來同步之后的數據信號。此外,因為在?USB的NRZI編碼下,邏輯0會造成電平翻轉,所以接受者在接受數據的同時,根據接收到的翻轉信號不斷調整同步頻率,保證數據傳輸正確.但是,這樣還是會有一個問題,就是雖然接受者可以主動和發送者的頻率匹配,但是兩者之間總會有誤差。假如數據信號是?1000?個邏輯1,經過?USB?的?NRZI?編碼之后,就是很長一段沒有變化的電平,在這種情況下,即使接受者的頻率和發送者相差千分之一,就會造成把數據采樣成?1001?個或者?999?個?1了。USB?對這個問題的解決辦法,就是強制插?0,也就是傳說中的?bit-stuffing,如果要傳輸的數據中有?7?個連續的?1,發送前就會在第?6?個?1?后面強制插入一個?0,讓發送的信號強制出現翻轉,從而強制接受者進行頻率調整。接受者只要刪除?6個連續1之后的?0,就可以恢復原始的數據了。?
總結
以上是生活随笔為你收集整理的USB(一)——USB通用串行总线基础知识详述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FTP笔记-FTP主动模式和被动模式
- 下一篇: [转载][转]无线衰落信道、多径与OFD