在我們前面的文章里面,我們描述了什么是批量傳輸,中斷傳輸,等時傳輸,下面的文章我們來介紹一下控制傳輸。
控制傳輸與前面三種傳輸相比,要稍微復雜一些。前面在介紹設備的枚舉過程時,就提到過控制傳輸。控制傳輸分為三個過程:第一個過程是建立過程;第二個過程是可選的數據過程;第三個過程是狀態過程。
建立過程使用一個建立事務。建立事務是一個輸出數據的過程,與批量傳輸的輸出事務相比,有幾處不一樣:首先是令牌包不一樣,建立過程使用 SETUP令牌包;其次是數據包類型, SETUP只能使用DATA0包;最后是握手包,設備只能使用ACK來應答(除非出錯了,不應答),而不能使用NAK或者 STALL來應答,即設備必須要接收建立事務的數據。圖1是建立事務的流程圖。
?
圖1
數據過程是可選的,即一個控制傳輸可能沒有數據過程。如果有,一個數據過程可以包含一筆或者多筆數據事務。控制傳輸所使用的數據事務與批量傳輸中的批量事務是一樣的。要注意的是,在數據過程中,所有的數據事務必須是同一個傳輸方向的。也就是說,在控制讀傳輸中,數據過程中的所有數據事務都必須是輸入的;在控制寫傳輸中,數據過程中的所有數據事務都必須是輸出的。一旦數據傳輸方向發生改變,就會認為進入到了狀態過程。數據過程的第一個數據包必須是DATA1包,然后每次正確傳輸一個數據包后就在DATA0和DATA1之間交替。
狀態過程也是一筆批量事務,它的傳輸方向剛好跟前面的數據階段相反,即控制寫傳輸在狀態過程使用一個批量輸入事務;控制讀傳輸在狀態過程使用一個批量輸出事務。狀態過程只使用DATA1包。
控制傳輸之所以要弄得這么復雜,是因為它要保證數據傳輸過程的數據完整性。設備枚舉過程中各種描述符的獲取以及設置地址、設置配置等,都是通過控制傳輸來實現的。關于USB協議中定義的控制傳輸所使用的各種標準請求的數據結構和請求命令,將會在后面的實例中具體、詳細地分析。
接下來我們來說一下端點類型和傳輸類型的關系。一個具體的端點,只能工作在一種傳輸模式下。通常,我們把工作在什么模式下的端點,就叫做什么端點。例如,控制端點、批量端點等。端點0是每個USB設備都必須具備的默認控制端點,它一上電就存在并且可用。設備的各種描述符以及主機發送的一些命令,都是通過端點0傳輸的。其他端點是可選的,需要根據具體的設備來決定。非0端點只有在 Set Config之后才能使用。
今天就跟大家分享到這里,你學會了嗎?
往期回顧:
●指針和數組的恩恩怨怨
●USB的四種傳輸類型之中斷傳輸等時傳輸
●單片機電源管理
END

