上一篇文章我們介紹了數據包的結構以及傳輸過程,提到了令牌、數據、握手 特殊等等專業的名詞,后面的文章我們來一個一個詳細介紹一下他們,今天我們先來介紹令牌包。
令牌包用來啟動一次USB傳輸。因為USB是主從結構的拓撲結構,所以所有的數據傳輸都是由主機發起的,設備只能被動地接聽數據(唯一的例外是支持遠程喚醒的設備能夠主動改變總線的狀態讓集線器感知到設備的喚醒信號,但是這個過程并不傳送數據,只是改變一下總線的狀態)。這就需要主機發送一個令牌來通知哪個設備進行響應,如何響應。
令牌包有4種,分別為輸出(OUT)、輸入(In)、建立(SETUP)和幀起始(sOF Start Of Frame)。
●輸出令牌包用來通知設備將要輸出一個數據包。
●輸入令牌包用來通知設備返回一個數據包。
●建立令牌包只用在控制傳輸中,它跟輸出令牌包的作用一樣,也是通知設備將要輸出一個數據包,兩者的區別在于: SETUP令牌包后只使用DATA0數據包,且只能發到設備的控制端點,并且設備必須要接收,而OUT令牌包沒有這些限制。
●幀起始包在每幀(或微)開始時發送,它以廣播的形式發送,所有USB全速設備和高速設備都可以接收到SOF包。USB全速設備每毫秒產生一個幀,而高速設備每125s產生一個微幀USB主機會對當前幀號進行計數,在每次幀開始時(或者微幀開始時,每毫秒有8個微幀,這8個微幀的幀號是一樣的,即相同的SOF)通過SOF包發送幀號。SOF中的幀號是11位的。在4個令牌包中,只有SOF令牌包之后不跟隨數據傳輸,其他的都有數據傳輸圖1是SOF令牌包的結構。
每個令牌包,最后都有一個CRC5的校驗,它只校驗PID之后的數據,不包括PID本身,因為PID本身已經有4個取反的位進行校驗了。
?
圖1 ?SOF令牌包的結構圖
圖1是OUT、IN、 SETUP令牌包的結構。它們具有同樣的結構:同步域、包標識域、地址域、端點域、CRC5校驗域和包結束。其中,地址域是要訪問的設備的地址,端點域是要訪問的端點號(還記得前面說過的教學樓模型嗎?回憶一下地址和端點的概念);CRC5校驗只計算PID之后的地址域和端點域,而不包括PID。前面說過,數據在總線上傳輸時,每個域的LSB在前,請記住這一點。例如,7位地址在總線上傳輸的先后就是A0、A1、A2、A3、A4、A5、A6。
?
圖2 ?OUT IN SETUP令牌包結構圖
上面就是令牌包的全部介紹了,大家對令牌包有一個認識了嗎?
往期回顧:
●存儲器保護單元
●快速應用張飛單片機之通用定時器
●USB的四種傳輸類型之批量傳輸
END

