USB數(shù)據(jù)是由二進(jìn)制數(shù)字串構(gòu)成的,首先數(shù)字串構(gòu)成域(有七種),域再構(gòu)成包,包再構(gòu)成事務(wù)(IN、OUT、SETUP),事務(wù)最后構(gòu)成傳輸(中斷傳輸、并行傳輸、批量傳輸和控制傳輸)。下面介紹一下域、包和事務(wù)。
域是USB數(shù)據(jù)最小的單位,由若干位組成(多少位由具體的域決定),域可分為七個(gè)類(lèi)型:
1、同步域(SYNC)
所有的USB包都由SYNC開(kāi)始,高速包的SYNC寬度為32bit,全速/低速包的SYNC段度為8bit。實(shí)際接收到的SYNC長(zhǎng)度由于USB HUB的關(guān)系,可能會(huì)小于該值。八位的值固定為0000 0001,用于本地時(shí)鐘與輸入同步。
2、標(biāo)識(shí)域(PID)
由四位標(biāo)識(shí)符 + 四位標(biāo)識(shí)符反碼構(gòu)成,表明包的類(lèi)型和格式,這是一個(gè)很重要的部分,這里可以計(jì)算出,USB的標(biāo)識(shí)碼有16種。USB2.0使用了十六種標(biāo)識(shí)碼,標(biāo)識(shí)碼的作用是用來(lái)說(shuō)明包的屬性的,標(biāo)識(shí)碼是和包聯(lián)系在一起的,標(biāo)識(shí)碼分別有以下十六種:
令牌包 :
0x01:輸出(OUT)啟動(dòng)一個(gè)方向?yàn)橹鳈C(jī)到設(shè)備的傳輸,并包含了設(shè)備地址和標(biāo)號(hào)。
0x09:輸入(IN) 啟動(dòng)一個(gè)方向?yàn)樵O(shè)備到主機(jī)的傳輸,并包含了設(shè)備地址和標(biāo)號(hào)。
0x05:幀起始(SOF)表示一個(gè)幀的開(kāi)始,并且包含了相應(yīng)的幀號(hào)。
0x0d:設(shè)置(SETUP)啟動(dòng)一個(gè)控制傳輸,用于主機(jī)對(duì)設(shè)備的初始化。
數(shù)據(jù)包 :
0x03:偶數(shù)據(jù)包(DATA0)。
0x0b:奇數(shù)據(jù)包(DATA1)。
握手包:
0x02:確認(rèn)接收到無(wú)誤的數(shù)據(jù)包(ACK)。
0x0a:無(wú)效,接收(發(fā)送)端正在忙而無(wú)法接收(發(fā)送)信息。
0x0e:錯(cuò)誤,端點(diǎn)被禁止或不支持控制管道請(qǐng)求。
特殊包0x0C前導(dǎo),用于啟動(dòng)下行端口的低速設(shè)備的數(shù)據(jù)傳輸。
3、地址域(ADDR):七位地址,代表了設(shè)備在主機(jī)上的地址,地址000 0000被命名為零地址,是任何設(shè)備第一次連接到主機(jī)時(shí),在被主機(jī)配置、枚舉前的默認(rèn)地址,由此可以知道為什么一個(gè)USB主機(jī)只能接127個(gè)設(shè)備的原因。
4、端點(diǎn)域(ENDP),四位,由此可知一個(gè)USB設(shè)備端點(diǎn)數(shù)量最大為16個(gè)。
5、幀號(hào)域(FRAM),11位,每一個(gè)幀都有一個(gè)特定的幀號(hào),幀號(hào)域最大容量0x800,對(duì)于同步傳輸有重要意義。
6、數(shù)據(jù)域(DATA):長(zhǎng)度為0~1023字節(jié),在不同的傳輸類(lèi)型中,數(shù)據(jù)域的長(zhǎng)度各不相同,但必須為整數(shù)個(gè)字節(jié)的長(zhǎng)度。
7、校驗(yàn)域(CRC):對(duì)令牌包和數(shù)據(jù)包中非PID域進(jìn)行校驗(yàn)的一種方法,CRC校驗(yàn)在通訊中應(yīng)用很泛,是一種很好的校驗(yàn)方法,CRC碼的除法是模2運(yùn)算,不同于10進(jìn)制中的除法。
-
usb
+關(guān)注
關(guān)注
60文章
7882瀏覽量
263777 -
USB數(shù)據(jù)
+關(guān)注
關(guān)注
0文章
4瀏覽量
6588
原文標(biāo)題:USB數(shù)據(jù)格式
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論