博客專欄

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

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

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

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

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

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

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

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

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

通用USB數(shù)據(jù)包字段

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

    • 同步

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

USB數(shù)據(jù)包類型

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

    • 標(biāo)記數(shù)據(jù)包

    • 令牌包有三種類型,

      • -通知USB設(shè)備主機(jī)希望讀取信息。

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

      • 安裝程序-用于開始控制傳輸

    • 令牌包必須符合以下格式,同步PID地址終點CRC5EOP公司數(shù)據(jù)包有兩種類型的數(shù)據(jù)包,每種類型的數(shù)據(jù)包最多可以傳輸1024字節(jié)的數(shù)據(jù)。

      • 數(shù)據(jù)0

      • 數(shù)據(jù)1

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

      • 低速設(shè)備的最大數(shù)據(jù)負(fù)載大小為8字節(jié)。

      • 全速設(shè)備的最大數(shù)據(jù)負(fù)載大小為1023字節(jié)。

      • 高速設(shè)備的最大數(shù)據(jù)負(fù)載大小為1024字節(jié)。

      • 數(shù)據(jù)必須以字節(jié)的倍數(shù)發(fā)送。

    • 握手包

    • 有三種類型的握手包,它們只由PID組成

      • 確認(rèn)-確認(rèn)已成功接收數(shù)據(jù)包。

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

      • 失速-設(shè)備發(fā)現(xiàn)其處于需要主機(jī)干預(yù)的狀態(tài)。

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

USB功能

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

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


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

軟件現(xiàn)在得到一個中斷,應(yīng)該讀取端點緩沖區(qū)的內(nèi)容并解析設(shè)備描述符請求。

端點

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

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

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

USB定義了兩種類型的管道

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



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


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



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

相關(guān)推薦

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

關(guān)閉