USB協(xié)通訊議--深入理解
0. 基本概念
一個(gè)【傳輸】(控制、批量、中斷、等時(shí)):由多個(gè)【事務(wù)】組成;
本文引用地址:http://dyxdggzs.com/article/201612/329551.htm一個(gè)【事務(wù)】(IN、OUT、SETUP):由一多個(gè)【Packet】組成。
USB數據在【主機軟件】與【USB設備特定的端點(diǎn)】間被傳輸?!局鳈C軟件】與【USB設備特定的端點(diǎn)】間的關(guān)聯(lián)叫做【pipes】。一個(gè)USB設備可以有多個(gè)管道(pipes)。
1. 包(Packet)
包(Packet)是USB系統中信息傳輸的基本單元,所有數據都是經(jīng)過(guò)打包后在總線(xiàn)上傳輸的。數據在 USB總線(xiàn)上的傳輸以包為單位,包只能在幀內傳輸。高速USB 總線(xiàn)的幀周期為125us,全速以及低速 USB 總線(xiàn)的幀周期為 1ms。幀的起始由一個(gè)特定的包(SOF 包)表示,幀尾為 EOF。EOF不是一個(gè)包,而是一種電平狀態(tài),EOF期間不允許有數據傳輸。
注意:雖然高速USB總線(xiàn)和全速/低速USB總線(xiàn)的幀周期不一樣,但是SOF包中幀編號的增加速度是一樣的,因為在高速USB系統中,SOF包中幀編號實(shí)際上取得是計數器的高11位,最低三位作為微幀編號沒(méi)有使用,因此其幀編號的增加周期也為 1mS。
•USB總線(xiàn)上的情形是怎樣的?
•包是USB總線(xiàn)上數據傳輸的最小單位,不能被打斷或干擾,否則會(huì )引發(fā)錯誤。若干個(gè)數據包組成一次事務(wù)傳輸,一次事務(wù)傳輸也不能打斷,屬于一次事務(wù)傳輸的幾個(gè)包必須連續,不能跨幀完成。一次傳輸由一次到多次事務(wù)傳輸構成,可以跨幀完成。
USB包由五部分組成,即同步字段(SYNC)、包標識符字段(PID)、數據字段、循環(huán)冗余校驗字段(CRC)和包結尾字段(EOP),包的基本格式如下圖:
1.1 PID類(lèi)型(即包類(lèi)型)
1.2 Token Packets
此格式適用于IN、OUT、SETUP、PING。
PID 數據傳輸方向
IN Device->Host
OUT Host->Device
SETUP Host->Device
PING Device->Host
1.3 Start-of-Frame(SOF) Packets
SOF包由Host發(fā)送給Device。
1) 對于full-speed總線(xiàn),每隔1.00 ms ±0.0005 ms發(fā)送一次;
2) 對于high-speed總線(xiàn),每隔125 μs ±0.0625 μs發(fā)送一次;
SOF包構成如下圖所示:
1.4 Data Packets
有四種類(lèi)類(lèi)型的數據包:DATA0, DATA1, DATA2,and MDATA,且由PID來(lái)區分。DATA0和DATA1被定義為支持數據切換同步(data toggle synchronization)。
1.5 Handshake Packets
• ACK:對于IN事務(wù),它將由host發(fā)出;對于OUT、SETUP和PING事務(wù),它將由device發(fā)出。
• NAK:在數據階段,對于IN事務(wù),它將由device發(fā)出;在握手階段,對于OUT和PING事務(wù),它也將由device發(fā)出;host從不發(fā)送NAK包。
2. 事務(wù)(Transaction)
在USB上數據信息的一次接收或發(fā)送的處理過(guò)程稱(chēng)為事務(wù)處理(Transaction)即:The delivery of service to an endpoint。一個(gè)事務(wù)由一系統packet組成,具體由哪些packet組成,它取決于具體的事務(wù)??赡苡扇缦掳M成:
• 一個(gè)token packet
• 可選的data pcket
•可選的handshake packet
•可選的special packet
2.1 輸入(IN)事務(wù)處理
輸入事務(wù)處理:表示USB主機從總線(xiàn)上的某個(gè)USB設備接收一個(gè)數據包的過(guò)程。
•【正?!康妮斎胧聞?wù)處理
•【設備忙】時(shí)的輸入事務(wù)處理
•【設備出錯】時(shí)的輸入事務(wù)處理
2.2. 輸出(OUT)事務(wù)處理
輸出事務(wù)處理:表示USB主機把一個(gè)數據包輸出到總線(xiàn)上的某個(gè)USB設備接收的過(guò)程。
•【正?!康妮敵鍪聞?wù)處理
•【設備忙時(shí)】的輸出事務(wù)處理
•【設備出錯】的輸出事務(wù)處理
2.3 設置(SETUP)事務(wù)處理
•【正?!康脑O置事務(wù)處理
•【設備忙時(shí)】的設置事務(wù)處理
•【設備出錯】的設置事務(wù)處理
3.USB傳輸類(lèi)型
在USB的傳輸中,定義了4種傳輸類(lèi)型:
•控制傳輸 (Control Transfer)
•中斷傳輸 (Interrupt Transfer)
•批量傳輸 (Bulk Transfer)
•同步傳輸 (Isochronous)
3.1 控制傳輸 (Control Transfer)
控制傳輸由2~3個(gè)階段組成:
1) 建立階段(Setup)
2) 數據階段(無(wú)數據控制沒(méi)有此階段)(DATA)
3) 狀態(tài)階段(Status)
控制數據由USB系統軟件用于配置設備(在枚舉時(shí)),其它的驅動(dòng)軟件可以選擇使用control transfer實(shí)現具體的功能,數據傳輸是不可丟失的。
3.1.1 建立階段
主機從USB設備獲取配置信息,并設置設備的配置值。建立階段的數據交換包含了SETUP令牌封包、緊隨其后的DATA0數據封包以及ACK握手封包。它的作用是執行一個(gè)設置(概念含糊)的數據交換,并定義此控制傳輸的內容(即:在Data Stage中IN或OUT的data包個(gè)數,及發(fā)送方向,在Setup Stage已經(jīng)被設定)。
3.1.2 數據階段
根據數據階段的數據傳輸的方向,控制傳輸又可分為3種類(lèi)型:
1) 控制讀?。ㄗx取USB描述符)
2) 控制寫(xiě)入(配置USB設備)
3) 無(wú)數據控制
數據傳輸階段:用來(lái)傳輸主機與設備之間的數據。
•控制讀取
是將數據從設備讀到主機上,讀取的數據USB設備描述符。該過(guò)程如下圖的【Control Read】所示。對每一個(gè)數據信息包而言,首先,主機會(huì )發(fā)送一個(gè)IN令牌信息包,表示要讀數據進(jìn)來(lái)。然后,設備將數據通過(guò)DATA1/DATA0數據信息包回傳給主機。最后,主機將以下列的方式加以響應:當數據已經(jīng)正確接收時(shí),主機送出ACK令牌信息包;當主機正在忙碌時(shí),發(fā)出NAK握手信息包;當發(fā)生了錯誤時(shí),主機發(fā)出STALL握手信息包。
•控制寫(xiě)入
是將數據從主機傳到設備上,所傳的數據即為對USB設備的配置信息,該過(guò)程如下的圖【Control Wirte】所示。對每一個(gè)數據信息包而言,主機將會(huì )送出一個(gè)OUT令牌信息包,表示數據要送出去。緊接著(zhù),主機將數據通過(guò)DATA1/DATA0數據信息包傳遞至設備。最后,設備將以下列方式加以響應:當數據已經(jīng)正確接收時(shí),設備送出ACK令牌信息包;當設備正在忙碌時(shí),設備發(fā)出NAK握手信息包;當發(fā)生了錯誤時(shí),設備發(fā)出STALL握手信息包。
3.1.3 狀態(tài)階段
狀態(tài)階段:用來(lái)表示整個(gè)傳輸的過(guò)程已完全結束。
狀態(tài)階段傳輸的方向必須與數據階段的方向相反,即原來(lái)是IN令牌封包,這個(gè)階段應為OUT令牌封包;反之,原來(lái)是OUT令牌封包,這個(gè)階段應為IN令牌封包。
對于【控制讀取】而言,主機會(huì )送出OUT令牌封包,其后再跟著(zhù)0長(cháng)度的DATA1封包。而此時(shí),設備也會(huì )做出相對應的動(dòng)作,送ACK握手封包、NAK握手封包或STALL握手封包。
相對地對于【控制寫(xiě)入】傳輸,主機會(huì )送出IN令牌封包,然后設備送出表示完成狀態(tài)階段的0長(cháng)度的DATA1封包,主機再做出相對應的動(dòng)作:送ACK握手封包、NAK握手封包或STALL握手封包。
3.2 批量傳輸 (Bulk Transfer)
•用于傳輸大量數據,要求傳輸不能出錯,但對時(shí)間沒(méi)有要求,適用于打印機、存儲設備等。
•批量傳輸是可靠的傳輸,需要握手包來(lái)表明傳輸的結果。若數據量比較大,將采用多次批量事務(wù)傳輸來(lái)完成全部數據的傳輸,傳輸過(guò)程中數據包的PID 按照 DATA0-DATA1-DATA0-…的方式翻轉,以保證發(fā)送端和接收端的同步。
•USB 允許連續 3次以下的傳輸錯誤,會(huì )重試該傳輸,若成功則將錯誤次數計數器清零,否則累加該計數器。超過(guò)三次后,HOST 認為該端點(diǎn)功能錯誤(STALL),放棄該端點(diǎn)的傳輸任務(wù)。
•一次批量傳輸(Transfer)由 1 次到多次批量事務(wù)傳輸(Transaction)組成。
•翻轉同步:發(fā)送端按照 DATA0-DATA1-DATA0-…的順序發(fā)送數據包,只有成功的事務(wù)傳輸才會(huì )導致 PID 翻轉,也就是說(shuō)發(fā)送端只有在接收到 ACK 后才會(huì )翻轉 PID,發(fā)送下一個(gè)數據包,否則會(huì )重試本次事務(wù)傳輸。同樣,若在接收端發(fā)現接收到到的數據包不是按照此順序翻轉的,比如連續收到兩個(gè) DATA0,那么接收端認為第二個(gè) DATA0 是前一個(gè) DATA0 的重傳。
它通過(guò)在硬件級執行“錯誤檢測”和“重傳”來(lái)確保host與device之間“準確無(wú)誤”地傳輸數據,即可靠傳輸。它由三種包組成(即IN事務(wù)或OUT事務(wù)):
1) token
2) data
3) handshake
1) For IN Token (即:IN Transaction)
•ACK: 表示host正確無(wú)誤地接收到數據
•NAK: 指示設備暫時(shí)不能返回或接收數據 (如:設備忙)
•STALL:指示設備永遠停止,需要host軟件的干預 (如:設備出錯)
2) For OUT Token(即:OUT Transaction)
如果接收到的數據包有誤,如:CRC錯誤,Device不發(fā)送任何handshake包
•ACK: Device已經(jīng)正確無(wú)誤地接收到數據包,且通知Host可以按順序發(fā)送下一個(gè)數據包
• NAK: Device已經(jīng)正確無(wú)誤地接收到數據包,且通知Host重傳數據,由于Device臨時(shí)狀況(如buffer滿(mǎn))
•STALL: 指示Deviceendpoint已經(jīng)停止,且通知Host不再重傳
3) Bulk讀寫(xiě)序列
即由一系統IN事務(wù)或OUT事務(wù)組成。
3.3 中斷傳輸(Interrupt Transfer)
中斷傳輸由IN或OUT事務(wù)組成。
中斷傳輸在流程上除不支持PING 之外,其他的跟批量傳輸是一樣的。他們之間的區別也僅在于事務(wù)傳輸發(fā)生的端點(diǎn)不一樣、支持的最大包長(cháng)度不一樣、優(yōu)先級不一樣等這樣一些對用戶(hù)來(lái)說(shuō)透明的東西。
主機在排定中斷傳輸任務(wù)時(shí),會(huì )根據對應中斷端點(diǎn)描述符中指定的查詢(xún)間隔發(fā)起中斷傳輸。中斷傳輸有較高的優(yōu)先級,僅次于同步傳輸。
同樣中斷傳輸也采用PID翻轉的機制來(lái)保證收發(fā)端數據同步。下圖為中斷傳輸的流程圖。
中斷傳輸方式總是用于對設備的查詢(xún),以確定是否有數據需要傳輸。因此中斷傳輸的方向總是從USB設備到主機。
DATA0或DATA1中的包含的是中斷信息,而不是中斷數據。
3.4同步傳輸(Isochronous Transfer)
1) 它由兩種包組成:
1) token
2) data
同步傳輸不支持“handshake”和“重傳能力”,所以它是不可靠傳輸。
同步傳輸是不可靠的傳輸,所以它沒(méi)有握手包,也不支持PID翻轉。主機在排定事務(wù)傳輸時(shí),同步傳輸有最高的優(yōu)先級。
同步傳輸適用于必須以固定速率抵達或在指定時(shí)刻抵達,可以容忍偶爾錯誤的數據上。實(shí)時(shí)傳輸一般用于麥
克風(fēng)、喇叭、UVC Camera等設備。實(shí)時(shí)傳輸只需令牌與數據兩個(gè)信息包階段,沒(méi)有握手包,故數據傳錯時(shí)不會(huì )重傳。
Isochronous data is continuous and real-time in creation, delivery, and consumption. Timing-relatedinformation is implied by the steady rate at which isochronous data is received and transferred. Isochronousdata must be delivered at the rate received to maintain its timing. In addition to delivery rate, isochronousdata may also be sensitive to delivery delays. For isochronous pipes, the bandwidth required is typicallybased upon the sampling characteristics of the associated function. The latency required is related to thebuffering available at each endpoint.
A typical example of isochronous data is voice. If the delivery rate of these data streams is not maintained,drop-outs in the data stream will occur due to buffer or frame underruns or overruns. Even if data isdelivered at the appropriate rate by USB hardware, delivery delays introduced by software may degrade applications requiring real-time turn-around, such as telephony-based audio conferencing.
The timely delivery of isochronous data is ensured at the expense of potential transient losses in the data stream. In other words, any error in electrical transmission is not corrected by hardware mechanisms such as retries. In practice, the core bit error rate of the USB is expected to be small enough not to be an issue. USB isochronous data streams are allocated a dedicated portion of USB bandwidth to ensure that data can be delivered at the desired rate. The USB is also designed for minimal delay of isochronous data transfers.
評論