2、中斷傳輸
中斷傳輸(Interrupt Transfer), 可用於鍵盤、鼠標等 HID 設備的數據傳輸中, 由IN事務或 OUT 事務組成。
(1)、中斷傳輸的結構
中斷傳輸中包含了 2 種最基本的事務, 即輸入 IN 事務和輸出 OUT 事務, 而不包括設置 SETUP 事務。
中斷傳輸中, 無論是 IN 事務, 還是 OUT 事務, 都包含了令牌包、數據包和握手包。
IN 事務: 主機通過發送輸入包 IN(標識域 PID 爲 IN), 來啓動 1 個 IN 傳輸。
OUT 事務: 主機發送輸出包 OUT (標識域 PID 爲 OUT), 啓動 1 個 OUT 傳輸。
IN事務:設備忙,回覆無效包NAK,事務提前結束。主機不斷重試這個事務。
設備端點被禁止,回覆錯誤包STALL,事務提前結束,總線進入空閒狀態。
設備端點正常,且設備準備新的中斷處理,則設備會按主機要求回覆主機所需數據。
OUT事務:結構相對較爲簡單, 主機將緊接着OUT令牌包, 就發送數據, 並按照DATA0 和 DATA1 數據包交替觸發的順序來發送數據。
IN事務:如果主機正確地接收到了數據, 那麼就會給設備發送ACK; 如果數據包在傳輸過程中被破壞了, 那麼設備就會不回覆任何握手信息, 直接將總線轉入空閒狀態, 等待下一次傳輸。
OUT事務:設備忙,返回無效包NAK,總線進入空閒,直到主機重試發送該數據
設備端點被禁止,回覆錯誤包STALL,事務提前結束,總線進入空閒狀態。果發送的數據沒有錯誤, 並且設備成功地接收, 那麼設備就返回ACK, 同時通知主機可以發送新的數據。如果數據包發生了CRC校驗錯誤, 將不會返回任何握手信息。
中斷傳輸中的數據包, 一定是從DATA0數據包開始, 然後是DATA1數據包, 接着又是DATA0, 依次重複下去。
(3)、總線傳輸的特點
中斷傳輸中,USB主機是以週期性的方式對設備進行輪詢, 以確定設備是否有數據發送。按照USB 的規定, 全速設備可以選擇的輪詢週期範圍是1~255ms, 低速設備的輪詢週期範圍則是10~255 ms。
USB對於中斷傳輸中的數據包的大小也有要求。低速設備的數據包大小可以是1~8字節, 全速設備的數據包大小是1~64字節, 而高速設備的數據包大小則可達到1~1024字節。
批量傳輸(Bulk Transfer)主要用於大容量數據的傳輸中, 比如硬盤驅動器的接口、光盤刻錄機接口及數碼相機等等。
批量傳輸的結構與中斷傳輸的結構非常相似, 也是由IN事務或OUT事務構成。
批量傳輸中包含了2種最基本的事務, 即IN事務和OUT事務, 而不包括SETUP事務。
批量傳輸中, 無論是IN事務, 還是OUT事務, 都包含了令牌包、數據包和握手包。
IN事務:主機通過發送輸入包 IN (標識域 PID 爲 IN ), 來啓動 1 個 IN 傳輸。
OUT事務:主機發送輸出包 OUT (標識域 PID 爲 OUT), 啓動 1 個 OUT 傳輸。
IN事務:設備忙,回覆無效包NAK,事務提前結束。主機不斷重試這個事務。
設備端點被禁止,回覆錯誤包STALL,事務提前結束,總線進入空閒狀態。
設備端點正常,且設備準備新的中斷處理,則設備會按主機要求回覆主機所需數據。
OUT事務:結構相對較爲簡單, 主機將緊接着OUT令牌包, 就發送數據, 並按照DATA0和DATA1 數據包交替觸發的順序來發送數據。
IN事務:如果主機正確地接收到了數據, 那麼就會給設備發送ACK; 如果數據包在傳輸過程中被破壞了, 那麼設備就會不回覆任何握手信息, 直接將總線轉入空閒狀態, 等待下一次傳輸。
OUT事務:設備忙,返回無效包NAK,總線進入空閒,直到主機重試發送該數據設備端點被禁止,回覆錯誤包STALL,事務提前結束,總線進入空閒狀態。 如果發送的數據沒有錯誤, 並且設備成功地接收, 那麼設備就返回ACK, 同時通知主機可以發送新的數據。如果數據包發生了CRC校驗錯誤, 將不會返回任何握手信息。
批量傳輸的數據包的發送順序 , 也與中斷傳輸非常類似。從DATA0數據包開始, 然後是DATA1數據包, 接着又是DATA0, 依次重複下去。
(3)、總線傳輸特點
批量傳輸既沒有固定的傳輸速率, 也不佔有固定帶寬。只有當總線處於空閒狀態時, 批量傳輸才能夠獲得比較大的帶寬。而當總線“忙”時, USB 就會優先進行其他類型的數據傳輸,而暫時停止批量傳輸的進行, 因而批量傳輸就會需要很長的時間才能完成。
全速的 USB 設備的數據大小可設定爲8、16、32 或 64 字節。 高速設備則必須設定爲固定值 512 字節。數據傳輸過程中的每一個數據的大小必須滿足上述的要求, 除了最後1個數據包。
同步傳輸( Isochronous T ransfer, 可簡寫爲 ISO), 多用於音頻流等需要恆定傳輸速率的數據傳輸中, 比如音箱、顯示器和攝像頭等設備的接口。
同步傳輸的數據結構最爲簡單, 因爲這類數據講究的是傳輸速率的恆定, 而對於數據的準確性的要求不如批量傳輸那麼嚴格。因此, 同步傳輸中沒有握手包, 總線只優先保證其佔用帶寬, 而不對發送錯誤的數據進行重試。 同步傳輸仍然可由IN事務或 OUT 事務組成:
同步傳輸中, 總線優先支持其等時性, 即保證帶寬, 因此, 對於數據的準確性的要求次之。基於此, 同步傳輸的事務中, 不包含握手包, 主機和設備都無需對接收到的數據返回握手信息。
同步傳輸中包含了 2 種最基本的事務類型, 即 IN 事務和 OUT 事務, 同中斷傳輸和批量傳輸一樣, 它也不支持設置 SETUP 事務。
IN事務:主機通過發送輸入包 IN(標識域 PID 爲 IN), 來啓動 1 個 IN 傳輸。
OUT事務:主機發送輸出包 OUT (標識域 PID 爲 OUT), 啓動 1 個 OUT 傳輸。
IN事務:設備緊接着 IN 令牌包, 以 DATA0 和 DATA1 交替觸發機制發送有效數據, 然後總線進入空閒狀態, 準備進行下一次傳輸。
OUT事務:同輸入 IN 事務一樣, 主機會緊接着 OUT 令牌包, 以 DATA0 和 DATA1 交替觸發機制發送有效數據給設備, 然後總線進入空閒狀態, 準備進行下一次傳輸。
與中斷傳輸和批量傳輸不同, 對於全速設備, 同步傳輸中不支持數據包的交替觸發機制,而且第一個數據包被初始化爲 DATA0, 因此 , 數據包將 一直以 DA TA0 發送 下去。 而高速和全速設備在一定條件下支持觸發機制, 情況較爲複雜。
(3)、總線傳輸特點
全速設備的同步傳輸,在1個幀內,可以包含1筆IN事務或OUT事務,而高速設備可以包含3筆事務。總線將會優先保證同步傳輸的帶寬 , 甚至會因此而暫時中止批量傳輸的進行。
(4)、數據包大小
全速設備數據包的大小爲 0~1023 字節,而高速設備爲 1024 字節。
(5)、支持設備類型
只有全速和高速設備支持同步傳輸 , 而低速設備不支持同步傳輸。
控制傳輸( Control Tran sfer)是最爲複雜的傳輸類型, 也是最爲重要的傳輸類型, 是 USB 枚舉階段最主要的數據交換方式。
控制傳輸的核心是 SETUP 事務,USB 定義了較爲複雜的控制傳輸的結構, 將其分爲 3 個大的步驟 :初始設置步驟、可選數據步驟、狀態信息步驟
初始設置步驟,由一筆SETUP事務構成。這筆SETUP事務有令牌包、數據包和握手包組成。
數據包階段 : 主機發送固定爲 8 個字節的 DATA0 包, 並且有確定的結構, 將這 8 個字節分配給 5 種命令信息, 即 bmRequest Type、bRequest、wValue、wIndex 和 wLength。
握手包階段 : 設備在接收到主機的命令信息後, 返回 ACK。此後, 總線進入空閒狀態,並準備“可選數據步驟”的開始。
②、可選數據步驟
如果在上一步驟中的命令要求讀/ 寫數據的話, 就由這一步驟來具體交換數據。如果沒有數據交換要求的, 這個步驟就可以省去。
控制傳輸的“可選數據步驟”中包含了 2 種最基本的事務 , 即 IN 事務和 OUT 事務。
控制傳輸的“可選數據步驟”中, 無論是 IN 事務, 還是 OUT 事務, 都包含了令牌包、數據包和握手包。
IN 事務: 主機通過發送輸入包 IN(標識域 PID 爲 IN), 來啓動 1 個 IN 傳輸。
OUT 事務: 主機發送輸出包 OUT (標識域 PID 爲 OUT), 啓動 1 個 OUT 傳輸。
數據包階段:需要特別注意的是, 由於“初始設置步驟”中已經包含了 1 個數據包階段,其中的數據是 DATA0 包, 因此 “可選數據步驟”中數據包的第 1個包將是 DATA1包, 然後, 接下來仍將是 DATA0/ 1 的交替觸發 :
設備忙,回覆無效包NAK,事務提前結束。主機不斷重試這個事務。
設備端點被禁止,回覆錯誤包STALL,事務提前結束,總線進入空閒狀態。
設備端點正常,且設備準備新的中斷處理,則設備會按主機要求回覆主機所需數據。
OUT 事務 : 結構相對較爲簡單, 主機將緊接着 OUT 令牌包, 就發送數據, 並按照DATA0 和 DAT A1 數據包交替觸發的順序來發送數據。
IN事務:如果主機正確地接收到了數據, 那麼就會給設備發送ACK; 如果數據包在傳輸過程中被破壞了, 那麼設備就會不回覆任何握手信息, 直接將總線轉入空閒狀態, 等待下一次傳輸。
OUT事務:設備忙,返回無效包NAK,總線進入空閒,直到主機重試發送該數據設備端點被禁止,回覆錯誤包STALL,事務提前結束,總線進入空閒狀態。 如果發送的數據沒有錯誤, 並且設備成功地接收, 那麼設備就返回ACK, 同時通知主機可以發送新的數據。如果數據包發生了CRC校驗錯誤, 將不會返回任何握手信息。
主機的控制讀操作中,應用的是OUT事務;而控制寫操作中應用的是IN事務。數據階段中發送的數據均爲DATA1包的0長度數據。
控制傳輸的“狀態信息步驟”中包含了2種最基本的事務,即輸入IN事務和輸出OUT事務。IN事務代表主機的寫操作, OUT事務代表主機的讀操作。
控制傳輸的“狀態信息步驟”中,無論是IN事務,還是OUT事務,都包含了令牌包、數據包和握手包。
令牌包階段:
IN 事務:主機通過發送輸入包IN(標識域 PID 爲 IN ), 來啓動1個IN傳輸。
OUT事務:主機發送輸出包 OUT (標識域 PID 爲 OUT), 啓動 1 個 OUT 傳輸。
數據包階段 :
IN 事務 : 如果設備沒有準備接收新的數據 , 那麼設備就返回NAK;如果相應的設備端點被禁止,那麼設備就發送STALL包;如果設備端點正常,並且設備準備新的中斷處理, 則設備就會按主機的要求發送所需0長度的數據。
OUT事務:結構相對較爲簡單,主機將緊接着OUT令牌包,就發送0長度的數據,並按照 DATA0 和 DATA1 數據包交替觸發的順序來發送數據。
握手包階段 :
IN事務:如果主機正確地接收到了數據, 那麼就會給設備發送ACK; 如果數據包在傳輸過程中被破壞了, 那麼設備就會不回覆任何握手信息, 直接將總線轉入空閒狀態, 等待下一次傳輸。
OUT事務:設備忙,返回無效包NAK,總線進入空閒,直到主機重試發送該數據設備端點被禁止,回覆錯誤包STALL,事務提前結束,總線進入空閒狀態。 如果發送的數據沒有錯誤, 並且設備成功地接收, 那麼設備就返回ACK, 同時通知主機可以發送新的數據。如果數據包發生了CRC校驗錯誤, 將不會返回任何握手信息。
(2)、控制傳輸數據發送順序
(3)、總線傳輸特點
對於低速和全速設備,總線將會爲控制傳輸保證至少10%的帶寬; 而高速設備的控制傳輸將會得到至少20%的帶寬。這樣,當有設備連接到主機上時,將會很快得到配置,而不必擔心因主機正在進行的其他 USB 傳輸而耽誤。
(4)、數據包大小
由於控制傳輸的3個步驟中都包含了數據包階段,因此,數據包的大小也要分開討論。在初始設置步驟中,已經知道是1個固定爲8 字節大小的DATA0包。在可選數據步驟中,如果是低速設備,則數據包爲8字節;全速設備的數據包大小可以是8、16、32和64字節; 而高速設備的數據包大小必須爲 64 字節。
(5)、支持設備類型
既然控制傳輸是最爲重要的一類傳輸類型 , 是所有 USB 設備被配置和使用的前提 , 因此 ,低速、全速和高速設備都支持控制傳輸。
如有錯誤,請及時提出。謝謝謝!!!