<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > 初學(xué)者USB技術(shù)入門總結(jié)

          初學(xué)者USB技術(shù)入門總結(jié)

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

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


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

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

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

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

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

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

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



          關(guān)鍵詞: USB技術(shù) 入門總結(jié)

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();