新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 初涉USB,初學(xué)者USB入門總結(jié)4,USB通訊設(shè)備快速開發(fā)

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

作者: 時間:2016-12-14 來源:網(wǎng)絡(luò) 收藏
經(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ù)位,標(biāo)準(zhǔn)請求,寫入,寫出等)然后USB就能正常工作了,這時候不如不寫別的東西,電腦就可以檢測出有USB設(shè)備插入了,具體的反應(yīng)是在設(shè)備管理器里會發(fā)現(xiàn)閃了一下說明發(fā)現(xiàn)了新的USB設(shè)備,接下來電腦會發(fā)送各種標(biāo)準(zhǔn)請求,因為這個時候你的程序還沒寫完整,對這些請求不會有反應(yīng),所以電腦不可能識別出是什么東西。
接下來的工作就是在中斷中響應(yīng)電腦傳來的各種標(biāo)準(zhǔn)請求。當(dāng)必要的請求都被正確的響應(yīng)的話,這個時候如果電腦里有正確的驅(qū)動,電腦就會去加載這個驅(qū)動,如果是第一次插入這個設(shè)備,還要把驅(qū)動安裝一下,然后設(shè)備就進入正常工作了,電腦會顯示“這個USB已經(jīng)成功安裝并可以應(yīng)用了”。
這里捎帶著說一下端點(endpoint)的概念,一般一個USB設(shè)備都會有數(shù)個端點,端點就是一個數(shù)據(jù)緩沖控制區(qū)(FIFO),每個緩沖區(qū)相當(dāng)于有一個出口一個進口的池子,數(shù)據(jù)通過進口進入到池子,然后你再在固件里去用這些數(shù)據(jù)。固件往電腦寫數(shù)據(jù),也是把數(shù)據(jù)先放到池子里,然后打開出口,就可以干自己的事情,不用一個個的把數(shù)據(jù)發(fā)出了,池子的出口自動把數(shù)據(jù)流出。
一般的端口0是用來做標(biāo)準(zhǔn)請求響應(yīng)用的,也就是在枚舉階段用到。我一般把端口1定義為出(OUT),端口2定義為入(IN)(注意,這個OUT和IN是相對與電腦的,也就是說OUT是數(shù)據(jù)從電腦出去到設(shè)備,IN是設(shè)備的數(shù)據(jù)進入電腦)。這些定義也是在標(biāo)準(zhǔn)請求中去告訴電腦的。
接下來就可以實現(xiàn)與電腦的通訊了,你把數(shù)據(jù)放到相應(yīng)的池子里就行了。下面就可以自己定義通訊的數(shù)據(jù)格式了。比如控制開發(fā)板上的8個LED的第一個燈亮,那么上位機發(fā)送數(shù)據(jù)0x55,0x01,0x80,0xaa。我們就可以規(guī)定第一個數(shù)據(jù)是啟示位,遇到這個表明開始一次控制指令,0x01表示這個是控制燈亮暗的指令,0x80表示LED的控制數(shù)據(jù),最高位是1,表示第一個亮,其他位是0,表示都暗。最后一個數(shù)據(jù)是0xaa,表示這是結(jié)束。其實所謂的數(shù)據(jù)協(xié)議不過就是自己定義的一套讓通訊雙方都能正確理解對方的數(shù)據(jù)格式。電腦比較是電腦,什么都要規(guī)定好了,它才能正確的工作。
二驅(qū)動程序
對于快速開發(fā)用Driverstudio就可以了,我先裝了VC6.0,然后裝了DDK2600,最后裝了Driverstudio,網(wǎng)上有說這個順序不容易出問題,我也沒時間去試別的順序會出怎么樣的特效,姑且不管他是否在忽悠,先這樣按了沒壞處。
我一開始比較新潮的裝了DriverStudio3.2版本,然后按網(wǎng)上的方法破解了,生成了驅(qū)動是能打開設(shè)備,但是就是傳輸不了數(shù)據(jù),搞了兩天還是不行,后來想到是不是3.2版本太新了?或者破解沒完整?然后卸載了3.2裝了3.1,果然可以了,真不知道是Compuware做了手腳故意玩我還是本人愚笨弄錯了哪里。
驅(qū)動生成的步驟可以在百度,Google里搜“10分鐘完成一個USB驅(qū)動程序”能出來一


大堆,要是你嫌搜索麻煩就直接點這個算了http://www.4oa.com/Article/html/6/33/482/2005/17317.html按那個步驟操作就可以了,根據(jù)向?qū)Р僮魍炅艘院螅琕C就會出來一個驅(qū)動程序框架了,如果你在這個時候編譯一下就可你會碰到很多問題,我的操作是這樣的。首先把DDK的庫編譯一下,操作網(wǎng)上有,網(wǎng)上有云:
1.啟動Visual C++。
2.選擇菜單File|Open Workspace。打開位于DriverStudio/DriverWorks/Source/vdwlibs.dsw的工作空間文件。
3.選擇菜單Build|Batch Build,在彈出的對話框中選擇你想編譯的庫。
4.點擊Build編譯你選擇的庫。
然后在VC的Driverstudio的工具條點擊“change environment variables”,在第一個選型卡把DDK的路徑選上,我的是C:WINDDK2600。然后點OK,接下來點DriverStudio工具條的編譯,就可以了,如果你還是碰到問題,你可以把VC顯示的錯誤復(fù)制到百度。


評論


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

關(guān)閉