博客專欄

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

        USB系列之第三章:USB協議

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

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

        每個USB事務由一個

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

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

          • 狀態包(用于確認事務并提供糾錯方法)

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

        通用USB數據包字段

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

          • 同步

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

        USB數據包類型

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

          • 標記數據包

          • 令牌包有三種類型,

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

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

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

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

            • 數據0

            • 數據1

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

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

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

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

            • 數據必須以字節的倍數發送。

          • 握手包

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

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

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

            • 失速-設備發現其處于需要主機干預的狀態。

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

        USB功能

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

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


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

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

        端點

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

        所有設備都必須支持終結點零。這是一個端點,當設備在總線上運行時,它在枚舉期間和整個持續時間內接收所有設備的控制和狀態請求。

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

        USB定義了兩種類型的管道

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



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


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: USB 協議

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 仲巴县| 定襄县| 宝兴县| 南宁市| 南阳市| 鸡西市| 吴江市| 浪卡子县| 随州市| 石家庄市| 临夏县| 晋中市| 奉贤区| 中方县| 陇川县| 巴里| 枝江市| 咸宁市| 乐昌市| 郑州市| 吉水县| 北辰区| 吉木乃县| 伊宁县| 巴青县| 上饶县| 宝兴县| 新乡市| 临漳县| 邵阳市| 农安县| 洛浦县| 浠水县| 浮梁县| 政和县| 瓦房店市| 砚山县| 西城区| 新乡县| 荥经县| 景洪市|