USB封包中的數(shù)據(jù)域類型
不同的封包類型,含有不同數(shù)量與形態(tài)的數(shù)據(jù)域。以下依序介紹各種數(shù)據(jù)域的規(guī)范與結(jié)構(gòu)。而通過不同形態(tài)的數(shù)據(jù)域的組成,即可構(gòu)成所要的封包類型。
封包內(nèi)所包含的信息數(shù)據(jù)位于1~3 074字節(jié)之間。第1個字節(jié)總是封包標(biāo)識符(PID),用來定義其余的信息字節(jié)所要表達的意義。而封包的最后一部分,則是封包結(jié)束EOP(End-of-Packet)標(biāo)識符。
但應(yīng)注意,USB的串行傳輸是先送出最低位LSB,然后再依序送出,直到最高位MSB為止,如圖1所示。而PID[0:3]與PID[0:3]的意義稍后會再加以解釋。
圖1 封包格式
首先,介紹第一個,也是每一種封包都含有的數(shù)據(jù)域:同步列數(shù)據(jù)域。
1.同步列(Synchronization Sequence,SYNC)數(shù)據(jù)域
SYNC字段由8位組成,作為每一個數(shù)據(jù)封包的前導(dǎo),用來產(chǎn)生同步,將會起始PLL。因此,它的數(shù)值固定為:00000001。這個字段僅可以在閑置時,作傳輸之用。封包的起始是由總線從J狀態(tài)轉(zhuǎn)換成K狀態(tài)的變化所產(chǎn)生設(shè)置的。大部分的傳送過程是由傳送器在下一個可用的位時間所驅(qū)動的,并用來產(chǎn)生一個SYNC序列。而另一端的接收器即可利用此序列,將其所接收到時鐘與所接收到的數(shù)據(jù)傳輸過程,兩者加以調(diào)和,如此即可確保封包的信息部分是可靠地接收到。這個SYNC序列以2個K狀態(tài)來結(jié)束,且在下一個位時間,開始傳遞封包的信息。
此外,若針對高速傳輸,SYNC序列將會由PC主機所產(chǎn)生,且其中包含了09位的SYNC(KJ KJKJ…KJKK)。雖然這些SYNC序列將會由于集線器的阻隔而消耗若干信號,但在最后末端的設(shè)備至少可以收到12位SYNC序列。而這已足夠去鎖住接收的時鐘,并用來產(chǎn)生PLL。但對低速/全速的設(shè)備來說,僅需使用8位SYNC序列。
2.封包標(biāo)識符(Packet Identifier,PID)數(shù)據(jù)域
PID字段緊隨在SYNC字段后面,用來表示數(shù)據(jù)封包的類型。PID字段由一個4位的標(biāo)識符欄以及一個互為補碼的檢查欄組成。在表3,2中,列出了封包的類型,其可分為令牌、數(shù)據(jù)、握手或特殊等4種封包類型。這4種類型可由PID[0:1]2個位來定義。此外,在每一種的封包類型中,還可通過PID[2:3]2個位來定義出不同的封包格式。例如,在令牌封包中,又可細(xì)分為OUT、IN、SETUP與SOF等4種封包格式。如此,可推類至其余的封包類型。但在2.0規(guī)范中,新增了幾個封包標(biāo)識符,其中,數(shù)據(jù)封包類型新添了DATA2與DATA3兩個封包標(biāo)識符。
表 各種封包的類型與規(guī)范
續(xù)表
評論