USB封包格式
通過(guò)上述的3個(gè)封包,即可組成一個(gè)數據交易。當然,這即是54233的第4個(gè)數字:3。
對于高速設備,為了改善NAK的機制,特別支持了NYET握手封包。這是由于當數據已經(jīng)傳輸至總線(xiàn)時(shí),通過(guò)NAK這個(gè)OUT數據交易的動(dòng)作是不夠的。況且若是在總線(xiàn)上存在著(zhù)高頻率的NAK傳輸過(guò)程,將會(huì )使得整個(gè)總線(xiàn)逐漸地被拖累,帶寬被分享掉。此時(shí),高速設各就可以使用特殊的PING封包(稍后會(huì )提及)來(lái)詢(xún)問(wèn),是否接收器還有緩沖區空間來(lái)接收OUT數據交易。如果設各以ACK來(lái)響應,那么傳送器就會(huì )安排
OUT傳輸。反之,如果響應的是NYET,那么傳送器就會(huì )以PING封包來(lái)查詢(xún)。如此,總線(xiàn)上就會(huì )有最佳的使用率。
5.特殊封包
總共包含了4個(gè)特殊封包(PRE、ERR、SPLIT與PING)。其中,一個(gè)僅使用在低速設備,一個(gè)僅使用在高速設各,其余兩個(gè)則是針對當低速或是全速設備連接上USB 2.0集線(xiàn)器后,再以高速的方式與主機通信時(shí),才會(huì )用到。
?。?)PRE封包
這個(gè)特殊前置(Special Preamble,PRE)封包擁有獨自的PID類(lèi)型名稱(chēng)PRE,其僅適用于主機想要從高速傳輸變成低速傳輸時(shí)所送出來(lái)的情形。也就是主機對于下端端口送出低速封包與低速設備通信之前,所必須先送出的PRE封包。在該PRE封包中,包含了前置碼以告訴集線(xiàn)器,下一個(gè)封包是低速。如此,集線(xiàn)器將會(huì )以即將接上的低速設備開(kāi)始執行通信的工作。此時(shí),PRE封包會(huì )放在導引至低速設各的所有令牌、數據以及握手封包之前。而高速設各是將PRE以SPLIT封包來(lái)加以編碼,因此不會(huì )重復地送出。對于原本已是低速的設備來(lái)說(shuō),不需要PRE封包。這種格式如下所列,僅包含兩個(gè)8位的數據域:SYNC與PRE。
?。?)PING封包
僅存于高速設備所使用的特殊封包是PING封包。主機會(huì )送出PING封包來(lái)找出是否高速設各端點(diǎn)在以批量或是包含以多個(gè)數據封包的控制傳輸來(lái)送出下一個(gè)數據封包之前,是否為忙碌的狀態(tài)。這是由于傳統的USB數據交易時(shí),若常以NAK來(lái)響應批量或控制的OUT傳輸,通常都會(huì )導致浪費太多的帶寬。因此,為了減少高速或控制的OUT端點(diǎn)的損失,USB 2.0新增了PING封包。一旦批量或控制傳輸的OUT數據交易被NAK響應后,主機控制器將會(huì )使用PING封包來(lái)查詢(xún)高速非周期性的端點(diǎn)是否有足夠的內存來(lái)接收wMaxPacketSize大小容量的數據。如果此端點(diǎn)具有足夠的緩沖區來(lái)使用,就以ACK來(lái)響應之;反之,繼續以NAK響應為止。
此外,高速非周期性的OUT端點(diǎn)也可以使用NYET來(lái)加以響應,以通知主機所要加載的數據是可以接收的,但是端點(diǎn)沒(méi)有足夠的內存。此時(shí),主機會(huì )使用PING令牌,直到端點(diǎn)表示了針對下一個(gè)OUT數據交易,已有足夠的緩沖區內存。
?。?)SPLIT封包
SPILIT封包定義了令牌封包為分割數據交易(split transactIon)的一部分。為了最佳地使用總線(xiàn)時(shí)間,USB 2.0主機與集線(xiàn)器會(huì )以高速來(lái)送出低速與全速的通信數據。至于為什么需要分割數據交易呢?這是由于當主機開(kāi)始傳輸一個(gè)針對低速或是全速的設各所預定的數據交易時(shí),那么最接近設備的2.0集線(xiàn)器就有責任去實(shí)現與此設各的數據交易。此外,也負責存儲任何回傳的數據或是狀態(tài)信息,以及以一個(gè)或是兩個(gè)稍后的數據交易來(lái)加以回報回去。如此,整個(gè)總線(xiàn)就無(wú)須去針對實(shí)現一個(gè)低速的交易來(lái)持續地等待。而這個(gè)介于集線(xiàn)器與主機之間的特殊數據交易,就稱(chēng)之為分割數據交易。
?。?)ERROR甚寸包
這個(gè)封包僅使用在分割數據交易時(shí)。2.0集線(xiàn)器會(huì )使用該封包并以低速或全速的數據交易來(lái)回報一個(gè)錯誤給主機。在此,讀者是否發(fā)現該PID碼值與PRE PID碼值是一樣的。但是其中,最大的差異是前者是應用在設各與集線(xiàn)器上,另一個(gè)則是應用在主機上。也即是集線(xiàn)器不會(huì )送出PRE封包給主機或是ERR封包給設各。
以下,將這些封包格式與字段等加以匯整,如表所列,并列出各個(gè)字段與其目的。
表 封包與字段之間的關(guān)系
續表
pid控制相關(guān)文章:pid控制原理
三相異步電動(dòng)機相關(guān)文章:三相異步電動(dòng)機原理
評論