當前位置:
首頁 > 最新 > 不用再為USB底層協議犯難了

不用再為USB底層協議犯難了

USB它是串列匯流排,所以數據在匯流排上是一位一位傳輸的,先傳輸最低位數據,最後傳輸最高位數據。對於多個位元組的數據傳輸呢,採用的是小端格式,即先傳輸低位元組數據,最後傳輸高位元組數據。

在USB中,數據是以包為單位進行傳輸的,所有的包都必須以SYNC欄位開始,以EOP(End-of-Packet)結尾。在SYNC欄位之後,緊跟著的是包標識符(PID),PID為一個位元組,其中4位用於定義包的類型,另外4位是用來校驗PID的,PID格式如下:

在USB中,定義了四種類型的包,令牌包、數據包、握手包和特殊包,包類型詳細定義如下:

在令牌包的PID欄位之後,還包含地址域,地址就包括設備地址和端點地址,設備地址共7位,總共可定址128個地址,但是地址0是作為默認設備地址的,所以說,USB系統中,最多只能同時連接127個設備。端點地址共4位,可定址16個端點。

在USB包最後,還包含5位的CRC檢驗碼,CRC校驗碼只對PID後面的數據進行校驗,不對PID進行校驗,因為PID本身就包含4位校驗碼。

包格式

令牌包格式

令牌包格式定義如下:

這裡的令牌特指IN、OUT、SETUP令牌,而SOF包格式定義如下:

令牌包實例如下:

數據包格式

數據包包含包標識符(PID)和0到多個位元組的數據,數據包類型總共四種,DATA0、DATA1、DATA2和MDATA。數據包格式定義如下:

數據包實例如下:

上圖為SETUP請求數據包,用於讀取設備的設備描述符。

握手包格式

握手包有三種ACK、NAK和STALL,其中ACK表示數據傳輸完成並且無錯誤,NAK表示設備不能接收數據或者沒有數據上傳,STALL表示設備不能進行數據傳輸。而NYET和ERR握手包只針對高速設備,表示設備沒有準備好或者出錯。握手包格式定義如下:

ACK握手包實例如下:

特別推薦

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 21ic電子網 的精彩文章:

為什麼單片機不能直接驅動繼電器和電磁閥
這麼講解高斯白雜訊,還有色雜訊,誰都會懂
關於怎樣衡量一個工程師水平的一點想法
十大主流智能電錶芯 你知多少

TAG:21ic電子網 |