新聞中心

USB入門(mén)總結(jié)

作者: 時(shí)間:2012-04-18 來(lái)源:網(wǎng)絡(luò) 收藏
控(就是你往里面寫(xiě)固件程序的那個(gè)東西)會(huì)在要求設(shè)備進(jìn)行操作時(shí),產(chǎn)生一個(gè)相應(yīng)的中斷(我們可以用中斷的方式,也可以用查詢的方式,中斷的方式的好處就是主機(jī)有需要操作的都會(huì)叫你,而用查詢你必須不斷的問(wèn)主機(jī)“有事么”,這里采用中斷方式),比如主機(jī)給設(shè)備設(shè)置地址,主機(jī)會(huì)通過(guò)固定的通道(point0)發(fā)送一個(gè)‘設(shè)定地址’包,設(shè)備主控接到包后會(huì)產(chǎn)生中斷,并且把響應(yīng)的狀態(tài)保存在相應(yīng)的寄存器中,我們只要在中斷程序判斷各個(gè)寄存器就能完成主機(jī)的任務(wù)。
程序中藍(lán)色字是中斷類(lèi)型的判斷,其對(duì)應(yīng)的宏定義就不列出來(lái)了。如果是這個(gè)中斷就會(huì)執(zhí)行相應(yīng)的中斷操作。并且一次中斷只有一種中斷類(lèi)型,我們?cè)诿總€(gè)中斷響應(yīng)中加一段紅色字的程序,是為了保存每次中斷的狀態(tài),比如剛插上設(shè)備,來(lái)了一次BUSRESET總線復(fù)位中斷,就會(huì)進(jìn)入相應(yīng)的中斷操作,完了后記錄狀態(tài)test[conters]='!'; conters++;意思是進(jìn)入了這個(gè)中斷就在這一組數(shù)的當(dāng)前位置設(shè)成'!',并且位置記錄的變量加一,以便下一次記錄到下一個(gè)位置。這樣的過(guò)程我們就記錄了下來(lái),
下面看一下記錄結(jié)果(其中的數(shù)字和字母是響應(yīng)標(biāo)準(zhǔn)請(qǐng)求時(shí)的程序產(chǎn)生的這里不羅列程序了)。
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg

可以看到,一開(kāi)始是一次總線復(fù)位,然后 bus reset de-assert,然后再掛起總線。重復(fù)了兩次,然后就是上一節(jié)的具體配置了。
這節(jié)主要是對(duì)固件里的請(qǐng)求處理有個(gè)概念,還有就是調(diào)試的方法。


初涉USB,初學(xué)者USB(3) 數(shù)據(jù)包闡述

對(duì)于USB傳輸大體有個(gè)概念,下一步就來(lái)看看到底USB上傳的什么東西,以什么格式傳數(shù)據(jù),先不涉及端點(diǎn)的概念。
各種總線的數(shù)據(jù)傳輸都是以固定的層次協(xié)議進(jìn)行的,USB當(dāng)然也不例外。所謂的層次也只是個(gè)抽象的概念罷了,就是表達(dá)一種依附關(guān)系,上層要依賴(lài)與底層,上層以底層為基礎(chǔ),上層只需要關(guān)心自己的東西就行了,如果你還不明白,那就繼續(xù)看,學(xué)習(xí)一個(gè)東西不可能一兩句話說(shuō)的明白一個(gè)點(diǎn),需要全面了解后才能清楚各個(gè)點(diǎn)。
要實(shí)現(xiàn)兩個(gè)機(jī)器(機(jī)器的范圍比較廣,可以是電腦,交換機(jī),單片機(jī))的通信總是要有一個(gè)載體才可以,對(duì)于機(jī)器當(dāng)然是電平高低為載體,具體的說(shuō)機(jī)器甲要告訴機(jī)器乙一件事情(比如說(shuō)一條指令),那么機(jī)器甲可以通過(guò)一根線(串行數(shù)據(jù)總線)連到機(jī)器乙的一個(gè)IO口上,甲發(fā)送一個(gè)個(gè)的高低電平,乙固定時(shí)間檢測(cè)自己的這個(gè)IO口,然后逐個(gè)記錄下放到自己的緩沖里,這樣乙就收到甲送的數(shù)據(jù)了。上述就是一個(gè)簡(jiǎn)單的數(shù)據(jù)鏈路層(計(jì)算機(jī)網(wǎng)絡(luò)里這么叫)的描述,這一層要保證的就是甲發(fā)的每一位數(shù)據(jù),乙都可以正確及時(shí)的接受,并且對(duì)在傳輸過(guò)程中出錯(cuò)的數(shù)據(jù)做出反應(yīng)。其實(shí)比數(shù)據(jù)連路更底層的還有物理層,這就是真正的物理介質(zhì),對(duì)于機(jī)器就是電線了,數(shù)據(jù)就是電線上傳輸?shù)碾妷?USB是用的四線,兩個(gè)電源,兩個(gè)數(shù)據(jù)線。
這里也打個(gè)比方,比如人與人進(jìn)行交流,我們當(dāng)然是通過(guò)說(shuō)話了,物理層就是空氣和傳輸?shù)穆暡?,?shù)據(jù)鏈路層就是我們說(shuō)的每一個(gè)字,物理層就是空氣,負(fù)責(zé)把我們說(shuō)的話轉(zhuǎn)換成聲波傳給對(duì)方,數(shù)據(jù)鏈路層負(fù)責(zé)讓對(duì)方能正確的聽(tīng)到每個(gè)字,如果聽(tīng)的不清可以告訴對(duì)方重新說(shuō)一遍。
經(jīng)過(guò)上述的兩個(gè)底層,就可以保證每一位數(shù)據(jù)可以正確的傳到對(duì)方那里去。下一步的工作當(dāng)然是解析數(shù)據(jù)代表了什么,一般來(lái)說(shuō),數(shù)據(jù)都是以一串?dāng)?shù)為單位,一般稱(chēng)為一個(gè)包,機(jī)器間傳輸都是以一個(gè)包為單位傳出,就像人們說(shuō)話都是以一句話為單位輸出一樣。每一個(gè)包包含有許多位數(shù)據(jù),這些數(shù)據(jù)又分段表示不同的意義,如圖一,這是一個(gè)USB令牌階段的包,Sync是同步數(shù)據(jù)(相當(dāng)于說(shuō)話時(shí)先打個(gè)招呼,告訴對(duì)方要跟他說(shuō)話了),PID是包標(biāo)示(告訴對(duì)方這個(gè)包是干什么用的),ADDR是對(duì)方的地址(叫對(duì)方的名字),ENDP是用端點(diǎn)幾通訊(先不介紹這個(gè)),CRC5是校驗(yàn)位(判斷這個(gè)包是否在傳輸中出錯(cuò)),EOP是包結(jié)束。
|--------------------------------------------------------|
| Sync | PID | ADDR | ENDP | CRC5 | EOP |
|________________________________________________________|

圖一
USB的數(shù)據(jù)包又分為三種,一個(gè)是令牌包,一個(gè)是數(shù)據(jù)包,另一個(gè)是握手包。每一次的USB通訊事務(wù)處理都是以令牌包開(kāi)頭,告訴對(duì)方要跟誰(shuí)說(shuō)話,這句話是用來(lái)干嘛的。如果要求有數(shù)據(jù)傳輸,則下一步就是數(shù)據(jù)包,另外如果要求對(duì)方要有反饋,則會(huì)發(fā)出握手包。令牌包又簡(jiǎn)單的包括OUT,IN,STEP三種類(lèi)型,OUT是用于主機(jī)告訴設(shè)備主機(jī)要向USB設(shè)備發(fā)送數(shù)據(jù),IN是用于主機(jī)告訴設(shè)備要上傳數(shù)據(jù),而STEUP是用于主機(jī)向USB設(shè)備發(fā)送配置信息,在枚舉過(guò)程中會(huì)用到。另外數(shù)據(jù)包和握手包的具體格式什么的,可以參照詳細(xì)的協(xié)議。
可以看到在所以的通訊過(guò)程中,主機(jī)都是發(fā)起者,不管是主機(jī)發(fā)送數(shù)據(jù)到USB設(shè)備還是USB設(shè)備發(fā)送數(shù)據(jù)到主機(jī),都必須收主機(jī)控制。圖二為一次事務(wù)的過(guò)程

令牌階段 ——》 數(shù)據(jù)階段 ——》 握手階段

圖二
這個(gè)過(guò)程可以這樣描述,甲和乙對(duì)話,甲是老板,乙是職員。第一節(jié)已經(jīng)講過(guò)了,乙面試就是枚舉,在這個(gè)過(guò)程中,甲多段的發(fā)送STEP令牌包給乙,乙收到后如果要反饋數(shù)據(jù),就發(fā)數(shù)據(jù)包給甲,甲正確接收后,跟甲握握手,表示這次對(duì)話成功。
乙被正式錄取后,甲會(huì)分派任務(wù)(OUT),這時(shí)甲對(duì)乙說(shuō)有任務(wù)給你(令牌階段),然后乙就開(kāi)始聽(tīng),甲說(shuō)你的任務(wù)就是記錄數(shù)據(jù)并且上報(bào)(這段話就是數(shù)據(jù)包),乙說(shuō)好的(握手包)。
乙開(kāi)始正式工作,并且記錄數(shù)據(jù)。過(guò)了一段時(shí)間,甲開(kāi)始要求提交數(shù)據(jù)(IN),乙把數(shù)據(jù)報(bào)告給甲(數(shù)據(jù)階段),甲說(shuō)好(握手成功)。這里乙不能主動(dòng)的去向老板匯報(bào),只能被動(dòng)的干活。
上面已經(jīng)講USB主機(jī)和設(shè)備間數(shù)據(jù)傳輸?shù)倪^(guò)程,都是我個(gè)人理解,有不正確和不到位的大家提出,方便初學(xué)者理解,謝謝??

初涉USB,初學(xué)者USB(4)USB通訊設(shè)備快速開(kāi)發(fā)

經(jīng)過(guò)上述三節(jié)的描述,對(duì)USB應(yīng)該已經(jīng)有了初步的認(rèn)識(shí),其中具體的協(xié)議(比如各個(gè)描述符的定義什么的)這里不做描述了,網(wǎng)上一搜一大堆。下面我以一個(gè)實(shí)例來(lái)詳細(xì)說(shuō)明快速開(kāi)發(fā)USB設(shè)備的步驟,
一,設(shè)定規(guī)劃
凡事預(yù)則立,不預(yù)則費(fèi),所以開(kāi)發(fā)一個(gè)小小的USB也要稍微規(guī)劃一下,比如想象要實(shí)現(xiàn)什么功能,傳輸?shù)臄?shù)據(jù)協(xié)議什么的。
二,固件編程,
固件編程說(shuō)白了就是寫(xiě)單片機(jī)程序,要實(shí)現(xiàn)USB一般可以使用帶USB功能的單片機(jī),再個(gè)就是加一個(gè)專(zhuān)用的USB芯片。這里以內(nèi)部集成USB功能單片機(jī)為例
固件的USB開(kāi)發(fā)一般就是先使能USB,使能USB時(shí)鐘,使能各個(gè)USB控制中斷(掛起,復(fù)位,標(biāo)準(zhǔn)請(qǐng)求,寫(xiě)入,寫(xiě)出等)然后USB就能正常工作了,這時(shí)候不如不寫(xiě)別的東西,電腦就可以檢測(cè)出有USB設(shè)備插入了,具體的反應(yīng)是在設(shè)備管理器里會(huì)發(fā)現(xiàn)閃了一下說(shuō)明發(fā)現(xiàn)了新的USB設(shè)備,接下來(lái)電腦會(huì)發(fā)送各種標(biāo)準(zhǔn)請(qǐng)求,因?yàn)檫@個(gè)時(shí)候你的程序還沒(méi)寫(xiě)完整,對(duì)這些請(qǐng)求不會(huì)有反應(yīng),所以電腦不可能識(shí)別出是什么東西。
接下來(lái)的工作就是在中斷中響應(yīng)電腦傳來(lái)的各種標(biāo)準(zhǔn)請(qǐng)求。當(dāng)必



關(guān)鍵詞: USB 入門(mén)總結(jié)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉