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