淺談總線通信機制----USB學習指南與總結(jié)
眾所周知,USB別看就只有四條線,但只是對于眼睛看到的來講,確實它的構(gòu)造就很簡單。
但是USB協(xié)議本身就是很復雜的一樣東西,但其實把關(guān)系搞明白了也不復雜,畢竟工作不可能全部都用的得到,所以,只要關(guān)心我們需要知道的那部分就行了。
學習可參考的書籍<<圈圈帶你玩USB>>,<<USB系統(tǒng)原理及主從機設(shè)計>>。
這兩本書,第一本比較基礎(chǔ),看看就行了,但很多概念寫得不是很全面,也有錯誤理解的地方。第二本,寫得很好,很多概念詳細解釋,比如說學習重點的部分:傳輸、事務(wù)、包、域、描述符都講得很詳細。
USB的6種狀態(tài):接入態(tài)、電源態(tài)(供電態(tài))、缺省態(tài)、地址態(tài)、配置態(tài)、掛起態(tài)。
USB的6種狀態(tài)其實是一種暫態(tài),那它們分別是怎樣的,來解釋下:
(1)接入態(tài):
主機通過上拉電阻接在D+或者D-上來判定該設(shè)備是否是全速或者低速設(shè)備。因為主機端在沒有任何外設(shè)接進來的時候,D+和D-分別接了兩個15K歐的下拉電阻,當有設(shè)備接上來的時候,也就是有上拉電阻過來了,這時候,主機端通過識別上拉電阻在D+和D-來取決它是否為低速設(shè)備,在這個過程中,會進行分壓,使傳輸線有驅(qū)動能力。
(2)電源態(tài)(供電態(tài))
就是給設(shè)備供電,分為設(shè)備接入時的默認供電值,配置階段后的供電值(按數(shù)據(jù)中要求的最大值,可通過編程設(shè)置),在配置描述符中可以配置最大電流。
(3)缺省態(tài)
USB在被配置之前,通過地址0與主機進行通信。例如:
(4)地址態(tài)
經(jīng)過了配置,USB設(shè)備復位后,就可以按主機分配給它的唯一地址來與主機通信,這種狀態(tài)就是地址態(tài);例如:
(5)配置態(tài)
通過各種標準的USB請求命令來獲取設(shè)備的各種信息,并對設(shè)備的某此信息進行改變或設(shè)置。例如:
(6)掛起態(tài)
總線供電設(shè)備在3ms內(nèi)沒有總線動作,即USB總線處于空閑狀態(tài)的話,該設(shè)備就要自動進入掛起狀態(tài),在進入掛起狀態(tài)后,總的電流功耗不超過280UA。
USB協(xié)議涉及到的概念主要有:傳輸、事務(wù)、包、域,它們的關(guān)系又是怎么樣的?
USB的傳輸主有四種:控制傳輸(目前工作用到),同步傳輸,中斷傳輸(目前工作用到),批量傳輸。傳輸是USB中最大的單位,每種傳輸都有不同的事務(wù)來組成.
USB的事務(wù)主要有三種:輸入事務(wù)(IN)、輸出事務(wù)(OUT)、設(shè)置事務(wù)(SETUP),每種事務(wù)又是由各種各樣的包來組成。
USB的包(宏觀上來說)有四種:令牌包、數(shù)據(jù)包、握手包、特殊包。包是USB傳輸數(shù)據(jù)的基本單位。每種類型的包都會有不同的域來構(gòu)成。
USB的域是USB傳輸中最小的單位,域主要分為7類,分別是:同步域(SYNC)、標識域(PID)、地址域(ADDR)、端點域(ENDP)、幀起始域(SOF)、數(shù)據(jù)域(DATA)、CRC校驗域(CRC)。
來看一張我畫的圖,再怎么覺得難的東西,也許你看完這張圖以后,也就知道自己該怎么去學習了,這張圖是我使用USB邏輯分析勾出來的圖,然后加上自己學習的總結(jié),這就是一個USB中傳輸?shù)倪^程,相信你已經(jīng)明白了USB中傳輸、事務(wù)、包、域之間的關(guān)系了吧?是不是很簡單?
說了這么多,那USB又是怎么來識別設(shè)備的呢?通過枚舉。
枚舉將是整個USB學習的重中之重,枚舉就是主機從設(shè)備讀取各種描述符信息,這樣主機就可以根據(jù)這些信息加載合適的的驅(qū)動程序,從而知道是什么類型的設(shè)備,如何進行通信等等。而主機要獲取設(shè)備相關(guān)的信息就必須要發(fā)起請求,請求主要有:USB標準請求(有一定的格式組成)、HID類請求等。
說到描述符,USB有標準描述符,分別是:設(shè)備描述符、配置描述符、接口描述符、端點描述符、字符串描述符
(可選),每個設(shè)備都必須要支持標準描述符,還有HID描述符,報告描述符,物理描述符等。
下面就是鼠標的枚舉過程,使用Bus Hound捕獲,具體怎么使用怎么看數(shù)據(jù)就不說了。
以上標紅字的部分是分析USB協(xié)議的基礎(chǔ)知識,可以說,沒了這些知識,別談分析了,壓根你就看不懂。
OK了,以后學習我再分享分享我的學習過程和學習想法。
本人菜雞一枚,有說錯的理解錯的望各位大佬指教。
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!