usb2.0協(xié)議層_第1頁
usb2.0協(xié)議層_第2頁
usb2.0協(xié)議層_第3頁
usb2.0協(xié)議層_第4頁
usb2.0協(xié)議層_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 USB2.0協(xié)議第八章協(xié)議層這章從字段和包的定義開始,從底向上地展示萬用串列總線協(xié)議。接著是對不同事務(wù)類型的包事務(wù)格式的描述。然后是鏈路層流程控制和事務(wù)級的故障恢復(fù)。本章的最后將討論復(fù)執(zhí)同步化的恢復(fù)和高速網(wǎng)絡(luò)偵測協(xié)議的同步,超時(shí)干擾,總線活動(dòng)喪失。8.1位定序數(shù)據(jù)位被發(fā)送到總線的時(shí)候,首先最低有效位(LSb),跟著是下一個(gè)最低有效位,最后是最高有效位(MSb)o在以后圖表中的,包以下列形式給出,即包中單個(gè)的位和字段從左到右的順序就是它們通過總線的順序。8.2同步字段所有的包都從同步(同步)字段開始的,同步字段是產(chǎn)生最大的邊緣轉(zhuǎn)換密度的編碼序列。同步字段被輸入電路用來以本地時(shí)鐘對齊輸入數(shù)據(jù)。對

2、丁全速/低速模式,最初的同步被定義為8字節(jié)的長度,而對于高速模式則定義為32字節(jié)的長度。正如第七章描述的那樣,標(biāo)準(zhǔn)的同步字段可以更加簡短。同步字段是用丁同步的機(jī)制,在以后圖表當(dāng)中將不被表示(參照節(jié)7.1.10)o同步字段里的最后2位是同步字段結(jié)束的記號,并且標(biāo)志了包標(biāo)識符(PID,)的開始。8.3包字段格式在后面兒節(jié)將描述標(biāo)記,數(shù)據(jù)和握手包的字段格式。包中位的定義是以未編碼的數(shù)據(jù)格式給出。為了清楚起見,在此不考慮NRZI編碼和位填充的影響。開始一小包的)和包結(jié)束分隔符的所有包都分別有包開始。包開始分隔符是同步字段的一部分,而包結(jié)束(E0P)分隔符在第7章有所描述。8.3.1包標(biāo)識符字段所有萬用

3、串列總線包的同步字段后都緊跟著包標(biāo)識符(PID)。如圖8-1所示,包標(biāo)識符由4位的包類型字段和其后的4位的校驗(yàn)字段構(gòu)成。包標(biāo)識符指出了包的類型,并由此隱含地指出了包的格式和包上所用錯(cuò)誤檢測的類型。包標(biāo)識符的4位的校驗(yàn)字段可以保證包標(biāo)識符譯碼的可靠性,這樣包的余項(xiàng)也就能被正確地解釋。包標(biāo)識符的校驗(yàn)字段通過對包類型字段的二進(jìn)制的求反碼產(chǎn)生的。如果4個(gè)PID檢驗(yàn)位不是它們的各白包標(biāo)識符位的補(bǔ),則說明存在PID錯(cuò)。(LSB)(MSb)PDIP(D1PID2PID3阿阿匹眄I圖8-1PID格式主機(jī)和所有功能部件都必須對得到全部PID字段實(shí)行完整的譯碼。任何收到包標(biāo)識符,如果含有失敗的校驗(yàn)字段,或者經(jīng)譯碼

4、得到未定義的值,則該包標(biāo)識符被假定是被損壞的,而且包的余項(xiàng)將被包接收機(jī)忽略。如果一個(gè)功能部件收到了包含了它所不支持的事務(wù)類型或方向的合法包標(biāo)識符,則不必應(yīng)答。例如,只能輸入的端口(IN-onlyEndpoint)必須忽略輸出標(biāo)記。表8-1列出了包標(biāo)識符類型,編碼及其描述。表8-1PID類型PID類型PID名PIDE3:0描述標(biāo)記出H)的輸0001B在主機(jī)到功能部件的事務(wù)中有地址+端(表征)1001B口號)的輸入(0101B在功能部件到主機(jī)的事務(wù)中有地址+端口號幀開始(S0F)1101B幀開始標(biāo)記和幀號建立(裝備)在主機(jī)到功能部件建立一個(gè)控制管道的事務(wù)中有地址+端口號數(shù)據(jù)數(shù)據(jù)00011B偶數(shù)據(jù)包

5、PID(數(shù)據(jù))(DATA0)數(shù)據(jù)11011B奇數(shù)據(jù)包PID(DATA1)數(shù)據(jù)20111B高速寬帶同步傳輸幀數(shù)據(jù)包PID(更多(DATA2)內(nèi)容請參見5.9.2章節(jié)部分)MDATA1111B高速寬帶分段傳輸數(shù)據(jù)包PID(更多內(nèi)容請參見5.9.2,11.20和11.21章節(jié)部分)握手確認(rèn)(ACK)0010B接收器收到無措數(shù)據(jù)包;(Handshake)不確認(rèn)1010B接收設(shè)備部不能接收數(shù)據(jù),或發(fā)送設(shè)備不(NAK)能發(fā)送數(shù)據(jù);停止(STALL)1110B端口掛起,或一個(gè)控制管道請求不被支持。無回應(yīng)0110B(NYET)尚未從接收者獲得回應(yīng)。(更多內(nèi)容請參見8.5.1和11.17-11.21章節(jié)部分)專

6、用(special)前同步(PRE)1100B(標(biāo)記)主機(jī)發(fā)送的前同步字。打開到低速設(shè)備的下行總線通信。報(bào)錯(cuò)(ERR)1100B(握手)分段傳輸?shù)牟铄e(cuò)握手(重新使用PRE量值)分段(SPLIT)1000B(標(biāo)記)高速分段傳輸標(biāo)記(參見8.4.2偵測(PING)0100B章節(jié)部分)預(yù)留0000B(標(biāo)記)對bulk/control模式下端口的高(Reserved)速數(shù)據(jù)流控制偵測(參見8.5.1章節(jié)部分)預(yù)留PID*注解:PID位以最高位在前的順序被表示。在萬用串列總線上被發(fā)送的時(shí)候,最右的位(位0)將被第一個(gè)發(fā)出。包標(biāo)識符被分為4個(gè)編碼組:標(biāo)記,數(shù)據(jù),握手和專用。包標(biāo)識符傳送的前2位(PID)指

7、出了其屬于哪個(gè)組。這說明包標(biāo)識符編碼的分布。8.3.2地址字段功能部件端口使用2個(gè)字段:功能部件地址字段和端口字段。功能部件對地址和端口字段都需耍進(jìn)行譯碼。不允許使用地址或端口別名(Aliasing),并且任何一個(gè)字段不匹配,此標(biāo)記都必須被忽略。另外,對未初始化的端口訪問將使得標(biāo)記被忽略。地址字段功能部件地址(ADDR)字段通過其地址指定功能部件,至丁是數(shù)據(jù)包的發(fā)出地還是目的地,則取決丁標(biāo)記PID的值。如圖8-2所示,ADDR指定了總共128個(gè)地址。地址字段被用丁輸入,建立和輸出標(biāo)記。由定義可知,每個(gè)ADDR値都定義了單一的功能部件。剛一復(fù)位和加電的時(shí)候,功能部件的地址默認(rèn)值為零,并且必須由主

8、機(jī)在枚舉過程中編程。功能部件地址零被用作為缺省地址,不可被分配作任何別的用途。)WSb)Ad叫Addr1Addr2Ad叫Addr4AddrsAdd%圖8-2地址字段端口字段如圖8-3所示,附加的4位的端口(ENDP)字段在功能部件需耍一個(gè)以上端口時(shí)候允許更靈活的尋址。除了端口地址0之外,端口個(gè)數(shù)是由功能部件決定的。端口字段只對輸入,建立和輸出標(biāo)記PID有定義。所有的功能部件都必須在端口0提供一個(gè)控制管道(缺省控制管道)。對丁低速設(shè)備,每個(gè)功能部件最多提供3個(gè)管道:在端口0的控制管道加上2個(gè)附加管道(或是2個(gè)控制管道,或是1個(gè)控制管道和1個(gè)中斷端口,或是2個(gè)中斷端口)。全速功能部件可以支持最多可

9、達(dá)16個(gè)的任何類型的端口。LSb)(MSb)Ertd%E血圖8-3端口字段8.3.3幀號字段幀號字段是一個(gè)11位的字段,主機(jī)每過一幀就將其內(nèi)容加一。幀號字段達(dá)到其最大值7FFH時(shí)歸零,且它僅每個(gè)幀最初時(shí)刻在SOF標(biāo)記中被發(fā)送。8.3.4數(shù)據(jù)字段數(shù)據(jù)字段可以在0到1,023字節(jié)之間變動(dòng),但必須是整數(shù)個(gè)字節(jié)。圖8-4為多字節(jié)顯示格式。每個(gè)字節(jié)的范圍內(nèi)的數(shù)據(jù)位移出時(shí)都是最低位(LSb)在前。ByteN-1ByteN圖8-4數(shù)據(jù)字段格式ByteN+166如同在第5章所描述的那樣,數(shù)據(jù)包大小隨著傳送類型而變化。8.3.5循環(huán)冗余校驗(yàn)循環(huán)冗余校驗(yàn)(CRC)被用來在標(biāo)記和數(shù)據(jù)包中保護(hù)所有的非PID字段。在上

10、下文中,這些字段被認(rèn)為是保護(hù)字段。PID不在含有CRC的包CRC校驗(yàn)范圍內(nèi)。在位填充之前,在發(fā)送器中所有的CRC都由它們的各H字段產(chǎn)生。同樣地,在填充位被去除之后,CRC在接收器中被譯碼。標(biāo)記和數(shù)據(jù)包的CRC可100%判斷單位錯(cuò)和雙位錯(cuò)。失敗的CRC指出了保護(hù)字段中至少有一個(gè)字段被損壞,并導(dǎo)致接收器忽略那些字段,且在大部分情況下忽略整個(gè)包。為了CRC的發(fā)生和校檢,發(fā)生器和檢驗(yàn)器里的移位寄存器置成為全1型。對于每個(gè)被發(fā)送或者被收到的數(shù)據(jù)位,當(dāng)前余項(xiàng)的最高一位和數(shù)據(jù)位進(jìn)行異或(X0R),然后,余項(xiàng)是左移1位,并且,最低一位置零。如果異或的結(jié)果是1,余項(xiàng)和生成多項(xiàng)式作異或。當(dāng)檢査的字段最后的一位被發(fā)

11、送的時(shí)候,發(fā)生器里的CRC被顛倒,再以最高位(MSb)在前發(fā)給檢驗(yàn)器。當(dāng)檢驗(yàn)器收到CRC的最后一位,且不發(fā)生錯(cuò)誤的時(shí)候,余項(xiàng)將等丁多項(xiàng)式的剩余。如果剩余與包接收器中最后計(jì)算出的檢驗(yàn)和余項(xiàng)不匹配,則存在CRC誤差。對于CRC,必須滿足位填充的耍求,且如果前6位都是1的話,這包括在CRC的最后插入零,。標(biāo)記CRC標(biāo)記使用了5位的CRC字段,它覆蓋了輸入,建立和輸出標(biāo)記的ADDR和ENDP字段,或S0F標(biāo)記的時(shí)間戳字段。生成多項(xiàng)式如下:G(X)=Xs+X!+1這個(gè)多項(xiàng)式的二進(jìn)制位組合是00101B。如果所有的標(biāo)記位都被準(zhǔn)確無誤地收到,接收機(jī)中的5位剩余將是01100Bo數(shù)據(jù)CRC數(shù)據(jù)CRC是作用于數(shù)

12、據(jù)包的數(shù)據(jù)字段上的16位多項(xiàng)式。產(chǎn)生的多項(xiàng)式是如下G(X)=Xu+X,s+X!+l這個(gè)多項(xiàng)式的二進(jìn)制位組合是1000000000000101B。如果全部的數(shù)據(jù)和CRC位被準(zhǔn)確無誤地收到,16位剩余將是1000000000001101B。8.4包格式這節(jié)展示標(biāo)記,數(shù)據(jù)和握手包的包格式。這些圖將以位被挪動(dòng)到總線上的順序顯示包內(nèi)的字段。8.4.1標(biāo)記包圖8-5顯示了標(biāo)記包的字段格式。標(biāo)記由PID,ADDR和ENDP構(gòu)成,其中PID指定了包是輸入,輸出還是建立類型。而PING特殊標(biāo)記包也有相同的構(gòu)成結(jié)構(gòu)。對丁輸出和建立事務(wù),地址和端口字段唯一地確定了接下來將收到數(shù)據(jù)包的端口。對丁輸入事務(wù)的,這些字段唯

13、一地確定了哪個(gè)端口應(yīng)該傳送數(shù)據(jù)包。對T-PING處理環(huán)節(jié),這些字段唯一地確定了發(fā)送數(shù)據(jù)包的端口。只有主機(jī)能發(fā)出標(biāo)記包。輸入PID定義了從功能部件到主機(jī)的數(shù)據(jù)事務(wù)。輸出和建立PID定義了從主機(jī)到功能部件的數(shù)據(jù)事務(wù)。偵測PID定義了從功能部件到主機(jī)的握手處理環(huán)節(jié)。(lsb)(msb)FieldPIDlDDRENDPCRC5Bits8745VJ圖8-5標(biāo)記包格式如上圖所示,標(biāo)記包包括了覆蓋地址和端口字段的5位CRC。CRC并不覆蓋PID,因?yàn)樗蠬己的校驗(yàn)字段。標(biāo)記和幀開始(S0F)包是由小包)界定的3個(gè)個(gè)字節(jié)的包字段數(shù)據(jù)后面的包結(jié)束(E0P,結(jié)束。如果包被譯碼為合法標(biāo)記或S0F,但卻沒有在3個(gè)字節(jié)

14、之后以E0P終止,則它被認(rèn)為是無效的,并被接收器忽略。8.4.2數(shù)據(jù)分割特殊標(biāo)記包USB為數(shù)據(jù)分割傳輸定義了特殊的標(biāo)記:SPLITo與其他普通的三字節(jié)標(biāo)記包不同,這是一個(gè)四字節(jié)的標(biāo)記包。數(shù)據(jù)分割傳輸標(biāo)記包提供了攜帶額外特殊傳輸信息的更多的傳輸字節(jié)。數(shù)據(jù)分割傳輸標(biāo)記用來支持主機(jī)控制器與處于高速運(yùn)轉(zhuǎn)狀態(tài)的集線器之間圖8-11端II字段 # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?數(shù)據(jù)分割傳輸,而這一高速運(yùn)轉(zhuǎn)是集線器的下行端口與全速/低速設(shè)備之間進(jìn)行的。有兩種數(shù)據(jù)分割傳輸被規(guī)定使用SPLIT特殊標(biāo)記:始端數(shù)據(jù)分割傳輸(SSPLIT)和末端數(shù)據(jù)分割傳輸(CSPLIT)o如下面的章節(jié)所述,數(shù)據(jù)分割傳輸特殊標(biāo)

15、記的字段表明了特殊的數(shù)據(jù)分割傳輸。數(shù)據(jù)分割傳輸高速數(shù)據(jù)分割傳輸僅僅用丁主機(jī)與連有全速/低速設(shè)備的集線器之間的傳輸。這種高速數(shù)據(jù)分割傳輸用來通過集線器和一些全速/低速設(shè)備端口初始化全速/低速傳輸。高速數(shù)據(jù)分割傳輸也允許重新從集線器獲得全速/低速傳輸?shù)耐瓿蔂顟B(tài)。這一方式允許主機(jī)控制器先通過高速傳輸開始全速/低速傳輸,再繼續(xù)其他高速傳輸而無需等待全速/低速傳輸以較慢速度進(jìn)行或完成。關(guān)丁狀態(tài)機(jī)制和數(shù)據(jù)分割傳輸?shù)却齻鬏敹x的更多細(xì)節(jié)請見第11章節(jié)。高速數(shù)據(jù)分割傳輸有兩個(gè)部分:始端數(shù)據(jù)分割傳輸和末端數(shù)據(jù)分割傳輸。數(shù)據(jù)分割傳輸僅被定義用來完成主機(jī)控制器和集線器之間的傳輸。沒有其他高速、全速/低速設(shè)備使用數(shù)據(jù)

16、分割傳輸。圖8-6顯示了組成一般始端數(shù)據(jù)分割傳輸?shù)男畔顟B(tài)標(biāo)記有兩個(gè)信息包:SSPLIT標(biāo)記和全速/低速標(biāo)記。狀態(tài)標(biāo)記有選擇地跟隨一個(gè)信息包或者一個(gè)握手包,這取決丁數(shù)據(jù)傳輸?shù)闹噶钜约芭c傳輸類型的握手是否被定義。始端數(shù)據(jù)分割傳輸可以2個(gè)、3個(gè)或4個(gè)信息包,這取決于特定的傳輸類型和數(shù)據(jù)指令。SSPLITTokenFS/LSToken:DATAxHandshake:圖8-11端II字段 # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#圖8-11端II字段 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#TokenPhase圖8-6始端數(shù)據(jù)分割傳輸?shù)男畔鼒D8-7顯示了組成一般末端數(shù)據(jù)分割傳輸?shù)男畔?。狀態(tài)標(biāo)記有兩

17、個(gè)信息包:SSPLIT標(biāo)記和全速/低速標(biāo)記。狀態(tài)標(biāo)記有選擇地跟隨一個(gè)信息包或者一個(gè)握手包,這取決數(shù)據(jù)傳輸?shù)闹噶钜约芭c傳輸類型的握手是否被定義。末端數(shù)據(jù)分割傳輸可以2個(gè)或3個(gè)信息包,這取決丁特定的傳輸類型和數(shù)據(jù)指令。CSPLITTokenFS/LSTokenTokenPhase!DATAxiIIor【W(wǎng)wwwwwwwwMWWwWw;Handshake|數(shù)據(jù)分割傳輸?shù)慕Y(jié)果是由末端數(shù)據(jù)分割傳輸返回的。圖8-8用一個(gè)中斷IN傳輸?shù)睦诱f明了這一概念上的會(huì)話。主機(jī)先向集線器發(fā)出一個(gè)開始片段(用1表示),再就可以進(jìn)行其他高速傳輸。一段時(shí)間后,開始片段使得集線器發(fā)出一個(gè)全速/低速IN標(biāo)記(用2表示)。設(shè)備用

18、一個(gè)數(shù)據(jù)包回應(yīng)IN標(biāo)記(在這個(gè)例子中),集線器用一個(gè)握手回應(yīng)設(shè)備。最后,再過一段時(shí)間后,主機(jī)發(fā)出一個(gè)末端片段(用3表示)以再次獲得設(shè)備提供的數(shù)據(jù)。在例子中請注意:在末端片段以前集線器向設(shè)備端口提供了全速/低速握手(在這個(gè)例子中是ACK),而末端片段向集線器提供的不是高速握手。1FUII-/LOW-SpeedBus圖8-8中斷IN傳輸與數(shù)據(jù)分割傳輸?shù)年P(guān)系常規(guī)的全速/低速OUT傳輸同樣在概念上“轉(zhuǎn)換”為始端分割傳輸和末端分割傳輸。圖8-9以中斷傳輸為例說明了這種“轉(zhuǎn)換”。主機(jī)發(fā)起一個(gè)始端片段事務(wù),它包括SSPLIT特殊標(biāo)記,OCT標(biāo)記和數(shù)據(jù)包。一段時(shí)間后,集線器在全速/低速總線上發(fā)出OUT標(biāo)記和數(shù)

19、據(jù)包。設(shè)備用握手作出回應(yīng)。一段時(shí)間后,主機(jī)發(fā)起末端片段事務(wù),集線器用設(shè)備提供的結(jié)果(全速/低速數(shù)據(jù)或是握手)作出回應(yīng)。Device圖8-9中斷OUT傳輸和高速分割OUT傳輸?shù)年P(guān)系接下來的兩部分描述的是組成具體始端分割標(biāo)記包和末端分割標(biāo)記包的字段。圖8-10和圖8-12說明了分割傳輸標(biāo)記包中的字段。跟隨一般標(biāo)記格式的SPLIT特殊標(biāo)記以一個(gè)PID字段(在一個(gè)SYNC后)開始,并以一個(gè)CRC5字段(和EOP)結(jié)束。始端分割標(biāo)記包和末端分割標(biāo)記包都是4字節(jié)長oSPLIT傳輸必須僅來源丁主機(jī)。始端標(biāo)記在章節(jié)被定義,末端標(biāo)記在被定義。始端分割傳輸標(biāo)記(lsb(msb)FieldSPLITPIDHubAd

20、diSC?onsEETCRC5Bns8711I95圖8-10始端片段(SSPLIT)標(biāo)志集線器地址字段包含支持特定全速/低速設(shè)備全速/低速傳輸?shù)募€器的USB設(shè)備地址。這一字段與章節(jié)中ADDR字段有相同的定義。帶有SC(始端/末端)字段被設(shè)定為0表明這是一個(gè)始端片段事務(wù)(SSPLIT)o端口字段包括接收全速/低速事務(wù)的目標(biāo)集線器的端口號碼。正如圖8-11所示,所有128個(gè)端口用P0RT加以制定。主機(jī)必須正確地為單獨(dú)或多個(gè)TT集線器執(zhí)行設(shè)定端口字段。一個(gè)單獨(dú)TT集線器執(zhí)行可以忽略端口字段。(LSb)PortPort,Port“PWl.Port,PonrPort.o24-6S(速度)字段按照如下規(guī)

21、定制定中斷傳輸或控制傳輸速度:0全速1低速對丁批量IN/0UT和同步IN的始端片段,S字段必須被設(shè)定為0。對丁批量/控制IN/0UT,中斷IN/0UT,和同步IN的始端片段,E字段必須被設(shè)定為0。對丁全速同步OUT始端片段,如表8-2所示,S(開始)字段和E(結(jié)束)字段為全速數(shù)據(jù)包確定全速數(shù)據(jù)有效載荷如何與數(shù)據(jù)相對應(yīng)。(此處的S位可以為這些編碼重新使用,但耍求同步傳輸必須是低速的。)表8-2同步OUT有效載荷附加編碼SE高速數(shù)據(jù)和全速數(shù)據(jù)的關(guān)系00高速數(shù)據(jù)在全速數(shù)據(jù)有效載荷的中間部分01高速數(shù)據(jù)在全速數(shù)據(jù)有效載荷的末尾部分10高速數(shù)據(jù)在全速數(shù)據(jù)有效載荷的始端部分11高速數(shù)據(jù)在全速數(shù)據(jù)有效載荷的

22、全部部分為了使集線器發(fā)現(xiàn)各種各樣由丁具有數(shù)據(jù)有效載荷并需耍多重始端片段的端點(diǎn)缺少接收始端分割事務(wù)而產(chǎn)生的錯(cuò)誤,同步OUT始端分割事務(wù)使用了這些編碼。舉例來說,大量的高速數(shù)據(jù)有效載荷可能需要三個(gè)始端分割事務(wù):始端片段/開始,始端片段/中部,始端片段/結(jié)束。如果任何的這些事務(wù)沒有別集線器接收到,集線器或者會(huì)忽略這次全速傳輸(如果始端片段/開始沒有被接收到),或者會(huì)為相應(yīng)的全速傳輸強(qiáng)加一個(gè)錯(cuò)誤(如果另外兩個(gè)事務(wù)的一個(gè)沒有被接收到)。其他錯(cuò)誤情形可以根據(jù)在一微幀中沒有接收到始端片段來加以發(fā)現(xiàn)。ET(端點(diǎn)類型)字段確定了全速/低速傳輸?shù)亩它c(diǎn)類型,如表8-3所示。表8-3分割特殊標(biāo)記的端點(diǎn)類型屋值ET量值

23、端點(diǎn)類型00控制傳輸01同步傳輸10批量傳輸11中斷傳輸這一字段告訴集線器使用哪個(gè)分割傳輸狀態(tài)機(jī)完成全速/低速傳輸。全速/低速設(shè)備的地址和端點(diǎn)號碼信息包含在跟隨在SPLIT特殊標(biāo)記包后的常規(guī)的標(biāo)記包中。末端分割傳輸標(biāo)記(LVb)(msb)FieldSRLITPIDHubAddjSCPonsuETCRCBitsS71I125圖8-12末端分割傳輸(CSPLIT)標(biāo)記如果SPLIT特殊標(biāo)記包中SC字段被置為1,則說明這是一個(gè)末端分割傳輸(CSPLIT)。 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#U位是被保留的/不能加以使用,并必須置為0(0B)。其他末端分割片段標(biāo)記包的字段和始端片段標(biāo)記包具有相同的定

24、義。8.4.3幀開始(SOF)包對丁全速總線和高速總線,主機(jī)分別以每1.00ms土0.0005ms一次和每125Ps0.0625us次的額定速率發(fā)出幀開始(SOF)包。如圖8-13中所示,SOF包是由指示包類型的PID和其后的11位的幀號字段構(gòu)成。(mW)FieldPIDFrameNumberCRC5Bits3115圖8-13幀開始包S0F標(biāo)記組成了僅有標(biāo)記的事務(wù)(它被用來分配S0F標(biāo)記)和伴隨的幀數(shù)的事務(wù)(相應(yīng)丁每幀的開始以準(zhǔn)確時(shí)間間隔進(jìn)行)。包括集線器的所有全速功能部件都可收到S0F包。S0F標(biāo)記不會(huì)使得接收功能部件產(chǎn)生返回包;因此,不能保證向任何給定的功能部件發(fā)送的S0F都能被收到。S0

25、F包發(fā)送2個(gè)時(shí)間調(diào)配信息。當(dāng)功能部件探測到S0F的PID的時(shí)候,它被告知發(fā)生S0F。對幀時(shí)間敏感而不需要追蹤幀數(shù)(例如集線器)的功能部件,僅需對S0F的PID譯碼;可忽略幀數(shù)和其CRCo如果功能部件需要追蹤幀數(shù),它必須對PID和時(shí)間標(biāo)志都進(jìn)行譯碼。對總線時(shí)間調(diào)配信息的沒有特別需耍的全速設(shè)備可以忽略S0F包。USB幀和微幀對丁全速傳輸,USB定義了每個(gè)都由幀開始標(biāo)志(S0F)標(biāo)記的Ims幀時(shí)間,并且每Ims周期都有約定的跑動(dòng)公差。對于高速傳輸,USB也定義了以125微秒為幀時(shí)間、具有相應(yīng)跑動(dòng)公差的幀(參見第七章)。對丁全速連接,S0F包每Ims產(chǎn)生一次(由主機(jī)控制Full/Low-SpeedFr

26、ameSize(1ms)圖8-14微幀和幀之間的關(guān)系器或HUB事務(wù)轉(zhuǎn)換器發(fā)出)。對丁高速傳輸,SOF包也是在接下來的七個(gè)125微秒周期后產(chǎn)生的。圖8-14顯示了微幀和幀之間的關(guān)系。在1ms的時(shí)間內(nèi),高速USB設(shè)備將看到同一個(gè)SOF令牌包八次,且它們有相同的幀號。如果需要的話,高速設(shè)備可以通過檢測與原有SOF包有不同幀號的幀和將它作為第0個(gè)微幀處理來鬥己確定一個(gè)特殊微幀號。接下來的七個(gè)具有相同幀號的SOF包可以被當(dāng)作微幀1-7來處理。8.4.4數(shù)據(jù)包如圖8-15所示,數(shù)據(jù)包由PID,包括至少0個(gè)字節(jié)數(shù)據(jù)的數(shù)據(jù)區(qū)和CRC構(gòu)成。有4種類型的數(shù)據(jù)包,根據(jù)不同的PID:DATAO,DATA1,DATA2

27、和MDATA來識別。2種數(shù)據(jù)包PID(DATAO和DATA1)是為了支持?jǐn)?shù)據(jù)切換同步(在第8.6節(jié)提到)而定義的。所有四種數(shù)據(jù)PID被用在高帶寬高速同步端點(diǎn)的PID序列中(在第5.9節(jié)提到)。三種數(shù)據(jù)PID(MDATA,DATAO,DATA1)被用在分割傳輸事務(wù)中(在11.17-11.21章節(jié)中提到)。(Lsb)(msb)FieldPIDDATACRC16Bits80-819216圖8-15數(shù)據(jù)包格式數(shù)據(jù)必須以整數(shù)的字節(jié)數(shù)發(fā)出。數(shù)據(jù)CRC僅通過對包中的數(shù)據(jù)字段計(jì)算而得到,而不包括PID,它有白己的校驗(yàn)字段。低速設(shè)備的最大數(shù)據(jù)有效載荷是8字節(jié)。全速設(shè)備的最大數(shù)據(jù)載荷是1023字節(jié)。高速設(shè)備的最大

28、數(shù)據(jù)載荷是1024字節(jié)。8.4.5握手包如圖8-16所示,握手包僅由PID構(gòu)成。握手包用來報(bào)告數(shù)據(jù)事務(wù)的狀態(tài),能還在表示數(shù)據(jù)成功接收,命令的接收或拒絕,流控制和停止條件。只有支持流控制的事務(wù)類型才能返回握手信號。握手總是在事務(wù)的握手時(shí)相中被返回,也可在數(shù)據(jù)時(shí)相代替數(shù)據(jù)被返回。握手包由1個(gè)字節(jié)的包字段后的EOP確定界限。如果包被解讀為合法的握手信號,但沒有以1個(gè)字節(jié)后面的EOP終止,則它被認(rèn)為是無效的,且被接收機(jī)忽略。(lsb)(msb)FieldPIDBits8圖8-16握手包有4種類型的握手包和一種特殊握手包:ACK表示數(shù)據(jù)包沒有位填充或數(shù)據(jù)字段上的CRC錯(cuò),并且數(shù)據(jù)PID被正確收至IJ。A

29、CK在下列的情況下被發(fā)放,當(dāng)時(shí)序列位匹配且接收器能接受數(shù)據(jù)的時(shí)候,或者當(dāng)時(shí)序位失配,但發(fā)送方和接收器互相之間必須再同步(詳見第8.6節(jié))的時(shí)候。ACK握手信號只適用丁數(shù)據(jù)被傳送且期待握手信號的事務(wù)中。對丁輸入事務(wù),ACK由主機(jī)返回,而對于輸出、建立或PING事務(wù)則由功能部件返回;NAK表示功能部件不會(huì)從主機(jī)接受數(shù)據(jù)(對于輸出事務(wù)),或者功能部件沒有傳輸數(shù)據(jù)到主機(jī)(對丁輸入事務(wù))。NAK僅由功能部件在輸入事務(wù)的數(shù)據(jù)時(shí)相返回,或在輸出或PING事務(wù)的握手時(shí)相返回。主機(jī)決不能發(fā)出NAK。出于流控制的目的,NAK用丁表示功能部件暫時(shí)不能傳輸,或者接收數(shù)據(jù),但是最終還是能夠在不需主機(jī)干涉的情況下而傳輸或

30、接收數(shù)據(jù);STALL作為輸入標(biāo)記的回應(yīng),或者在輸出事務(wù)的數(shù)據(jù)時(shí)相之后由功能部件返回,或者作為PING事務(wù)的回應(yīng)(見圖8-30和圖8-38)。停頓表示功能部件不能傳輸,或者接收數(shù)據(jù),或者不支持一個(gè)控制管道請求。功能部件在返回一個(gè)STALL后的狀態(tài)(對于除了默認(rèn)端點(diǎn)的任何端點(diǎn))是不被定義的。在任何條件下都不允許主機(jī)返回STALLo停頓握手由設(shè)備用丁在兩個(gè)不同的場合之一。第一種情況,是當(dāng)設(shè)置了與端口相聯(lián)系掛起特征的時(shí)候,稱為為特色功能停頓(掛起特征在這文檔的第9章中詳細(xì)說明)。功能停頓的特殊情況是命令停頓o如同在第9章中詳細(xì)敘述的那樣,命令停頓發(fā)生在主機(jī)顯式地設(shè)置了端口的掛起特征的時(shí)候。如果功能部件

31、的端口被掛起,則功能部件必須繼續(xù)返回停頓,肖到引起停止的條件通過主機(jī)干涉而被清除。如同在8.5.3節(jié)中詳細(xì)敘述的那樣,第二種情況稱為協(xié)議停頓。協(xié)議停頓對于控制管道是唯一的。協(xié)議停頓和功能停頓在意義和持續(xù)時(shí)間上是不同。協(xié)議停頓在控制傳送的數(shù)據(jù)或狀態(tài)階段被返回,并且,停頓條件在下一個(gè)控制傳送的開始終止(建立事務(wù))。這節(jié)的剩下部分將提到功能停頓的一般情況。NYET是高速傳輸僅有的在兩種情況下能被返回的握手。作為將要在這一章接著被介紹的PING協(xié)議的一部分,它將被高速端點(diǎn)返回。當(dāng)全速/低速傳輸沒有完成或者集線器不能控制分割傳輸時(shí),作為對分割傳輸?shù)幕貞?yīng),NYET也可以被集線器返回。更多細(xì)節(jié)見丁第十一章。

32、ERR是高速傳輸僅有的允許高速集線器在全速/低速總線上被返回以報(bào)告錯(cuò)誤的握手。它僅作為分割傳輸協(xié)議的一部分被高速集線器返回。更多細(xì)節(jié)見丁第十一早。8.4.6握手回答傳輸和接收功能部件必須根據(jù)從表8-4中到表8-6詳細(xì)敘述的優(yōu)先順序返回握手。不是所有的握手都是被允許,依賴丁事務(wù)類型和功能部件或主機(jī)是否發(fā)出握手。如果標(biāo)記在傳輸?shù)焦δ懿考碾A段里發(fā)生了錯(cuò)誤,則功能部件將不以任何包回應(yīng),H到下一個(gè)標(biāo)記被收到并成功地譯碼。功能部件對輸入事務(wù)回答表8-4顯示了功能部件作為對輸入標(biāo)記的反應(yīng)而可能做的回答。如果由丁停止或流控制條件,功能部件不能發(fā)送數(shù)據(jù),它將發(fā)出STALL或NAK握手。如果功能部件能發(fā)出數(shù)據(jù),

33、它就發(fā)出數(shù)據(jù)。如果收到的標(biāo)記被損壞,則功能部件不應(yīng)答。表8-4功能部件対輸入事務(wù)的回應(yīng)收到的標(biāo)記損壞功能部件的發(fā)送端口的掛起特征功能部件能發(fā)送數(shù)據(jù)采取的動(dòng)作是不管不管不回應(yīng)否置了位不管發(fā)送停止握手否沒置位否發(fā)送NAK握手否沒置位能發(fā)送數(shù)據(jù)包主機(jī)對輸入事務(wù)回答表8-5顯示了主機(jī)對輸入事務(wù)回答。主機(jī)只能返回1種類型的握手:ACK。如果主機(jī)收到了損壞的數(shù)據(jù)包,它把數(shù)據(jù)丟棄且不應(yīng)答。如果主機(jī)不能從功能部件接受數(shù)據(jù),則(出丁類似內(nèi)部緩沖溢出的問題)這條件被認(rèn)為是錯(cuò)誤,并且主機(jī)不應(yīng)答。主機(jī)能接受數(shù)據(jù),并且如果數(shù)據(jù)包是完整無錯(cuò)地被接收到,則主機(jī)接受數(shù)據(jù)并發(fā)出ACK握手。 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#

34、表8-5主機(jī)對輸入事務(wù)的回應(yīng)數(shù)據(jù)包損壞主機(jī)能接受數(shù)據(jù)主機(jī)返回的握手是N/丟棄數(shù)據(jù),不回應(yīng)否否丟棄數(shù)據(jù),不回應(yīng)否能接受數(shù)據(jù),發(fā)送ACK功能部件對輸出事務(wù)回答對輸出事務(wù)的握手回答由表8-4表示。假設(shè)標(biāo)記譯碼成功,功能部件收到數(shù)據(jù)包后,可以返回三種握手類型中的任何一種。如果數(shù)據(jù)包被損壞,功能部件不返回握手。如果數(shù)據(jù)包是被完整無錯(cuò)地接收到,而功能部件的接收端口被停止,則功能部件返回停止。如果事務(wù)正維持著時(shí)序位同步而探測到失配(在第8.6節(jié)有詳細(xì)描述),那么功能部件返回ACK,并丟棄數(shù)據(jù)。如果功能部件能夠接受數(shù)據(jù)并完整無錯(cuò)收到數(shù)據(jù),它返回ACK。如果由丁流控制的原因,功能部件不能接受數(shù)據(jù)包,它返回NAK

35、。表8-6功能部件対輸出事務(wù)的回應(yīng)(按優(yōu)先順序)數(shù)據(jù)包損壞接收器的掛起特征時(shí)序位匹配功能部件可接收數(shù)據(jù)功能部件返回的握手是N/N/N/無否置了位N/N/停止否沒置位否N/ACK否沒置位是可ACK否沒置位是否NAK功能部件對建立事務(wù)的回答建立事務(wù)定義了特殊的主機(jī)-功能部件的數(shù)據(jù)事務(wù),它允許主機(jī)初始化端口的同步位為主機(jī)的同步位。一收到建立標(biāo)記,功能部件就必須接受數(shù)據(jù)。功能部件不能對建立標(biāo)記用STALL或NAK應(yīng)答,并且,接收功能部件必須接受建立標(biāo)記后的數(shù)據(jù)包。如果非控制端口收到建立標(biāo)記,它必須忽略事務(wù)且不應(yīng)答。8.5事務(wù)格式包事務(wù)格式根據(jù)端口類型而變化。有4種端口類型:批處理,控制,中斷和同步。為

36、滿足各種傳輸?shù)臅r(shí)序耍求,主機(jī)控制器和設(shè)備各H需耍不同的狀態(tài)機(jī)制。一些章節(jié)中的圖顯示了在各種傳輸類型中定義正確時(shí)序包的狀態(tài)機(jī)制。圖表不應(yīng)該認(rèn)為是必需的執(zhí)行,但指定了必需的行為。圖8-17顯示了狀態(tài)機(jī)制圖表的圖例。三線圓表明是提及了另外一個(gè)(分等級的)狀態(tài)機(jī)。兩線圓表明是一個(gè)初始狀態(tài)。單線圓表明是簡單狀態(tài)。ContainsotherstatemachinesInitialstateofastatemachine-StateinastatemachineEntryandexitofstatemachine-Jointusedtoconnecttransitions-Transition:takenw

37、henconditionistrueandperformsactions圖8-17狀態(tài)機(jī)制的圖例帶箭頭的“突出”圖形表示狀態(tài)機(jī)制的出口或入口(在各H的圖例中)。在狀態(tài)機(jī)機(jī)制中,出口或入口與狀態(tài)機(jī)中處丁更高級別的另一狀態(tài)有關(guān)。菱形(連接)用來將兒個(gè)過渡連接成一個(gè)普通的點(diǎn)。連接允許有單個(gè)輸入過渡而有多個(gè)輸出過渡或者是有多個(gè)輸入過渡而有單個(gè)輸出過渡。為了路徑能夠被獲取,所有與連接有關(guān)的過渡情形都耍為真。路徑僅僅是包括一個(gè)或更多的連接的過渡的序列。過渡附加了一個(gè)方框,它里面的中間有一條線,將方框分為上下兩部分,上而是條件,下面是行為。若想進(jìn)行這一過渡,則需條件為真。行為和條件的句法是符合vhdl的。如

38、果過渡得以進(jìn)行,那么行為也將可以施行。圓圈包括一個(gè)黑體的名字,可以包含一個(gè)或多個(gè)進(jìn)入狀態(tài)時(shí)施行的行為。主機(jī)控制器和設(shè)備狀態(tài)機(jī)正是工作在如圖8-18所示的環(huán)境下的。主機(jī)控制器其將和設(shè)備的某端點(diǎn)之間進(jìn)行的下一個(gè)事務(wù)處理,并想主機(jī)控制器狀態(tài)機(jī)發(fā)出命令(HC_cmd)o這使得主機(jī)控制器狀態(tài)機(jī)向下行總線發(fā)出一個(gè)或多個(gè)信息包(HSD1)。設(shè)備從總線(HSD2)獲得這些信息包,對收到的信息包作出反應(yīng),并通過相應(yīng)的設(shè)備端點(diǎn)(在“端點(diǎn)陣列”中)和其功能單元進(jìn)行通信。之后,設(shè)備可能向上行總線(HSU1)返回一個(gè)信息包。主機(jī)控制器狀態(tài)機(jī)能夠從總線(HSU2)收到一個(gè)新版并把該事務(wù)的處理結(jié)果提供給USB主控制器(HC

39、_resp)。總線上什么包被發(fā)送的細(xì)節(jié)決定丁端點(diǎn)的傳輸類型和狀態(tài)機(jī)遵守什么樣的總線活動(dòng)規(guī)則。狀態(tài)機(jī)是以分等級的形式存在的。圖8-19顯示了主機(jī)控制器的頂層狀態(tài)機(jī)。這一章的余下部分將討論無分割傳輸。分割傳輸狀態(tài)機(jī)(HC_Do_start和HC_Do_complete)將在第十一章進(jìn)行描述和說明。HostControllerIranisctionTransactioncomnwndsResultsHoststalemachinesHDDownstieaniUp13earnBusBusHSD2HSU1DevicestaremachinesEparrayIFunctionsDevice圖8-18狀態(tài)機(jī)

40、環(huán)境概述HC_Process_conunaiidHC_Do_UirtHC_Do_completeHC_Do_nonsplit圖8-19主控制器頂層事務(wù)狀態(tài)機(jī)分層概況圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#主機(jī)控制器狀態(tài)機(jī)位丁主機(jī)控制器內(nèi)部。主機(jī)控制器負(fù)責(zé)向下行總線(標(biāo)志為HSD1)發(fā)送信息包和從上行總線(標(biāo)志為HSU2)接收信息包。設(shè)備狀態(tài)機(jī)位于設(shè)備內(nèi)部。設(shè)備負(fù)責(zé)向上行總線(標(biāo)志為HSU1)和從下行總線(標(biāo)志為HSD2)接收信息包。主機(jī)控制器具有告知接下來為端點(diǎn)發(fā)起什么事務(wù)的命令。主機(jī)控制器跟蹤兒個(gè)端點(diǎn)的事務(wù)。主機(jī)控制器狀態(tài)機(jī)時(shí)序決定了接下來需耍為現(xiàn)在的端點(diǎn)做什么。設(shè)備對丁任意它的端點(diǎn)都有一個(gè)狀態(tài)

41、。設(shè)備狀態(tài)機(jī)時(shí)序決定了對于事務(wù)設(shè)備作出怎樣的反應(yīng)。附錄包括了一些用丁組成狀態(tài)機(jī)、可能對丁理解狀態(tài)機(jī)的額外細(xì)節(jié)有所幫助的聲明。還有數(shù)個(gè)偽代碼程序和函數(shù)作為條件和行為。在附錄中還包含對它們的簡單描述。圖8-20顯示了無分割傳輸類型主機(jī)控制器總體狀態(tài)機(jī)分層的概況。圖8-21顯示了設(shè)備狀態(tài)機(jī)的分層。首先介紹的是端點(diǎn)類型的普通狀態(tài)機(jī)。最低級別的端點(diǎn)類型特殊狀態(tài)機(jī)將在以下的各種端點(diǎn)類型的章節(jié)中分別進(jìn)行介紹。HC_Do_nonsplitHCHSBCOHCDoBCINTOHCDoBCINTIHCDoIsochOHCDoIsochI圖8-20主機(jī)控制器無分割傳輸狀態(tài)機(jī)分層概況Devicc_ProccsDevdo

42、OUTDevDoIsochODevDoBCINTODevHSBCODevdoINDevDoJsoclilDevDoBCINn圖8-21設(shè)備傳輸狀態(tài)機(jī)分層概況 # 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#ArchitoctureDeclarstionshaulCOT(SVLK.WAX,).0.ok.in_dic,TTUX.ALLDAT.rRtfC.rASir寫:pwDec啦伽8GlobalActionsConcurrentStstementoFacttgeL嗽MOQWogR-,4feeenunenc_s:auso2st3temacnrest-eravjjacogeSign&8StatusShteRe

43、gisterstatementsSI31JALSCOPEDEFAULT # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?# # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?# #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#token.PID=toke-nlNDevicedaOUTDevicedoNtoken.PID=tokenOUTortoken.PID=tokenSETUPdevice.HSandtoken.PID=pingDevHSping圖8-22設(shè)備頂層狀態(tài)機(jī)token.PID/=tokenOUTandtoken.PID/=tokenlNandtoken.PID/=tokensETUPandtoken.PID

44、/=piingand(token.PID=pingandJnotdevice.HS)Devk&procfrsstrans圖8-23Device_process_Trans狀態(tài)機(jī)制圖8-24Dev_do_OUT狀態(tài)機(jī)制 # 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#圖8-25Dev_do_IN狀態(tài)機(jī)制 #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#圖8-26HC_Do_nonsplit狀態(tài)機(jī)制 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#8.5.1通過PING流控制的無應(yīng)答限制全速/低速設(shè)備可以具有批量傳輸/控制傳輸端點(diǎn),它們?;ㄙM(fèi)時(shí)間處理它們的數(shù)據(jù),并且,因此用無應(yīng)答握手回應(yīng)OUT事務(wù)。這一握手回應(yīng)說明端點(diǎn)因?yàn)闆]有

45、數(shù)據(jù)空間而不接收數(shù)據(jù)。在未來的端點(diǎn)有可用空間的時(shí)侯,主機(jī)控制器被期望重新進(jìn)行這一傳輸事務(wù)。不幸的是,等到端點(diǎn)發(fā)生無應(yīng)答時(shí),大多數(shù)全速/低速總線的事務(wù)時(shí)間已經(jīng)被使用了。這意味著,當(dāng)無應(yīng)答OUT事務(wù)高頻率發(fā)生時(shí)全速/低速總線具有低利用率。高速設(shè)備必須支持改進(jìn)的無應(yīng)答機(jī)制,以實(shí)現(xiàn)批量OUT傳輸和控制傳輸端點(diǎn)和事務(wù)??刂贫它c(diǎn)必須支持支持這一協(xié)議,以實(shí)現(xiàn)數(shù)據(jù)和狀態(tài)階段的OCT事務(wù)??刂平㈦A段不支持PING協(xié)議。這一機(jī)制允許設(shè)備告知主機(jī)控制器它是否對丁下一個(gè)OUT事務(wù)足夠的端點(diǎn)空間。如果設(shè)備端點(diǎn)不具有空間,主機(jī)控制器可以決定為這個(gè)端點(diǎn)延遲一個(gè)事務(wù)嘗試,同時(shí)可以嘗試其他事務(wù)。這就可以完成改進(jìn)的總線實(shí)現(xiàn)。這

46、一機(jī)制避免了在主機(jī)控制器知道端點(diǎn)有數(shù)據(jù)空間前使用發(fā)送數(shù)據(jù)的總線時(shí)間。主機(jī)控制器用PING特殊標(biāo)記查詢高速設(shè)備的端點(diǎn)。PING特殊標(biāo)記是普通的標(biāo)記包,正如圖8-5所示。端點(diǎn)或者用一個(gè)NAK握手或者用一個(gè)ACK握手回應(yīng)PING。NAK握手表明端點(diǎn)沒有“最大數(shù)據(jù)包”數(shù)據(jù)有效載荷的空間。主機(jī)控制器將在未來的某個(gè)時(shí)間重新嘗試PING以再次査詢端點(diǎn)。設(shè)備可以長時(shí)間的用NAK回應(yīng)PINGoNAK回應(yīng)并不是主機(jī)控制器重新傳輸請求的原因。如果設(shè)備在(微)幀中用NAK作出回應(yīng),主機(jī)控制器可以在下一個(gè)blnteval中特別為端點(diǎn)發(fā)出下一個(gè)事務(wù)。然而,設(shè)備必須準(zhǔn)備好以連續(xù)事務(wù)的形式接收PINGs,例如,一個(gè)立刻接著另

47、一個(gè)。ACK握手表明具有“最大數(shù)據(jù)包”數(shù)據(jù)有效載荷的空間。主機(jī)控制器必須以數(shù)據(jù)相產(chǎn)生OUT事務(wù)以作為端點(diǎn)的下一個(gè)事務(wù)。主機(jī)控制器在此端點(diǎn)的OUT/DATA事務(wù)之前可以為其他端點(diǎn)產(chǎn)生其他事務(wù)。如果端點(diǎn)用ACK握手對OUT/DATA事務(wù)作出回應(yīng),這就意味著端點(diǎn)成功接收了數(shù)據(jù)并且具有“最大數(shù)據(jù)包”數(shù)據(jù)有效載荷的空間。只耍主機(jī)控制器有事務(wù)產(chǎn)生,它就繼續(xù)OUT/DATA事務(wù)(對丁總線上的下一個(gè)事務(wù)這是需耍的)。如果端點(diǎn)以NYET握手回應(yīng)OUT/DATA事務(wù),這就意味著端點(diǎn)接收了數(shù)據(jù)但不再具有“最大數(shù)據(jù)包”數(shù)據(jù)有效載荷的空間。氏到端點(diǎn)聲明具有空間,主機(jī)控制器才可以重新使用PING標(biāo)記。|DeY_C_BCI

48、NTQJ圖8-27主機(jī)高速批lOUT/ControlPING狀態(tài)機(jī)制PING協(xié)議中對OUT/DATA的NAK回應(yīng)端點(diǎn)也可以用NAK握手回應(yīng)OUT/DATA事務(wù)。這意味著此時(shí)端點(diǎn)不接收數(shù)據(jù)并且不具有“最大數(shù)據(jù)包”數(shù)據(jù)有效載荷的空間。虛到端點(diǎn)聲明具有空間,主機(jī)控制器才可以重新使用PING標(biāo)記。NAK回應(yīng)被認(rèn)為是異常事件。高速批量傳輸/控制傳輸端點(diǎn)必須在端點(diǎn)描述符中明確最大的NAK率。端點(diǎn)最多被允許在一個(gè)vlnterval周期發(fā)生一次NAK。一個(gè)NAK說明端點(diǎn)用不恰當(dāng)?shù)奈帐只貞?yīng)先前的OUT/PING,或者端點(diǎn)轉(zhuǎn)入了一個(gè)(臨時(shí))不能接收數(shù)據(jù)的狀態(tài)。端點(diǎn)可以使用一個(gè)blnterval的0表明它從不發(fā)生N

49、AK。端點(diǎn)必須總是能夠從主機(jī)接收PING,即使它從不發(fā)生NAK。如果數(shù)據(jù)相以后發(fā)生了超時(shí),主機(jī)必須重新使用PING標(biāo)記。注意回到PING狀態(tài)的轉(zhuǎn)變并不影響傳輸數(shù)據(jù)相的切換狀態(tài)。圖8-27說明了PING、OUT/DATA標(biāo)記與被允許的PING機(jī)制的ACK、NAK和NYET握手之間相互作用和轉(zhuǎn)換的主機(jī)控制器狀態(tài)機(jī)制。圖8-29說明了端點(diǎn)緩沖空間可用的PING的設(shè)備端點(diǎn)狀態(tài)機(jī)制。 #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#圖8-28Dev.HS.ping狀態(tài)機(jī)制 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#圖8-29設(shè)備高速批niOUT/Control狀態(tài)機(jī)制全速/低速設(shè)備/端點(diǎn)不支持PING協(xié)議。主機(jī)控制器對

50、丁全速/低速設(shè)備也不支持PING協(xié)議。注意:PING協(xié)議也不包含在分割傳輸協(xié)議的定義中。一些分割傳輸有相當(dāng)?shù)牟皇褂肞ING的流控制。其他分割傳輸像定義的那樣無法受益TPINGo在任何情形下,可以返回NAK握手的分割傳輸具有較小的數(shù)據(jù)有效載荷,而這也就會(huì)對高速總線具有較小的沖擊。集線器必須在它們的控制端點(diǎn)支持PING,但是對丁用丁被集線器所支持的全速/低速設(shè)備之間通信的分割傳輸,PING是不被定義的。8.5.2批處理事務(wù)批處理事務(wù)類型的特點(diǎn)是具有以錯(cuò)誤檢測和重試的方式保證主機(jī)和功能部件之間的數(shù)據(jù)無錯(cuò)發(fā)送的能力。如圖8-30所示,批處理事務(wù)是由標(biāo)記,數(shù)據(jù)和握手包構(gòu)成的三時(shí)相的事務(wù)。在某些流控制和掛

51、起條件下,數(shù)據(jù)時(shí)相被握手信號替換,從而產(chǎn)生了沒有數(shù)據(jù)傳輸?shù)膬蓵r(shí)相的事務(wù)。PING包和NYET包僅僅使用在工作在高速狀態(tài)的設(shè)備上。IIIFuiwtloe圖8-30批處理事務(wù)格式當(dāng)主機(jī)準(zhǔn)備好了接收批處理數(shù)據(jù)的時(shí)候,它發(fā)出輸入標(biāo)記。功能部件端口通過返回?cái)?shù)據(jù)包,或者如果不能返回?cái)?shù)據(jù),則返回NAK或STALL握手作為應(yīng)答。NAK表示功能部件暫時(shí)不能返回?cái)?shù)據(jù),而STALL表示端口永久地被停止,需耍USB系統(tǒng)軟件干涉。如果主機(jī)收到合法的數(shù)據(jù)包,則它用ACK握手來應(yīng)答。如果收到數(shù)據(jù)時(shí)主機(jī)檢測到錯(cuò)誤,它不返回握手包給功能部件。當(dāng)主機(jī)準(zhǔn)備好了傳送成批數(shù)據(jù)的時(shí)候,它首先發(fā)出一個(gè)后跟數(shù)據(jù)包的輸出標(biāo)記包(或者PING標(biāo)

52、記包,參見8.5.1章節(jié))。如果數(shù)據(jù)由功能部件無錯(cuò)地接收到,那么它將返回三個(gè)握手中的一個(gè):ACK表示數(shù)據(jù)包無錯(cuò)地接收到,通知主機(jī)可以發(fā)送下一個(gè)包;NAK表示數(shù)據(jù)被無錯(cuò)地收到,但主機(jī)應(yīng)該重新發(fā)送數(shù)據(jù)因?yàn)閿?shù)據(jù)功能部件處丁妨礙它接受數(shù)據(jù)的暫時(shí)條件(例如緩沖滿)中;如果端口被停止,則返回STALL(停止)以告訴主機(jī)不耍重試傳輸,因?yàn)楣δ懿考嫌绣e(cuò)誤條件。如果接收到的數(shù)據(jù)有CRC或者位填充錯(cuò)誤,那么不返回任何握手。圖8-31和圖8-32分別說明了主機(jī)和設(shè)備批量傳輸、控制傳輸和中斷傳輸OUT全速/低速事務(wù)的狀態(tài)機(jī)制。圖8-27圖8-28和圖8-29說明高速傳輸事務(wù)的狀態(tài)機(jī)制。圖8-33和圖8-34分別說明

53、了主機(jī)和設(shè)備批量傳輸、控制傳輸和中斷傳輸IN事務(wù)的狀態(tài)機(jī)制。 # 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#WaitrespwaitforDackeT:HSU2,ITG:error(HSU2.PID/=STALLandHSU2.PID/=NAKandHSU2.PID/=ACK)orHSU2.timeoutDotokenInctrror;Packet_ready(HSU2)ErrorCount=3RespondHCiDohalt);HSU2.PID=STALLRespondHC(Do_ha:t);HSU2.PIC=NAKNota?oweaforcontrolsetupvantaction # #圖8-

54、7末端數(shù)據(jù)分割傳輸?shù)男畔?# # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#HCDoBCINTO圖8-31批量/控制/中斷OUT事務(wù)主機(jī)狀態(tài)機(jī)制 #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#DevDo6CINTO圖8-32批量/控制/中斷OUT事務(wù)設(shè)備狀態(tài)機(jī)制 # 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#(HSU2.PID/=NAKandHSU2.PID/=STALLandHSU2.PID/=datax)or(HSU2.PID=dataxandHSU2.CRC16=bad)orHSU2.timeoutPaeket_ready(HSU2)Waitdatawaitforpacket;HSU2,ITG;Erro

55、rCount=3R.espondHC(Dc_halt);HSU2.PID=dataxandHSU2.CRC:16=okandHSU2.X1=HC_cmd.toggleIssue_packet(HSD1.ACK);RespondHC(Do_s.ame_cmd);HSU2.PID=NAKRes-pondHCtDosaniecmd);圖8-33批量/控制/中斷IN事務(wù)主機(jī)狀態(tài)機(jī)制 #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?# # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?# # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?# # 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#DevDoBCINTI08-34批量/控制/中斷IN事

56、務(wù)設(shè)備狀態(tài)機(jī)制圖8-35說明了時(shí)序位和數(shù)據(jù)PID在成批讀和寫中的用法。數(shù)據(jù)包同步經(jīng)數(shù)據(jù)時(shí)序切換位和DATAO/DATA1PID的使用而達(dá)到。當(dāng)端口經(jīng)歷配置事件(配置事件在節(jié)和9.4.5中有解釋)的時(shí)候,批事務(wù)端口的切換時(shí)序被初始化為DATAO。端口上的數(shù)據(jù)切換不是作為短包傳送或IRP撤消的直接結(jié)果而被初始化的。批處理寫批處理讀DATAdn|OUT|OUT|QUT(0/1)|DATAODA.TA1DATADDATA1DATAGH圖8-35批事務(wù)讀和寫主機(jī)總是通過配置事件初始化總線傳送的第一個(gè)事務(wù)為DATAOPID。第二的事務(wù)使用DATA1PID,并且,剩余的后繼數(shù)據(jù)傳送輪流切換。數(shù)據(jù)包發(fā)送器根據(jù)

57、ACK的接收情況來切換而接收器根據(jù)數(shù)據(jù)包的接收的情況切換(參見第8.6節(jié))。8.5.3控制傳送控制傳送最少有2個(gè)事務(wù)階段:建立和狀態(tài)??刂苽魉涂梢杂羞x擇性地包括建立和狀態(tài)階段之間的數(shù)據(jù)階段。在建立階段里,建立事務(wù)用丁向功能部件的控制端口傳輸信息。建立事務(wù)在格式上類似丁輸出,但是使用的是建立而不是輸出的PID。圖8-36說明了建立事務(wù)的格式。建立總是在建立事務(wù)的數(shù)據(jù)時(shí)相上使用DATAOPID。收到建立的功能部件必須接受建立數(shù)據(jù)并用ACK應(yīng)答,如果數(shù)據(jù)被損壞,則丟棄數(shù)據(jù)且不返回握手。IdleI|Host|Function # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?# # #圖8-7末端數(shù)據(jù)分割傳輸?shù)?/p>

58、信息包 #圖8-36控制建立事務(wù)控制傳送的數(shù)據(jù)階段,如果有的話,由一個(gè)以上的輸入或輸出事務(wù)構(gòu)成,遵守和批量事務(wù)傳送相同的協(xié)議規(guī)則。所有的數(shù)據(jù)階段里的事務(wù)都必須有相同的方向(即全部輸入或者全部輸出)。在數(shù)據(jù)時(shí)相中耍發(fā)送的數(shù)據(jù)數(shù)量和其方向在建立階段鬼被指定。如果數(shù)據(jù)的數(shù)量超過了先前確定的數(shù)據(jù)包大小,數(shù)據(jù)在支持最大的包大小的多個(gè)事務(wù)中被發(fā)送(輸入或者輸出)。任何剩下的數(shù)據(jù)都作為剩余在最后的事務(wù)中被發(fā)送??刂苽魉偷臓顟B(tài)階段是序列中的最后一個(gè)操作。狀態(tài)階段是以相對前而的階段數(shù)據(jù)流方向的變化來描述的,并且總是使用DATA1PID。例如,如果數(shù)據(jù)階段由輸出事務(wù)構(gòu)成的,狀態(tài)是單一的輸入事務(wù)。如果控制傳送序列沒

59、有數(shù)據(jù)階段,那么它由建立階段和其后的由輸入事務(wù)構(gòu)成的狀態(tài)階段構(gòu)成。圖8-37說明了事務(wù)順序,數(shù)據(jù)時(shí)序位的值和控制讀寫序列的數(shù)據(jù)PID類型。時(shí)序位顯示在括號中。數(shù)揚(yáng)階段狀態(tài)階段LDATA4DATA1bMM控制讀DATAODATA1OATAODATAIDATAW1DAFA1崖立階段狀態(tài)階段無數(shù)據(jù)控制傳送DATAODATA1 # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?# # #圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#圖8-37控制讀寫序列 圖8-7末端數(shù)據(jù)分割傳輸?shù)男畔?#當(dāng)控制端口在控制傳送的數(shù)據(jù)和狀態(tài)階段中發(fā)送停止握手的時(shí)候,必須對以后所有對此端口訪問返回停止握手,宜到收到建立PID為止。端口收到建

60、立PID之后,不應(yīng)返回停止握手。對丁默認(rèn)端點(diǎn),如果對丁建立事務(wù)返回了一個(gè)ACK握手,主機(jī)就認(rèn)為端點(diǎn)已經(jīng)自動(dòng)從導(dǎo)致停止的情況下恢復(fù)了并且端點(diǎn)一定正常工作了。匯報(bào)狀態(tài)結(jié)果狀態(tài)階段向主機(jī)做匯報(bào)傳送中的先前建立和數(shù)據(jù)階段的結(jié)果??赡芊祷厝N結(jié)果:命令序列成功地完成f;命令序列沒能完成;功能部件還在忙于完成指令。匯報(bào)狀態(tài)總是從功能部件到主機(jī)的方向。表8-7概括了每一種所需的應(yīng)答類型??刂茖憘魉驮跔顟B(tài)階段的事務(wù)數(shù)據(jù)時(shí)相返回狀態(tài)信息。而對丁控制讀傳送,主機(jī)在狀態(tài)階段事務(wù)的數(shù)據(jù)時(shí)相中發(fā)出零長度的數(shù)據(jù)包之后,功能部件在握手時(shí)相返回狀態(tài)信息。表8-7狀態(tài)階段的響應(yīng)狀態(tài)響應(yīng)控制寫傳送(在數(shù)據(jù)時(shí)相發(fā)送)控制讀傳送(在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論