<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > USB系列之第三章:USB協(xié)議

USB系列之第三章:USB協(xié)議

發(fā)布人:電子資料庫 時(shí)間:2022-09-02 來(lái)源:工程師 發(fā)布文章
USB協(xié)議

與RS-232和類(lèi)似的串行接口不同,USB沒(méi)有定義發(fā)送數據的格式,而是由幾層協(xié)議組成。雖然這聽(tīng)起來(lái)很復雜,但現在不要放棄。一旦你明白了是怎么回事,你真的只需要擔心更高層的問(wèn)題。事實(shí)上,大多數USB控制器I.C.s將負責較低層,從而使最終設計者幾乎看不見(jiàn)它。

每個(gè)USB事務(wù)由一個(gè)

    • 令牌包(定義它期望的后續內容的頭),一個(gè)

    • 可選數據包(包含有效載荷)和

    • 狀態(tài)包(用于確認事務(wù)并提供糾錯方法)

正如我們已經(jīng)討論過(guò)的,USB是一種以主機為中心的總線(xiàn)。主機啟動(dòng)所有事務(wù)。第一個(gè)包,也稱(chēng)為令牌,由主機生成,用于描述要遵循的內容、數據事務(wù)是讀還是寫(xiě)以及設備的地址和指定的端點(diǎn)是什么。下一個(gè)包通常是承載有效載荷的數據包,后面是握手包,報告數據或令牌是否成功接收,或者端點(diǎn)是否暫?;驘o(wú)法接受數據。

通用USB數據包字段

USBus上的數據首先傳輸LSBit。USB數據包由以下字段組成:,

    • 同步

    • 所有數據包必須以同步字段開(kāi)頭。同步字段在低速和全速時(shí)為8位,高速時(shí)為32位長(cháng),用于使接收器的時(shí)鐘與****機的時(shí)鐘同步。最后兩位表示PID字段的起始位置。PIDPID代表數據包ID。此字段用于標識正在發(fā)送的數據包的類(lèi)型。下表顯示了可能的值。集團PID值包標識代幣0001輸出令牌one thousand and one象征性地0101SOF代幣one thousand one hundred and one安裝令牌數據0011數據0one thousand and eleven數據10111數據2one thousand one hundred and eleven數據握手0010ACK握手one thousand and ten握手one thousand one hundred and ten拖延握手0110奈特(目前還沒(méi)有回應)特別的one thousand and one hundred序言one thousand and one hundred錯誤one thousand分裂0100發(fā)出砰的聲響PID有4個(gè)位,但是為了確保它被正確地接收,4個(gè)位被補充和重復,使一個(gè)8位的PID。結果格式如下所示。PID zeroPID onePID twoPID threenPID公司 zeronPID公司 onenPID公司 twonPID公司 three地址指定指定設備地址的字段。長(cháng)度為7位,可以支持127個(gè)設備。地址0無(wú)效,因為任何尚未分配地址的設備都必須響應發(fā)送到地址0的數據包。終點(diǎn)端點(diǎn)字段由4位組成,允許16個(gè)可能的端點(diǎn)。但是,低速設備在默認管道的頂部只能有兩個(gè)附加端點(diǎn)。(最多4個(gè)端點(diǎn))CRC公司對分組有效載荷內的數據執行循環(huán)冗余檢查。所有的令牌包都有一個(gè)5位的CRC,而數據包有一個(gè)16位的CRC。EOP公司數據包結束。由單端零(SE0)發(fā)出信號,持續約2位時(shí)間,然后用J表示1位時(shí)間。

USB數據包類(lèi)型

USB有四種不同的數據包類(lèi)型。令牌包指示要遵循的事務(wù)類(lèi)型,數據包包含有效載荷,握手包用于確認數據或報告錯誤,幀開(kāi)始包指示新幀的開(kāi)始。

    • 標記數據包

    • 令牌包有三種類(lèi)型,

      • -通知USB設備主機希望讀取信息。

      • 出去-通知USB設備主機希望發(fā)送信息。

      • 安裝程序-用于開(kāi)始控制傳輸

    • 令牌包必須符合以下格式,同步PID地址終點(diǎn)CRC5EOP公司數據包有兩種類(lèi)型的數據包,每種類(lèi)型的數據包最多可以傳輸1024字節的數據。

      • 數據0

      • 數據1

    • 高速模式定義了另外兩個(gè)數據PID,DATA2和MDATA。數據包的格式如下:,同步PID數據CRC16型EOP公司

      • 低速設備的最大數據負載大小為8字節。

      • 全速設備的最大數據負載大小為1023字節。

      • 高速設備的最大數據負載大小為1024字節。

      • 數據必須以字節的倍數發(fā)送。

    • 握手包

    • 有三種類(lèi)型的握手包,它們只由PID組成

      • 確認-確認已成功接收數據包。

      • 納克-報告設備臨時(shí)無(wú)法發(fā)送或接收數據。也可以在中斷事務(wù)期間用來(lái)通知主機沒(méi)有要發(fā)送的數據。

      • 失速-設備發(fā)現其處于需要主機干預的狀態(tài)。

    • 握手數據包的格式如下:,同步PIDEOP公司幀包開(kāi)始主機每1ms發(fā)送一次由11位幀號組成的SOF包 ±在全速總線(xiàn)上為500ns或每125μs ±高速總線(xiàn)上為0.0625μs。同步PID幀編號CRC5EOP公司

USB功能

當我們想到USB設備時(shí),我們想到的是USB外圍設備,但USB設備可能是指在主機或外圍設備上使用的USB收發(fā)器設備、USBHub或主機控制器IC設備或USB外圍設備。因此,本標準引用了USB功能,這些功能可以被視為提供諸如打印機、Zip驅動(dòng)器、掃描儀、調制解調器或其他外圍設備等功能的USB設備。

所以現在我們應該知道什么東西組成了一個(gè)USB包。不?你忘了一個(gè)PID字段已經(jīng)有多少位了?好吧,別驚慌失措。幸運的是,大多數USB功能都處理silicon中的低層USB協(xié)議,直到事務(wù)層(我們將在下一章討論)。我們之所以要覆蓋這些信息,是因為大多數USB功能控制器都會(huì )報告諸如PID編碼錯誤之類(lèi)的錯誤。一個(gè)沒(méi)有編碼的PID能簡(jiǎn)單地問(wèn)什么?如果你認為PID的最后四位與前四位的倒數不匹配,那么你是對的。


大多數函數都有一系列緩沖區,通常為8字節長(cháng)。每個(gè)緩沖區都屬于一個(gè)端點(diǎn)-ep0in,EP0 OUT等等。例如,主機發(fā)送一個(gè)設備描述符請求。功能硬件將讀取設置數據包并從地址字段確定該數據包是否為其自身,如果是,則將把以下數據包的有效負載復制到由設置令牌的端點(diǎn)字段中的值指定的適當的端點(diǎn)緩沖區。然后,它將發(fā)送一個(gè)握手包來(lái)確認字節的接收,并在半導體/微控制器內為適當的端點(diǎn)生成一個(gè)內部中斷,表示它已經(jīng)接收到包。這通常都是在硬件上完成的。

軟件現在得到一個(gè)中斷,應該讀取端點(diǎn)緩沖區的內容并解析設備描述符請求。

端點(diǎn)

端點(diǎn)可以描述為數據的源或匯。由于總線(xiàn)以主機為中心,端點(diǎn)出現在USB功能的通信通道的末端。例如,在軟件層,您的設備驅動(dòng)程序可以向您的設備EP1發(fā)送數據包。當數據從主機流出時(shí),它將最終進(jìn)入ep1out緩沖區。你的固件將在空閑時(shí)讀取這些數據。如果要返回數據,函數不能簡(jiǎn)單地寫(xiě)入總線(xiàn),因為總線(xiàn)由主機控制。因此,它將數據寫(xiě)入位于緩沖區中的EP1,直到主機向請求數據的端點(diǎn)發(fā)送IN包為止。Endpointscan也可以看作是功能設備的硬件和在功能設備上運行的固件之間的接口。

所有設備都必須支持終結點(diǎn)零。這是一個(gè)端點(diǎn),當設備在總線(xiàn)上運行時(shí),它在枚舉期間和整個(gè)持續時(shí)間內接收所有設備的控制和狀態(tài)請求。

當設備在一系列端點(diǎn)上發(fā)送和接收數據時(shí),客戶(hù)端軟件通過(guò)管道傳輸數據。管道是主機和端點(diǎn)之間的邏輯連接。管道還將有一組與之相關(guān)的參數,如分配給它的帶寬、它使用的傳輸類(lèi)型(控制、批量、Iso或中斷)、數據流的方向和最大包/緩沖區大小。例如,默認管道是由端點(diǎn)zeroin和端點(diǎn)zero out組成的雙向管道,具有控制傳輸類(lèi)型。

USB定義了兩種類(lèi)型的管道

  • 溪流管道另一種類(lèi)型的數據流可以被定義為USB類(lèi)型,并且沒(méi)有其他類(lèi)型的數據。數據按順序流動(dòng),并有一個(gè)預定義的方向,即輸入或輸出。流管道將支持批量、同步和中斷傳輸類(lèi)型。流管道可以由主機或設備控制。



  • 消息管道有一個(gè)定義的USB格式。它們由主機控制,由主機發(fā)送的請求啟動(dòng)。然后,根據請求的指示,向所需的方向傳輸數據。因此,消息管道允許數據雙向流動(dòng),但只支持控制傳輸。


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: USB 協(xié)議

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>