在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > USB學習系列之四——USB包結(jié)構(gòu)

            USB學習系列之四——USB包結(jié)構(gòu)

            作者: 時間:2016-12-14 來源:網(wǎng)絡 收藏
            1.USB的數(shù)據(jù)傳輸以包為單位,一個包被分成不同的域。USB傳輸時使用的是LSB在前,MSB在后的方式。

            2.不同的包所包含的域是不同的,但是都有共同的特點是:以同步域開始,緊跟著一個包標識符PID,最終以包結(jié)束符EOP結(jié)束這個包。

            本文引用地址:http://www.biyoush.com/article/201612/330044.htm

            3.同步域:高速USB串行接口引擎數(shù)據(jù)傳輸要開始了,同時也提供同步時鐘。對于低速設備和全速設備,同步域使用的是0000 0001(二進制數(shù));對于高速設備使用的是00000000 00000000 00000000 00000001。

            注意:這個是對發(fā)送端的要求,接收端解碼時,0的個數(shù)可以少于這個數(shù)目。

            4.包結(jié)束符:包結(jié)束符一共有8位,其中USB協(xié)議使用的只有4位(PID0~PID3),另外4位(PID4~PID7)是前四位的取反,用來校驗PID。USB協(xié)議規(guī)定了四類包,分別是:令牌包(PID1~PID0為01)、數(shù)據(jù)包(PID1~PID0為11)、握手包(PID1~PID0為10)和特殊包(PID1~PID0為00)。以下為USB2.0協(xié)議的包,帶*的為USB1.1協(xié)議沒有的:

            5.令牌包:令牌包用來啟動一次USB傳輸。主機發(fā)送一個令牌來通知哪個設備進行響應,如何響應。

            輸入令牌包:用來通知設備將要輸出一個數(shù)據(jù)包。

            輸出令牌包:用來通知設備返回一個數(shù)據(jù)包。

            建立令牌包:只用在控制傳輸中,通知設備輸出一個數(shù)據(jù)包,建立令牌包后只使用DATA0數(shù)據(jù)包,且只能發(fā)送到設備的控制端點,并且設備必須要接收,而輸出令牌包沒有這些限制。

            幀起始包:在每幀開始時發(fā)送,以廣播的形式發(fā)送。USB全速設備沒毫秒產(chǎn)生一個幀,高速設備每125微秒產(chǎn)生一個幀。USB主機會對當前的幀號進行計數(shù),在每次幀開始時通過SOF包發(fā)送幀號(或者微幀開始時,每毫秒有八個微幀,這8個微幀的幀號是一樣的)。SOF中的幀號是11位。
            注意:在4個令牌包中,只有SOF令牌包之后不能跟數(shù)據(jù)傳輸,其他的都有數(shù)據(jù)傳輸。每個令牌包之后都有一個CRC5的校驗,它只校驗PID之后的數(shù)據(jù),不包括PID本身,因為PID本身的后4位已經(jīng)有取反的校驗機制了。

            由于SOF令牌包之后不跟隨數(shù)據(jù)傳遞,所以SOF令牌包和其他三種包的結(jié)構(gòu)不同,具體如下圖所示:

            SOF令牌包結(jié)構(gòu)

            IN、OUT、SETUP令牌包結(jié)構(gòu)圖

            6.數(shù)據(jù)包

            USB1.1中只有DATA0和DATA1兩種數(shù)據(jù)包。

            USB2.0中增加了DATA2和MDATA兩種數(shù)據(jù)包,這兩種數(shù)據(jù)包主要用在高速分裂事物和高速高帶寬同步傳輸中。

            數(shù)據(jù)包的統(tǒng)一結(jié)構(gòu):同步域 + 8位包標志PID + 整數(shù)字節(jié)數(shù)據(jù) + CRC16校驗 + EOP。

            之所以有不同類型的數(shù)據(jù)包,是用在握手包出錯時糾錯。具體解釋如下:

            主機和設備都會維護自己的一個數(shù)據(jù)包類型切換機制:當數(shù)據(jù)包成功發(fā)送或者接收時,數(shù)據(jù)包類型切換。當檢測到對方所使用的數(shù)據(jù)包類型不對時,USB系統(tǒng)認為這發(fā)生了一個錯誤,并試圖從錯誤中恢復。數(shù)據(jù)包類型不匹配主要發(fā)生在握手包被損壞的時候。當一端已經(jīng)正確接收到數(shù)據(jù)并且返回確認信號后,確認信號在傳輸過程中被損壞。這時另一端就無法知道剛才發(fā)送的數(shù)據(jù)是否已經(jīng)發(fā)送成功,這時只好繼續(xù)保持自己的數(shù)據(jù)包類型不變。如果對方下一次使用的數(shù)據(jù)包類型跟自己的不一致,則說明它剛剛已經(jīng)成功接收到數(shù)據(jù)包;如果對方下一次使用的數(shù)據(jù)包跟自己的一致,則說明對方?jīng)]有切換數(shù)據(jù)包類型,也就是剛剛的數(shù)據(jù)包沒有發(fā)送成功,這是上一次的重試操作。

            7.握手包

            握手包用來表示一個傳輸是否被對方確認。

            握手包的結(jié)構(gòu):同步域 +包標識符PID + EOP。

            握手包有ACK、NAK、STALL和NYET。

            ACK:表示正確接收數(shù)據(jù),并且有足夠的空間來容納數(shù)據(jù)。主機和設備都可以用ACK來確認,而NAK、STALL和NYET只有設備能夠返回,主機不能使用這些握手包。

            NAK:表示沒有數(shù)據(jù)需要返回,或者數(shù)據(jù)正確接收但是沒有足夠的空間來容納。當主機接收到NAK時,知道設備還沒有準備好,主機會在以后合適的實際進行重試傳輸。

            STALL:表示設備無法執(zhí)行這個請求,或者端點已經(jīng)被掛起,它表示一種錯誤的狀態(tài),設備返回STALL之后,需要主機進行干預才能解除這種STALL狀態(tài)。

            NYET:只有在USB2.0高速設備輸出事物中使用,它表示設備本次數(shù)據(jù)成功接收,但是沒有足夠的空間來接收下一次數(shù)據(jù)。主機在下一次輸出數(shù)據(jù)時,將先使用PING命令牌包來探測設備是否有足夠的空間接收數(shù)據(jù),一面不必要的帶寬浪費。

            注意:NAK并不表示數(shù)據(jù)出錯,當USB主機或者設備檢測到數(shù)據(jù)出錯時,將什么都不返回,這時等待接收握手包的一方就會收不到握手包從而等待超時。

            8.特殊包

            特殊包是在一些特殊場合使用的包。總共有四種:PRE、ERR、SPLIT和PING。其中PRE、SPLIT、PING是令牌包,ERR是握手包。ERR、SPLIT、PING三個是在USB2.0協(xié)議中增加的。

            (1)PRE:通知集線器打開其低速端口的一種前導包,PRE只能使用在全速模式中。一般情況下集線器不會將全速信號發(fā)送給低速設備,只有當接收到PRE令牌包之后,才打開其低速端口。

            PRE令牌包結(jié)構(gòu):同步域 +PID +EOP。

            當需要傳送低速事務時,主機首先發(fā)送一個PRE令牌包(以全速模式發(fā)送)。對于全速設備,將會忽略這個令牌包。集線器在接收到這個令牌包之后,打開其連接了低速設備的端口,接著主機就會以低速模式給低速設備發(fā)送令牌包和數(shù)據(jù)包等。

            (2)PING:令牌包結(jié)構(gòu)同OUT令牌包。但是PING令牌包后不發(fā)送數(shù)據(jù),而是等待設備返回ACK或者NAK,以判斷設備是否能夠傳送數(shù)據(jù)。在USB2.0中的高速環(huán)境中才會使用PING令牌包,且只被使用在批量傳輸和控制傳輸事務中。

            (3)SPLIT:高速事務分裂令牌包,通知集線器將高速數(shù)據(jù)包轉(zhuǎn)化為全速或者低速數(shù)據(jù)包發(fā)送給其下面的端口。

            (4)ERR:在分裂事務中表示錯誤使用。高速分裂事務的過程比較復雜,而且主要是由集線器完成,所以不詳細說明。

            9.數(shù)據(jù)包的處理

            一般的USB接口芯片都會完成如CRC校驗、位填充、PID識別、數(shù)據(jù)包切換、握手等協(xié)議的處理。當USB接口芯片正確接收到數(shù)據(jù)時,入股偶有空間保存,則它將數(shù)據(jù)保存并返回ACK,同時,設置一個標志表示已經(jīng)正確接收到數(shù)據(jù);如果沒有空間保存數(shù)據(jù),則會自動返回NAK。

            收到輸入請求時,如果有數(shù)據(jù)需要發(fā)送,則發(fā)送數(shù)據(jù),并等待接收ACK。只有當數(shù)據(jù)成功發(fā)送出去之后,才設置標志位,表示數(shù)據(jù)已經(jīng)成功發(fā)送;如果沒有數(shù)據(jù)需要發(fā)送,則它自動返回NAK。

            通常只需要根據(jù)芯片提供的一些標志,準備需要發(fā)送的數(shù)據(jù)到端點,或者從端點讀取接收到的數(shù)據(jù)即可。所要發(fā)送和接收的數(shù)據(jù)指的是數(shù)據(jù)包中的數(shù)據(jù),至于同步域、包標識、地址、端點、CRC等是看不到的,在BUSHound中抓到數(shù)據(jù)也是如此,僅是數(shù)據(jù)包;并且在BUSHound中只能看到成功傳輸?shù)臄?shù)據(jù),即只有ACK確認過的數(shù)據(jù)包。由于控制傳輸比較特殊,SETUP包也會有相應的標志供我們使用。



            關(guān)鍵詞: USB學習包結(jié)

            評論


            技術(shù)專區(qū)

            關(guān)閉