和其他的一樣,usb資料是由二進位制數字串構成的,首先數字串構成域(有七種),域再構成包,包再構成事務(in、out、setup),事務最後構成傳輸(中斷傳輸、並行傳輸、批量傳輸和控制傳輸)。下面簡單介紹一下域、包、事務、傳輸,請注意他們之間的關係。
(一)域:是usb資料最小的單位,由若干位組成(至於是多少位由具體的域決定),域可分為七個型別:
1、同步域(sync),八位,值固定為0000 0001,用於本地時鐘與輸入同步
2、標識域(pid),由四位識別符號+四位識別符號反碼構成,表明包的型別和格式,這是乙個很重要的部分,這裡可以計算出,usb的標識碼有16種,具體分類請看問題五。
3、位址域(addr):七位位址,代表了裝置在主機上的位址,位址000 0000被命名為零位址,是任何乙個裝置第一次連線到主機時,在被主機配置、列舉前的預設位址,由此可以知道為什麼乙個usb主機只能接127個裝置的原因。
4、端點域(endp),四位,由此可知乙個usb裝置有的端點數量最大為16個。
5、幀號域(fram),11位,每乙個幀都有乙個特定的幀號,幀號域最大容量0x800,對於同步傳輸有重要意義(同步傳輸為四種傳輸型別之一,請看下面)。
6、資料域(data):長度為0~1023位元組,在不同的傳輸型別中,資料域的長度各不相同,但必須為整數個位元組的長度
7、校驗域(crc):對令牌包和資料報(對於包的分類請看下面)中非pid域進行校驗的一種方法,crc校驗在通訊中應用很泛,是一種很好的校驗方法,至於具體的校驗方法這裡就不多說,請查閱相關資料,只須注意crc碼的除法是模2運算,不同於10進製中的除法。
(二)包:由域構成的包有四種型別,分別是令牌包、資料報、握手包和特殊包,前面三種是重要的包,不同的包的域結構不同,介紹如下
1、令牌包:可分為輸入包、輸出包、設定包和幀起始包(注意這裡的輸入包是用於設定輸入命令的,輸出包是用來設定輸出命令的,而不是放據數的)
其中輸入包、輸出包和設定包的格式都是一樣的:
sync+pid+addr+endp+crc5(五位的校驗碼)
(上面的縮寫解釋請看上面域的介紹,pid碼的具體定義請看問題五)
幀起始包的格式:
sync+pid+11位fram+crc5(五位的校驗碼)
2、資料報:分為data0包和data1包,當usb傳送資料的時候,當一次傳送的資料長度大於相應端點的容量時,就需要把資料報分為好幾個包,分批傳送,data0包和data1包交替傳送,即如果第乙個資料報是data0,那第二個資料報就是data1。但也有例外情況,在同步傳輸中(四類傳輸型別中之一),所有的資料報都是為data0,格式如下:
sync+pid+0~1023位元組+crc16
3、握手包:結構最為簡單的包,格式如下
sync+pid
(注上面每種包都有不同型別的,usb1.1共定義了十種包,具體請見問題五)
(三)事務:分別有in事務、out事務和setup事務三大事務,每一種事務都由令牌包、資料報、握手包三個階段構成,這裡用階段的意思是因為這些包的傳送是有一定的時間先後順序的,事務的三個階段如下:
1、令牌包階段:啟動乙個輸入、輸出或設定的事務
2、資料報階段:按輸入、輸出傳送相應的資料
3、握手包階段:返回資料接收情況,在同步傳輸的in和out事務中沒有這個階段,這是比較特殊的。
事務的三種型別如下(以下按三個階段來說明乙個事務):
1、 in事務:
令牌包階段——主機傳送乙個pid為in的輸入包給裝置,通知裝置要往主機傳送資料;
資料報階段——裝置根據情況會作出三種反應(要注意:資料報階段也不總是傳送資料的,根據傳輸情況還會提前進入握手包階段)
1) 裝置端點正常,裝置往入主機裡面發出資料報(data0與data1交替);
2) 裝置正在忙,無法往主機發出資料報就傳送nak無效包,in事務提前結束,到了下乙個in事務才繼續;
3) 相應裝置端點被禁止,傳送錯誤包stall包,事務也就提前結束了,匯流排進入空閒狀態。
握手包階段——主機正確接收到資料之後就會向裝置傳送ack包。
2、 out事務:
令牌包階段——主機傳送乙個pid為out的輸出包給裝置,通知裝置要接收資料;
資料報階段——比較簡單,就是主機會裝置送資料,data0與data1交替
握手包階段——裝置根據情況會作出三種反應
1)裝置端點接收正確,裝置往入主機返回ack,通知主機可以傳送新的資料,如果資料報發生了crc校驗錯誤,將不返回任何握手資訊;
2) 裝置正在忙,無法往主機發出資料報就傳送nak無效包,通知主機再次傳送資料;
3) 相應裝置端點被禁止,傳送錯誤包stall包,事務提前結束,匯流排直接進入空閒狀態。
3、setut事務:
令牌包階段——主機傳送乙個pid為setup的輸出包給裝置,通知裝置要接收資料;
資料報階段——比較簡單,就是主機會裝置送資料,注意,這裡只有乙個固定為8個位元組的data0包,這8個位元組的內容就是標準的usb裝置請求命令(共有11條,具體請看問題七)
握手包階段——裝置接收到主機的命令資訊後,返回ack,此後匯流排進入空閒狀態,並準備下乙個傳輸(在setup事務後通常是乙個in或out事務構成的傳輸)
(四)傳輸:傳輸由out、in、setup事務其中的事務構成,傳輸有四種型別,中斷傳輸、批量傳輸、同步傳輸、控制傳輸,其中中斷傳輸和批量轉輸的結構一樣,同步傳輸有最簡單的結構,而控制傳輸是最重要的也是最複雜的傳輸。
1、中斷傳輸:由out事務和in事務構成,用於鍵盤、滑鼠等hid裝置的資料傳輸中
2、批量傳輸:由out事務和in事務構成,用於大容量資料傳輸,沒有固定的傳輸速率,也不占用頻寬,當匯流排忙時,usb會優先進行其他型別的資料傳輸,而暫時停止批量轉輸。
3、同步傳輸:由out事務和in事務構成,有兩個特殊地方,第一,在同步傳輸的in和out事務中是沒有返回包階段的;第二,在資料報階段所有的資料報都為data0
4、控制傳輸:最重要的也是最複雜的傳輸,控制傳輸由三個階段構成(初始設定階段、可選資料階段、狀態資訊步驟),每乙個階段可以看成乙個的傳輸,也就是說控制傳輸其實是由三個傳輸構成的,用來於usb裝置初次加接到主機之後,主機通過控制傳輸來交換資訊,裝置位址和讀取裝置的描述符,使得主機識別裝置,並安裝相應的驅動程式,這是每乙個usb開發者都要關心的問題。
1、初始設定步驟:就是乙個由set事務構成的傳輸
2、可選資料步驟:就是乙個由in或out事務構成的傳輸,這個步驟是可選的,要看初始設定步驟有沒有要求讀/寫資料(由set事務的資料報階段傳送的標準請求命令決定)
3、 狀態資訊步驟:顧名思義,這個步驟就是要獲取狀態資訊,由in或out事務構成構成的傳輸,但是要注意這裡的in和out事務和之前的int和out事務有兩點不同:
1) 傳輸方向相反,通常in表示裝置往主機送資料,out表示主機往裝置送資料;在這裡,in表示主機往裝置送資料,而out表示裝置往主機送資料,這是為了和可選資料步驟相結合;
2) 在這個步驟裡,資料報階段的資料報都是0長度的,即sync+pid+crc16
除了以上兩點有區別外,其他的一樣,這裡就不多說
USB資料格式
usb傳輸型別 1.控制傳輸 非週期性,突發 用於命令和狀態的傳輸 2.大容量資料傳輸 bulk 非週期性,突發 大容量資料的通訊,資料可以占用任意頻寬,並容忍延遲 3.同步傳輸 週期性.持續性的傳輸,用於傳輸與時效相關的資訊,並且在資料中儲存時間戳的資訊 4.中斷傳輸 週期性,低頻率 允許有限延遲...
USB 協議資料格式
前面已經轉了一篇類似的文章,這篇和那篇其實很相似,只是按我的習慣編寫而成。內容和圖表基本 於www.usb.org。lsb bit first 1.域 fields sync 所有包開始都必須有的,1位元組在 low full speed,4 位元組在high speed pid packet id...
從零開始學USB(六 USB通訊的資料格式)
前面章節已經學習過了usb的引腳定義了,但是對於其中的usb 2.0的兩根資料線d 和d 所對應的資料傳輸,卻沒有詳細介紹。此處就是介紹,在此序列資料線中,資料是如何被編碼和傳送的。usb所傳輸的資料,用的資料編碼方式是nrzi non return to zero inverted 其具體的含 釋...