usb20 協(xié)議層 中文版_第1頁(yè)
usb20 協(xié)議層 中文版_第2頁(yè)
usb20 協(xié)議層 中文版_第3頁(yè)
usb20 協(xié)議層 中文版_第4頁(yè)
usb20 協(xié)議層 中文版_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、同步字段的一部分,而包結(jié)束( EOP )分隔符在第 7 章有所描述。8.3.1包標(biāo)識(shí)符字段所有萬用串列總線包的同步字段后都緊跟著包標(biāo)識(shí)符( PID )。如圖 8-1 所示,包標(biāo)識(shí)符由 4 位的包類型字段和其后的 4 位的校驗(yàn)字段構(gòu)成。包標(biāo)識(shí)符指出了包的類型,并由此隱含地指出了包的格式和包上所用錯(cuò)誤檢測(cè)的類型。包標(biāo)識(shí)符的 4 位的校驗(yàn)字段可以保證包標(biāo)識(shí)符譯碼的可靠性,這樣包的余項(xiàng)也就能被正確地解釋。包標(biāo)識(shí)符的校驗(yàn)字段通過對(duì)包類型字段的二進(jìn)制的求反碼產(chǎn)生的。如果 4 個(gè) PID 檢驗(yàn)位不是它們的各自包標(biāo)識(shí)符位的補(bǔ),則說明存在 PID 錯(cuò)。圖 8-1 PID 格式主機(jī)和所有功能部件都必須對(duì)得到全部

4、PID 字段實(shí)行完整的譯碼。任何收到包標(biāo)識(shí)符,如果含有失敗的校驗(yàn)字段,或者經(jīng)譯碼得到未定義的值,則該包標(biāo)識(shí)符被假定是被損壞的,而且包的余項(xiàng)將被包接收機(jī)忽略。如果一個(gè)功能部件收到了包含了它所不支持的事務(wù)類型或方向的合法包標(biāo)識(shí)符,則不必應(yīng)答。例如,只能輸入的端口(IN-only Endpoint)必須忽略輸出標(biāo)記。表 8-1 列出了包標(biāo)識(shí)符類型,編碼及其描述。表 8-1 PID 類型PID 類型PID 名PID3:0描述標(biāo)記(表征)出自)的輸出()的輸入(幀開始( SOF )建立(裝備)0001B1001B0101B1101B在主機(jī)到功能部件的事務(wù)中有地址+ 端口號(hào)在功能部件到主機(jī)的事務(wù)中有地址+

5、 端口號(hào)幀開始標(biāo)記和幀號(hào)在主機(jī)到功能部件建立一個(gè)控制管道的事務(wù)中有地址+ 端口號(hào)數(shù)據(jù)(數(shù)據(jù))數(shù)據(jù) 0 ( DATA0 )數(shù)據(jù) 1 ( DATA1 )數(shù)據(jù) 2 ( DATA2 )MDATA0011B1011B0111B1111B偶數(shù)據(jù)包 PID奇數(shù)據(jù)包 PID高速寬帶同步傳輸幀數(shù)據(jù)包 PID (更多內(nèi)容請(qǐng)參見 5.9.2 章節(jié)部分)高速寬帶分段傳輸數(shù)據(jù)包 PID (更多內(nèi)容請(qǐng)參見 5.9.2,11.20 和 11.21 章節(jié)部分)握手(Handshake)確認(rèn)( ACK )不確認(rèn)( NAK )停止(STALL)無回應(yīng)( NYET )0010B1010B1110B0110B接收器收到無措數(shù)據(jù)包;接

6、收設(shè)備部不能接收數(shù)據(jù),或發(fā)送設(shè)備不能發(fā)送數(shù)據(jù);端口掛起,或一個(gè)控制管道請(qǐng)求不被支持。尚未從接收者獲得回應(yīng)。(更多內(nèi)容請(qǐng)參見 8.5.1 和 11.17-11.21 章節(jié)部分)專用(special)前同步( PRE )報(bào)錯(cuò)(ERR)分段(SPLIT)偵測(cè)(PING)預(yù)留(Reserved)1100B1100B1000B0100B0000B(標(biāo)記)主機(jī)發(fā)送的前同步字。打開到低速設(shè)備的下行總線通信。(握手)分段傳輸?shù)牟铄e(cuò)握手(重新使用PRE量值)(標(biāo)記)高速分段傳輸標(biāo)記(參見8.4.2章節(jié)部分)(標(biāo)記)對(duì)bulk/control模式下端口的高速數(shù)據(jù)流控制偵測(cè)(參見8.5.1章節(jié)部分)預(yù)留PID*注解

7、: PID 位以最高位在前的順序被表示。在萬用串列總線上被發(fā)送的時(shí)候,最右的位(位 0 )將被第一個(gè)發(fā)出。包標(biāo)識(shí)符被分為 4 個(gè)編碼組:標(biāo)記,數(shù)據(jù),握手和專用。包標(biāo)識(shí)符傳送的前 2 位( PID<0 : 1> )指出了其屬于哪個(gè)組。這說明包標(biāo)識(shí)符編碼的分布。8.3.2地址字段功能部件端口使用 2 個(gè)字段:功能部件地址字段和端口字段。功能部件對(duì)地址和端口字段都需要進(jìn)行譯碼。不允許使用地址或端口別名( Aliasing ),并且任何一個(gè)字段不匹配,此標(biāo)記都必須被忽略。另外,對(duì)未初始化的端口訪問將使得標(biāo)記被忽略。8.3.2.1地址字段功能部件地址( ADDR )字段通過其地址指定功能部件

8、,至于是數(shù)據(jù)包的發(fā)出地還是目的地,則取決于標(biāo)記 PID 的值。如圖 8-2 所示, ADDR<6 : 0> 指定了總共 128 個(gè)地址。地址字段被用于輸入,建立和輸出標(biāo)記。由定義可知,每個(gè) ADDR 值都定義了單一的功能部件。剛一復(fù)位和加電的時(shí)候,功能部件的地址默認(rèn)值為零,并且必須由主機(jī)在枚舉過程中編程。功能部件地址零被用作為缺省地址,不可被分配作任何別的用途。圖 8-2 地址字段8.3.2.2端口字段如圖 8-3 所示,附加的 4 位的端口( ENDP )字段在功能部件需要一個(gè)以上端口時(shí)候允許更靈活的尋址。除了端口地址 0 之外,端口個(gè)數(shù)是由功能部件決定的。端口字段只對(duì)輸入,建立

9、和輸出標(biāo)記 PID 有定義。所有的功能部件都必須在端口 0 提供一個(gè)控制管道(缺省控制管道)。對(duì)于低速設(shè)備,每個(gè)功能部件最多提供 3 個(gè)管道:在端口 0 的控制管道加上 2 個(gè)附加管道(或是 2 個(gè)控制管道,或是 1 個(gè)控制管道和 1 個(gè)中斷端口,或是 2 個(gè)中斷端口)。全速功能部件可以支持最多可達(dá) 16 個(gè)的任何類型的端口。圖 8-3 端口字段8.3.3幀號(hào)字段幀號(hào)字段是一個(gè) 11 位的字段,主機(jī)每過一幀就將其內(nèi)容加一。幀號(hào)字段達(dá)到其最大值 7 FFH 時(shí)歸零,且它僅每個(gè)幀最初時(shí)刻在 SOF 標(biāo)記中被發(fā)送。8.3.4數(shù)據(jù)字段數(shù)據(jù)字段可以在 0 到 1,023 字節(jié)之間變動(dòng),但必須是整數(shù)個(gè)字節(jié)

10、。圖 8-4 為多字節(jié)顯示格式。每個(gè)字節(jié)的范圍內(nèi)的數(shù)據(jù)位移出時(shí)都是最低位( LSb )在前。圖 8-4 數(shù)據(jù)字段格式如同在第 5 章所描述的那樣,數(shù)據(jù)包大小隨著傳送類型而變化。8.3.5循環(huán)冗余校驗(yàn)循環(huán)冗余校驗(yàn)( CRC )被用來在標(biāo)記和數(shù)據(jù)包中保護(hù)所有的非 PID 字段。在上下文中,這些字段被認(rèn)為是保護(hù)字段。PID 不在含有 CRC 的包 CRC 校驗(yàn)范圍內(nèi)。在位填充之前,在發(fā)送器中所有的 CRC 都由它們的各自字段產(chǎn)生。同樣地,在填充位被去除之后, CRC 在接收器中被譯碼。標(biāo)記和數(shù)據(jù)包的 CRC 可 100% 判斷單位錯(cuò)和雙位錯(cuò)。失敗的 CRC 指出了保護(hù)字段中至少有一個(gè)字段被損壞,并導(dǎo)

11、致接收器忽略那些字段,且在大部分情況下忽略整個(gè)包。為了 CRC 的發(fā)生和校檢,發(fā)生器和檢驗(yàn)器里的移位寄存器置成為全 1型。對(duì)于每個(gè)被發(fā)送或者被收到的數(shù)據(jù)位,當(dāng)前余項(xiàng)的最高一位和數(shù)據(jù)位進(jìn)行異或( XOR ),然后,余項(xiàng)是左移 1 位,并且,最低一位置零。如果異或的結(jié)果是 1 ,余項(xiàng)和生成多項(xiàng)式作異或。當(dāng)檢查的字段最后的一位被發(fā)送的時(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 誤差。對(duì)于 CRC ,必須滿足位填充的要求,且如果

12、前 6 位都是 1 的話,這包括在 CRC 的最后插入零,。8.3.5.1標(biāo)記 CRC標(biāo)記使用了 5 位的 CRC 字段,它覆蓋了輸入,建立和輸出標(biāo)記的 ADDR 和 ENDP 字段,或 SOF 標(biāo)記的時(shí)間戳字段。生成多項(xiàng)式如下:這個(gè)多項(xiàng)式的二進(jìn)制位組合是 00101 B 。如果所有的標(biāo)記位都被準(zhǔn)確無誤地收到,接收機(jī)中的 5 位剩余將是 01100 B 。8.3.5.2數(shù)據(jù) CRC數(shù)據(jù) CRC 是作用于數(shù)據(jù)包的數(shù)據(jù)字段上的 16 位多項(xiàng)式。產(chǎn)生的多項(xiàng)式是如下這個(gè)多項(xiàng)式的二進(jìn)制位組合是 1000000000000101 B 。如果全部的數(shù)據(jù)和 CRC 位被準(zhǔn)確無誤地收到, 16 位剩余將是 10

13、00000000001101 B 。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)。對(duì)于輸出和建立事務(wù),地址和端口字段唯一地確定了接下來將收到數(shù)據(jù)包的端口。對(duì)于輸入事務(wù)的,這些字段唯一地確定了哪個(gè)端口應(yīng)該傳送數(shù)據(jù)包。對(duì)于PING處理環(huán)節(jié),這些字段唯一地確定了發(fā)送數(shù)據(jù)包的端口。只有主機(jī)能發(fā)出標(biāo)記包。輸入 PID 定義了從功能部件到主機(jī)的數(shù)據(jù)事務(wù)。輸出和建立 PI

14、D 定義了從主機(jī)到功能部件的數(shù)據(jù)事務(wù)。偵測(cè)PID定義了從功能部件到主機(jī)的握手處理環(huán)節(jié)。圖 8-5 標(biāo)記包格式如上圖所示,標(biāo)記包包括了覆蓋地址和端口字段的 5 位 CRC 。CRC 并不覆蓋 PID, 因?yàn)樗凶约旱男r?yàn)字段。標(biāo)記和幀開始 (SOF) 包是由小包)界定的 3個(gè)個(gè)字節(jié)的包字段數(shù)據(jù)后面的包結(jié)束( EOP ,結(jié)束。如果包被譯碼為合法標(biāo)記或 SOF ,但卻沒有在 3 個(gè)字節(jié)之后以 EOP 終止,則它被認(rèn)為是無效的,并被接收器忽略。8.4.2 數(shù)據(jù)分割特殊標(biāo)記包USB為數(shù)據(jù)分割傳輸定義了特殊的標(biāo)記:SPLIT。與其他普通的三字節(jié)標(biāo)記包不同,這是一個(gè)四字節(jié)的標(biāo)記包。數(shù)據(jù)分割傳輸標(biāo)記包提供了攜

15、帶額外特殊傳輸信息的更多的傳輸字節(jié)。數(shù)據(jù)分割傳輸標(biāo)記用來支持主機(jī)控制器與處于高速運(yùn)轉(zhuǎn)狀態(tài)的集線器之間數(shù)據(jù)分割傳輸,而這一高速運(yùn)轉(zhuǎn)是集線器的下行端口與全速/低速設(shè)備之間進(jìn)行的。有兩種數(shù)據(jù)分割傳輸被規(guī)定使用SPLIT特殊標(biāo)記:始端數(shù)據(jù)分割傳輸(SSPLIT)和末端數(shù)據(jù)分割傳輸(CSPLIT)。如下面的章節(jié)所述,數(shù)據(jù)分割傳輸特殊標(biāo)記的字段表明了特殊的數(shù)據(jù)分割傳輸。8.4.2.1 數(shù)據(jù)分割傳輸高速數(shù)據(jù)分割傳輸僅僅用于主機(jī)與連有全速/低速設(shè)備的集線器之間的傳輸。這種高速數(shù)據(jù)分割傳輸用來通過集線器和一些全速/低速設(shè)備端口初始化全速/低速傳輸。高速數(shù)據(jù)分割傳輸也允許重新從集線器獲得全速/低速傳輸?shù)耐瓿蔂顟B(tài)。

16、這一方式允許主機(jī)控制器先通過高速傳輸開始全速/低速傳輸,再繼續(xù)其他高速傳輸而無需等待全速/低速傳輸以較慢速度進(jìn)行或完成。關(guān)于狀態(tài)機(jī)制和數(shù)據(jù)分割傳輸?shù)却齻鬏敹x的更多細(xì)節(jié)請(qǐng)見第11章節(jié)。高速數(shù)據(jù)分割傳輸有兩個(gè)部分:始端數(shù)據(jù)分割傳輸和末端數(shù)據(jù)分割傳輸。數(shù)據(jù)分割傳輸僅被定義用來完成主機(jī)控制器和集線器之間的傳輸。沒有其他高速、全速/低速設(shè)備使用數(shù)據(jù)分割傳輸。圖8-6 顯示了組成一般始端數(shù)據(jù)分割傳輸?shù)男畔?。狀態(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è)信息包

17、,這取決于特定的傳輸類型和數(shù)據(jù)指令。 圖 8-6 始端數(shù)據(jù)分割傳輸?shù)男畔鼒D8-7 顯示了組成一般末端數(shù)據(jù)分割傳輸?shù)男畔?。狀態(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è)信息包,這取決于特定的傳輸類型和數(shù)據(jù)指令。 圖 8-7 末端數(shù)據(jù)分割傳輸?shù)男畔鼣?shù)據(jù)分割傳輸?shù)慕Y(jié)果是由末端數(shù)據(jù)分割傳輸返回的。圖8-8 用一個(gè)中斷 IN 傳輸?shù)睦诱f明了這一概念上的會(huì)話。主機(jī)先向集線器發(fā)出一個(gè)開始片段(用1表示),再就可以進(jìn)行其他高速傳輸。一段時(shí)間后,開始片段使得集線器發(fā)

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

19、上發(fā)出OUT標(biāo)記和數(shù)據(jù)包。設(shè)備用握手作出回應(yīng)。一段時(shí)間后,主機(jī)發(fā)起末端片段事務(wù),集線器用設(shè)備提供的結(jié)果(全速/低速數(shù)據(jù)或是握手)作出回應(yīng)。 圖 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é)長(zhǎng)。SPLIT傳輸必須僅來源于主機(jī)。始端標(biāo)記在8.4.2.2章節(jié)被定義,末端標(biāo)記在8.4.2.3被定義。8.4.2.2 始端分割傳輸

20、標(biāo)記 圖8-10 始端片段(SSPLIT)標(biāo)志集線器地址字段包含支持特定全速/低速設(shè)備全速/低速傳輸?shù)募€器的USB設(shè)備地址。這一字段與8.3.2.1章節(jié)中ADDR字段有相同的定義。帶有SC(始端/末端)字段被設(shè)定為0表明這是一個(gè)始端片段事務(wù)(SSPLIT)。端口字段包括接收全速/低速事務(wù)的目標(biāo)集線器的端口號(hào)碼。正如圖8-11所示,所有128個(gè)端口用PORT<6:0>加以制定。主機(jī)必須正確地為單獨(dú)或多個(gè)TT集線器執(zhí)行設(shè)定端口字段。一個(gè)單獨(dú)TT集線器執(zhí)行可以忽略端口字段。 圖8-11 端口字段S(速度)字段按照如下規(guī)定制定中斷傳輸或控制傳輸速度:0全速1低速對(duì)于批量 IN/OUT和同

21、步 IN 的始端片段,S字段必須被設(shè)定為0。對(duì)于批量/控制 IN/OUT,中斷 IN/OUT,和同步 IN 的始端片段,E字段必須被設(shè)定為0。對(duì)于全速同步 OUT 始端片段,如表8-2所示,S(開始)字段和E(結(jié)束)字段為全速數(shù)據(jù)包確定全速數(shù)據(jù)有效載荷如何與數(shù)據(jù)相對(duì)應(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ù)有效載荷的全部部分為了使集線器發(fā)現(xiàn)各種各樣由于具有數(shù)據(jù)

22、有效載荷并需要多重始端片段的端點(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量值端點(diǎn)類型00控制傳輸01同步傳輸10批

23、量傳輸11中斷傳輸這一字段告訴集線器使用哪個(gè)分割傳輸狀態(tài)機(jī)完成全速/低速傳輸。全速/低速設(shè)備的地址和端點(diǎn)號(hào)碼信息包含在跟隨在SPLIT特殊標(biāo)記包后的常規(guī)的標(biāo)記包中。8.4.2.3 末端分割傳輸標(biāo)記 圖 8-12 末端分割傳輸(CSPLIT)標(biāo)記 如果SPLIT特殊標(biāo)記包中SC字段被置為1,則說明這是一個(gè)末端分割傳輸(CSPLIT)。U位是被保留的/不能加以使用,并必須置為0(0B)。其他末端分割片段標(biāo)記包的字段和始端片段標(biāo)記包具有相同的定義。8.4.3 幀開始( SOF)包對(duì)于全速總線和高速總線,主機(jī)分別以每 1.00 ms ± 0.0005 ms 一次和每125 s ±0

24、.0625 s一次的額定速率發(fā)出幀開始( SOF )包。如圖 8-13 中所示, SOF 包是由指示包類型的 PID 和其后的 11 位的幀號(hào)字段構(gòu)成。 圖 8-13 幀開始包SOF 標(biāo)記組成了僅有標(biāo)記的事務(wù)(它被用來分配SOF標(biāo)記)和伴隨的幀數(shù)的事務(wù)(相應(yīng)于每幀的開始以準(zhǔn)確時(shí)間間隔進(jìn)行)。包括集線器的所有全速功能部件都可收到 SOF 包。SOF 標(biāo)記不會(huì)使得接收功能部件產(chǎn)生返回包;因此,不能保證向任何給定的功能部件發(fā)送的 SOF 都能被收到。SOF 包發(fā)送 2 個(gè)時(shí)間調(diào)配信息。當(dāng)功能部件探測(cè)到 SOF 的 PID 的時(shí)候,它被告知發(fā)生 SOF 。對(duì)幀時(shí)間敏感而不需要追蹤幀數(shù)(例如集線器)的功

25、能部件,僅需對(duì) SOF 的 PID 譯碼;可忽略幀數(shù)和其 CRC 。如果功能部件需要追蹤幀數(shù),它必須對(duì) PID 和時(shí)間標(biāo)志都進(jìn)行譯碼。對(duì)總線時(shí)間調(diào)配信息的沒有特別需要的全速設(shè)備可以忽略 SOF 包。8.4.3.1 USB幀和微幀對(duì)于全速傳輸,USB定義了每個(gè)都由幀開始標(biāo)志(SOF)標(biāo)記的1ms幀時(shí)間,并且每1ms周期都有約定的跑動(dòng)公差。對(duì)于高速傳輸,USB也定義了以125微秒為幀時(shí)間、具有相應(yīng)跑動(dòng)公差的幀(參見第七章)。對(duì)于全速連接,SOF包每1ms產(chǎn)生一次(由主機(jī)控制 圖8-14 微幀和幀之間的關(guān)系器或HUB事務(wù)轉(zhuǎn)換器發(fā)出)。對(duì)于高速傳輸,SOF包也是在接下來的七個(gè)125微秒周期后產(chǎn)生的。圖

26、8-14顯示了微幀和幀之間的關(guān)系。 在1ms的時(shí)間內(nèi),高速USB設(shè)備將看到同一個(gè)SOF令牌包八次,且它們有相同的幀號(hào)。如果需要的話,高速設(shè)備可以通過檢測(cè)與原有SOF包有不同幀號(hào)的幀和將它作為第0個(gè)微幀處理來自己確定一個(gè)特殊微幀號(hào)。接下來的七個(gè)具有相同幀號(hào)的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 : DATA0, DATA1,DATA2和MDATA 來識(shí)別。2種數(shù)據(jù)包 PID (DATA0 和DATA1)是為了支持?jǐn)?shù)據(jù)切換同步(在第 8.6 節(jié)提到)

27、而定義的。所有四種數(shù)據(jù)PID被用在高帶寬高速同步端點(diǎn)的PID序列中(在第5.9節(jié)提到)。三種數(shù)據(jù)PID(MDATA,DATA0,DATA1)被用在分割傳輸事務(wù)中(在11.17-11.21章節(jié)中提到)。圖 8-15 數(shù)據(jù)包格式數(shù)據(jù)必須以整數(shù)的字節(jié)數(shù)發(fā)出。數(shù)據(jù) CRC 僅通過對(duì)包中的數(shù)據(jù)字段計(jì)算而得到,而不包括 PID ,它有自己的校驗(yàn)字段。低速設(shè)備的最大數(shù)據(jù)有效載荷是8字節(jié)。全速設(shè)備的最大數(shù)據(jù)載荷是1023字節(jié)。高速設(shè)備的最大數(shù)據(jù)載荷是1024字節(jié)。8.4.5握手包如圖 8-16 所示,握手包僅由 PID 構(gòu)成。握手包用來報(bào)告數(shù)據(jù)事務(wù)的狀態(tài),能還在表示數(shù)據(jù)成功接收,命令的接收或拒絕,流控制和停止

28、條件。只有支持流控制的事務(wù)類型才能返回握手信號(hào)。握手總是在事務(wù)的握手時(shí)相中被返回,也可在數(shù)據(jù)時(shí)相代替數(shù)據(jù)被返回。握手包由 1 個(gè)字節(jié)的包字段后的 EOP 確定界限。如果包被解讀為合法的握手信號(hào),但沒有以 1 個(gè)字節(jié)后面的 EOP 終止,則它被認(rèn)為是無效的,且被接收機(jī)忽略。圖 8-16 握手包l 有 4 種類型的握手包和一種特殊握手包:l ACK 表示數(shù)據(jù)包沒有位填充或數(shù)據(jù)字段上的 CRC 錯(cuò),并且數(shù)據(jù) PID 被正確收到。ACK 在下列的情況下被發(fā)放,當(dāng)時(shí)序列位匹配且接收器能接受數(shù)據(jù)的時(shí)候,或者當(dāng)時(shí)序位失配,但發(fā)送方和接收器互相之間必須再同步(詳見第 8.6 節(jié))的時(shí)候。ACK 握手信號(hào)只適用

29、于數(shù)據(jù)被傳送且期待握手信號(hào)的事務(wù)中。對(duì)于輸入事務(wù), ACK 由主機(jī)返回,而對(duì)于輸出、建立或PING事務(wù)則由功能部件返回;l NAK 表示功能部件不會(huì)從主機(jī)接受數(shù)據(jù)(對(duì)于輸出事務(wù)),或者功能部件沒有傳輸數(shù)據(jù)到主機(jī)(對(duì)于輸入事務(wù))。NAK 僅由功能部件在輸入事務(wù)的數(shù)據(jù)時(shí)相返回,或在輸出或PING事務(wù)的握手時(shí)相返回。主機(jī)決不能發(fā)出 NAK 。出于流控制的目的, NAK 用于表示功能部件暫時(shí)不能傳輸,或者接收數(shù)據(jù),但是最終還是能夠在不需主機(jī)干涉的情況下而傳輸或接收數(shù)據(jù);l STALL 作為輸入標(biāo)記的回應(yīng),或者在輸出事務(wù)的數(shù)據(jù)時(shí)相之后由功能部件返回,或者作為PING事務(wù)的回應(yīng)(見圖 8-30 和圖 8-

30、38 )。停頓表示功能部件不能傳輸,或者接收數(shù)據(jù),或者不支持一個(gè)控制管道請(qǐng)求。功能部件在返回一個(gè)STALL后的狀態(tài)(對(duì)于除了默認(rèn)端點(diǎn)的任何端點(diǎn))是不被定義的。在任何條件下都不允許主機(jī)返回STALL。停頓握手由設(shè)備用于在兩個(gè)不同的場(chǎng)合之一。第一種情況,是當(dāng)設(shè)置了與端口相聯(lián)系掛起特征的時(shí)候,稱為為特色" 功能停頓" (掛起特征在這文檔的第 9 章中詳細(xì)說明)。功能停頓的特殊情況是 " 命令停頓" 。如同在第 9 章中詳細(xì)敘述的那樣,命令停頓發(fā)生在主機(jī)顯式地設(shè)置了端口的掛起特征的時(shí)候。如果功能部件的端口被掛起,則功能部件必須繼續(xù)返回停頓,直到引起停止的條件通過

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

32、的允許高速集線器在全速/低速總線上被返回以報(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),直到下一個(gè)標(biāo)記被收到并成功地譯碼。8.4.6.1功能部件對(duì)輸入事務(wù)回答表 8-4 顯示了功能部件作為對(duì)輸入標(biāo)記的反應(yīng)而可能做的回答。如果由于停止或流控制條件, 功能部件不能發(fā)送數(shù)據(jù),它將發(fā)出STALL或 NAK 握手。如果功能部件

33、能發(fā)出數(shù)據(jù),它就發(fā)出數(shù)據(jù)。如果收到的標(biāo)記被損壞,則功能部件不應(yīng)答。表8-4 功能部件對(duì)輸入事務(wù)的回應(yīng)收到的標(biāo)記損壞功能部件的發(fā)送端口的掛起特征功能部件能發(fā)送數(shù)據(jù)采取的動(dòng)作是不管不管不回應(yīng)否置了位不管發(fā)送停止握手否沒置位否發(fā)送 NAK 握手否沒置位能發(fā)送數(shù)據(jù)包8.4.6.2主機(jī)對(duì)輸入事務(wù)回答表 8-5 顯示了主機(jī)對(duì)輸入事務(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ā)出 AC

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

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

36、.5事務(wù)格式包事務(wù)格式根據(jù)端口類型而變化。有 4 種端口類型:批處理,控制,中斷和同步。為滿足各種傳輸?shù)臅r(shí)序要求,主機(jī)控制器和設(shè)備各自需要不同的狀態(tài)機(jī)制。一些章節(jié)中的圖顯示了在各種傳輸類型中定義正確時(shí)序包的狀態(tài)機(jī)制。圖表不應(yīng)該認(rèn)為是必需的執(zhí)行,但指定了必需的行為。圖8-17顯示了狀態(tài)機(jī)制圖表的圖例。三線圓表明是提及了另外一個(gè)(分等級(jí)的)狀態(tài)機(jī)。兩線圓表明是一個(gè)初始狀態(tài)。單線圓表明是簡(jiǎn)單狀態(tài)。圖8-17 狀態(tài)機(jī)制的圖例帶箭頭的“突出”圖形表示狀態(tài)機(jī)制的出口或入口(在各自的圖例中)。在狀態(tài)機(jī)機(jī)制中,出口或入口與狀態(tài)機(jī)中處于更高級(jí)別的另一狀態(tài)有關(guān)。菱形(連接)用來將幾個(gè)過渡連接成一個(gè)普通的點(diǎn)。連接允

37、許有單個(gè)輸入過渡而有多個(gè)輸出過渡或者是有多個(gè)輸入過渡而有單個(gè)輸出過渡。為了路徑能夠被獲取,所有與連接有關(guān)的過渡情形都要為真。路徑僅僅是包括一個(gè)或更多的連接的過渡的序列。過渡附加了一個(gè)方框,它里面的中間有一條線,將方框分為上下兩部分,上面是條件,下面是行為。若想進(jìn)行這一過渡,則需條件為真。行為和條件的句法是符合VHDL的。如果過渡得以進(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)。這使得主機(jī)控制

38、器狀態(tài)機(jī)向下行總線發(fā)出一個(gè)或多個(gè)信息包(HSD1)。設(shè)備從總線(HSD2)獲得這些信息包,對(duì)收到的信息包作出反應(yīng),并通過相應(yīng)的設(shè)備端點(diǎn)(在“端點(diǎn)陣列”中)和其功能單元進(jìn)行通信。之后,設(shè)備可能向上行總線(HSU1)返回一個(gè)信息包。主機(jī)控制器狀態(tài)機(jī)能夠從總線(HSU2)收到一個(gè)新版并把該事務(wù)的處理結(jié)果提供給USB主控制器(HC_resp)。總線上什么包被發(fā)送的細(xì)節(jié)決定于端點(diǎn)的傳輸類型和狀態(tài)機(jī)遵守什么樣的總線活動(dòng)規(guī)則。狀態(tài)機(jī)是以分等級(jí)的形式存在的。圖8-19顯示了主機(jī)控制器的頂層狀態(tài)機(jī)。這一章的余下部分將討論無分割傳輸。分割傳輸狀態(tài)機(jī)(HC_Do_start 和HC_Do_complete)將在第十

39、一章進(jìn)行描述和說明。 圖8-18 狀態(tài)機(jī)環(huán)境概述 圖8-19 主控制器頂層事務(wù)狀態(tài)機(jī)分層概況主機(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è)備對(duì)于任意它的端點(diǎn)都有一個(gè)狀態(tài)。設(shè)備狀態(tài)機(jī)時(shí)序決定了對(duì)于事務(wù)設(shè)備作出怎樣的反應(yīng)。附錄包括了一些用于組成狀態(tài)機(jī)、可能對(duì)于理解狀態(tài)機(jī)的額外細(xì)節(jié)

40、有所幫助的聲明。還有數(shù)個(gè)偽代碼程序和函數(shù)作為條件和行為。在附錄中還包含對(duì)它們的簡(jiǎn)單描述。圖8-20顯示了無分割傳輸類型主機(jī)控制器總體狀態(tài)機(jī)分層的概況。圖8-21顯示了設(shè)備狀態(tài)機(jī)的分層。首先介紹的是端點(diǎn)類型的普通狀態(tài)機(jī)。最低級(jí)別的端點(diǎn)類型特殊狀態(tài)機(jī)將在以下的各種端點(diǎn)類型的章節(jié)中分別進(jìn)行介紹。 圖8-20 主機(jī)控制器無分割傳輸狀態(tài)機(jī)分層概況 圖8-21 設(shè)備傳輸狀態(tài)機(jī)分層概況 圖8-22 設(shè)備頂層狀態(tài)機(jī) 圖8-23 Device_process_Trans狀態(tài)機(jī)制 圖8-24 Dev_do_OUT 狀態(tài)機(jī)制 圖8-25 Dev_do_IN 狀態(tài)機(jī)制 圖8-26 HC_Do_nonsplit狀態(tài)機(jī)制

41、8.5.1通過PING流控制的無應(yīng)答限制全速/低速設(shè)備可以具有批量傳輸/控制傳輸端點(diǎn),它們要花費(fèi)時(shí)間處理它們的數(shù)據(jù),并且,因此用無應(yīng)答握手回應(yīng)OUT事務(wù)。這一握手回應(yīng)說明端點(diǎn)因?yàn)闆]有數(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)階段的OUT事務(wù)??刂平㈦A段不支持PING協(xié)議。這一機(jī)制允許

42、設(shè)備告知主機(jī)控制器它是否對(duì)于下一個(gè)OUT事務(wù)足夠的端點(diǎn)空間。如果設(shè)備端點(diǎn)不具有空間,主機(jī)控制器可以決定為這個(gè)端點(diǎn)延遲一個(gè)事務(wù)嘗試,同時(shí)可以嘗試其他事務(wù)。這就可以完成改進(jìn)的總線實(shí)現(xiàn)。這一機(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è)備可以長(zhǎng)時(shí)間的用NAK回應(yīng)PING。NAK回應(yīng)并不是主機(jī)控制器重新傳輸請(qǐng)求的

43、原因。如果設(shè)備在(微)幀中用NAK作出回應(yīng),主機(jī)控制器可以在下一個(gè)bInteval中特別為端點(diǎn)發(fā)出下一個(gè)事務(wù)。然而,設(shè)備必須準(zhǔn)備好以連續(xù)事務(wù)的形式接收PINGs,例如,一個(gè)立刻接著另一個(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握手對(duì)OUT/DATA事務(wù)作出回應(yīng),這就意味著端點(diǎn)成功接收了數(shù)據(jù)并且具有“最大數(shù)據(jù)包”數(shù)據(jù)有效載荷的空間。只要主機(jī)控制器有事務(wù)產(chǎn)生,它就繼續(xù)OUT/DATA事務(wù)(對(duì)于總線上的下一個(gè)事務(wù)這是需要的)。如果端點(diǎn)以NY

44、ET握手回應(yīng)OUT/DATA事務(wù),這就意味著端點(diǎn)接收了數(shù)據(jù)但不再具有“最大數(shù)據(jù)包”數(shù)據(jù)有效載荷的空間。直到端點(diǎn)聲明具有空間,主機(jī)控制器才可以重新使用PING標(biāo)記。 圖8-27 主機(jī)高速批量OUT/Control PING狀態(tài)機(jī)制8.5.1.1PING協(xié)議中對(duì)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è)vInterval周期發(fā)

45、生一次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è)bInterval的0表明它從不發(fā)生NAK。端點(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-28 Dev_HS_ping 狀態(tài)機(jī)制

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

47、數(shù)據(jù)無錯(cuò)發(fā)送的能力。如圖 8-30 所示,批處理事務(wù)是由標(biāo)記,數(shù)據(jù)和握手包構(gòu)成的三時(shí)相的事務(wù)。在某些流控制和掛起條件下,數(shù)據(jù)時(shí)相被握手信號(hào)替換,從而產(chǎn)生了沒有數(shù)據(jù)傳輸?shù)膬蓵r(shí)相的事務(wù)。PING包和NYET包僅僅使用在工作在高速狀態(tài)的設(shè)備上。圖 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ī)檢測(cè)到錯(cuò)誤,它不返回握

48、手包給功能部件。當(dāng)主機(jī)準(zhǔn)備好了傳送成批數(shù)據(jù)的時(shí)候,它首先發(fā)出一個(gè)后跟數(shù)據(jù)包的輸出標(biāo)記包(或者PING標(biāo)記包,參見8.5.1章節(jié))。如果數(shù)據(jù)由功能部件無錯(cuò)地接收到,那么它將返回三個(gè)握手中的一個(gè):l ACK 表示數(shù)據(jù)包無錯(cuò)地接收到,通知主機(jī)可以發(fā)送下一個(gè)包;l NAK 表示數(shù)據(jù)被無錯(cuò)地收到,但主機(jī)應(yīng)該重新發(fā)送數(shù)據(jù)因?yàn)閿?shù)據(jù)功能部件處于妨礙它接受數(shù)據(jù)的暫時(shí)條件(例如緩沖滿)中;l 如果端口被停止,則返回STALL(停止)以告訴主機(jī)不要重試傳輸,因?yàn)楣δ懿考嫌绣e(cuò)誤條件。如果接收到的數(shù)據(jù)有 CRC 或者位填充錯(cuò)誤,那么不返回任何握手。圖8-31和圖8-32分別說明了主機(jī)和設(shè)備批量傳輸、控制傳輸和中斷傳輸

49、OUT全速/低速事務(wù)的狀態(tài)機(jī)制。圖8-27、圖8-28和圖8-29說明高速傳輸事務(wù)的狀態(tài)機(jī)制。圖8-33和圖8-34分別說明了主機(jī)和設(shè)備批量傳輸、控制傳輸和中斷傳輸IN事務(wù)的狀態(tài)機(jī)制。 圖8-31 批量/控制/中斷OUT事務(wù)主機(jī)狀態(tài)機(jī)制圖8-32 批量/控制/中斷OUT事務(wù)設(shè)備狀態(tài)機(jī)制 圖8-33 批量/控制/中斷IN事務(wù)主機(jī)狀態(tài)機(jī)制圖8-34 批量/控制/中斷IN事務(wù)設(shè)備狀態(tài)機(jī)制圖 8-35 說明了時(shí)序位和數(shù)據(jù) PID 在成批讀和寫中的用法。數(shù)據(jù)包同步經(jīng)數(shù)據(jù)時(shí)序切換位和 DATA0/ DATA1 PID 的使用而達(dá)到。當(dāng)端口經(jīng)歷配置事件(配置事件在節(jié) 9.1.1.5 和 9.4.5 中有解釋

50、)的時(shí)候,批事務(wù)端口的切換時(shí)序被初始化為 DATA0 。端口上的數(shù)據(jù)切換不是作為短包傳送或 IRP 撤消的直接結(jié)果而被初始化的。圖 8-35 批事務(wù)讀和寫主機(jī)總是通過配置事件初始化總線傳送的第一個(gè)事務(wù)為 DATA0 PID 。第二的事務(wù)使用 DATA1 PID ,并且,剩余的后繼數(shù)據(jù)傳送輪流切換。數(shù)據(jù)包發(fā)送器根據(jù) ACK 的接收情況來切換而接收器根據(jù)數(shù)據(jù)包的接收的情況切換(參見第 8.6 節(jié))。8.5.3控制傳送控制傳送最少有 2 個(gè)事務(wù)階段:建立和狀態(tài)??刂苽魉涂梢杂羞x擇性地包括建立和狀態(tài)階段之間的數(shù)據(jù)階段。在建立階段里,建立事務(wù)用于向功能部件的控制端口傳輸信息。建立事務(wù)在格式上類似于輸出,

51、但是使用的是建立而不是輸出的 PID 。圖 8-36 說明了建立事務(wù)的格式。建立總是在建立事務(wù)的數(shù)據(jù)時(shí)相上使用 DATA0 PID 。收到建立的功能部件必須接受建立數(shù)據(jù)并用 ACK 應(yīng)答,如果數(shù)據(jù)被損壞,則丟棄數(shù)據(jù)且不返回握手。圖 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ù)都作為剩余

52、在最后的事務(wù)中被發(fā)送??刂苽魉偷臓顟B(tài)階段是序列中的最后一個(gè)操作。狀態(tài)階段是以相對(duì)前面的階段數(shù)據(jù)流方向的變化來描述的,并且總是使用 DATA1 PID 。例如,如果數(shù)據(jù)階段由輸出事務(wù)構(gòu)成的,狀態(tài)是單一的輸入事務(wù)。如果控制傳送序列沒有數(shù)據(jù)階段,那么它由建立階段和其后的由輸入事務(wù)構(gòu)成的狀態(tài)階段構(gòu)成。圖 8-37 說明了事務(wù)順序,數(shù)據(jù)時(shí)序位的值和控制讀寫序列的數(shù)據(jù) PID 類型。時(shí)序位顯示在括號(hào)中。圖 8-37 控制讀寫序列當(dāng)控制端口在控制傳送的數(shù)據(jù)和狀態(tài)階段中發(fā)送停止握手的時(shí)候,必須對(duì)以后所有對(duì)此端口訪問返回停止握手,直到收到建立 PID 為止。端口收到建立 PID 之后,不應(yīng)返回停止握手。對(duì)于默認(rèn)

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論