2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  基于FPGA技術(shù)實(shí)現(xiàn)USB通信——軟件</p><p>  【摘要】本設(shè)計(jì)能實(shí)現(xiàn)的功能:PC主機(jī)應(yīng)用程序通過USB接口模塊,對(duì)FPGA系統(tǒng)進(jìn)行控制,以實(shí)現(xiàn)語(yǔ)音信號(hào)的采集、存儲(chǔ)、回放,并且FPGA系統(tǒng)亦可通過USB接口模塊將相關(guān)的狀態(tài)信息回傳給PC主機(jī)應(yīng)用程序。本設(shè)計(jì)軟件結(jié)構(gòu)由四部分組成:PC主機(jī)應(yīng)用程序,USB接口模塊驅(qū)動(dòng)程序,USB接口模塊固件程序,F(xiàn)PGA系統(tǒng)控制程序。</p>

2、;<p>  【關(guān)鍵詞】應(yīng)用程序,USB,F(xiàn)PGA,語(yǔ)音</p><p>  USB Communication Based on FPGA —— Software</p><p>  Abstract: This Design can implement the following functions: PC Application Program can control

3、 the FPGA-System through the USB-Interface module, in order to sample, store and replay the sound signal , and also FPGA-System can send back the status signal to the PC Application Program. The software structure of thi

4、s design consist of 4 parts: PC Application Program, USB-Interface module Driver program, USB-interface module Firm program, FPGA-System control program.</p><p>  Key Words: Application Program, USB,F(xiàn)PGA, S

5、ound</p><p><b>  目 錄</b></p><p><b>  第一章 緒論1</b></p><p>  1.1 課題背景及意義1</p><p>  1.2 國(guó)內(nèi)外相關(guān)研究狀況2</p><p>  1.3 USB的特點(diǎn)3</p&g

6、t;<p>  1.4 系統(tǒng)軟件設(shè)計(jì)要求4</p><p>  1.5 系統(tǒng)基本方案4</p><p>  1.6 軟件設(shè)計(jì)主要內(nèi)容4</p><p>  第二章 軟件實(shí)現(xiàn)方案選擇論證5</p><p>  2.1 PC主機(jī)應(yīng)用程序設(shè)計(jì)實(shí)現(xiàn)方案5</p><p>  2.2 WIN

7、DOWS下USB設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)實(shí)現(xiàn)方案5</p><p>  2.3 USB設(shè)備固件設(shè)計(jì)實(shí)現(xiàn)方案5</p><p>  2.4 FPGA程序設(shè)計(jì)實(shí)現(xiàn)方案6</p><p>  第三章 PC主機(jī)應(yīng)用程序設(shè)計(jì)7</p><p>  3.1 開發(fā)環(huán)境VC++ 6.0簡(jiǎn)介7</p><p>  3.2

8、 API函數(shù) 簡(jiǎn)介7</p><p>  3.3 應(yīng)用程序控制界面設(shè)計(jì)7</p><p>  3.4 應(yīng)用程序設(shè)計(jì)8</p><p>  3.4.1 查找設(shè)備10</p><p>  3.4.2 打開設(shè)備12</p><p>  3.4.3 讀寫USB設(shè)備12</p><p&g

9、t;  3.4.4 關(guān)閉通信13</p><p>  第四章 USB接口模塊驅(qū)動(dòng)程序設(shè)計(jì)14</p><p>  4.1 驅(qū)動(dòng)程序開發(fā)14</p><p>  4.1.1 WDM驅(qū)動(dòng)程序的分層結(jié)構(gòu)14</p><p>  4.1.2 USB驅(qū)動(dòng)程序的WDM結(jié)構(gòu)16</p><p>  第五章

10、 USB接口模塊固件設(shè)計(jì)18</p><p>  5.1 PDIUSBD12與AT89S52 特性概述18</p><p>  5.1.1 PDIUSBD12特性概要18</p><p>  5.1.2 AT89S52 特性概要18</p><p>  5.2 USB通信協(xié)議重要概念概述19</p>&

11、lt;p>  5.2.1 端點(diǎn)19</p><p>  5.2.2 幀19</p><p>  5.2.3 上行與下行19</p><p>  5.2.4 USB的傳輸線結(jié)構(gòu)19</p><p>  5.2.5 USB的編碼方案20</p><p>  5.2.6 USB的數(shù)據(jù)格式20&l

12、t;/p><p>  5.2.6.1 域20</p><p>  5.2.6.2 包21</p><p>  5.2.6.3 事務(wù)21</p><p>  5.2.6.4 傳輸23</p><p>  5.3 USB固件程序設(shè)計(jì)23</p><p>  第六章 FPGA語(yǔ)音采集與

13、回放程序設(shè)計(jì)26</p><p>  6.1 FPGA語(yǔ)音采集、存儲(chǔ)、回放控制程序設(shè)計(jì)26</p><p>  6.1.1 ADC0809語(yǔ)音采集控制程序設(shè)計(jì)26</p><p>  6.1.2 語(yǔ)音數(shù)據(jù)存儲(chǔ)器設(shè)計(jì)26</p><p>  6.1.3 DAC0832語(yǔ)音回放控制程序設(shè)計(jì)27</p>&l

14、t;p>  6.1.4 地址與控制總線選擇器設(shè)計(jì)28</p><p>  6.1.5 FPGA系統(tǒng)設(shè)計(jì)總體框圖29</p><p>  第七章 系統(tǒng)調(diào)試30</p><p>  7.1 主機(jī)應(yīng)用程序與USB接口模塊程序聯(lián)調(diào)30</p><p>  7.2 FPGA系統(tǒng)調(diào)試30</p><p>

15、  7.3 整機(jī)系統(tǒng)調(diào)試30</p><p><b>  總結(jié)31</b></p><p><b>  致謝32</b></p><p><b>  參考文獻(xiàn)33</b></p><p><b>  附錄34</b></p>&l

16、t;p><b>  第一章 緒論 </b></p><p>  1.1 課題背景及意義 </p><p>  USB總線(Universal Serial Bus)翻譯為中文就是通用串行總線,由Compaq,DEC,IBM,Inter,Microsoft,NEC和Northen Telecom等公司為簡(jiǎn)化PC與外設(shè)之間的互連而共同研究開發(fā)的一種免費(fèi)的標(biāo)準(zhǔn)化連

17、接協(xié)議,它支持各種PC與外設(shè)之間的連接,還可實(shí)現(xiàn)數(shù)字多媒體集成。作為一種新興的通用接口,USB已經(jīng)可以在所有類型的計(jì)算機(jī)上代替現(xiàn)有接口來(lái)連接低、中、高速標(biāo)準(zhǔn)的外設(shè)。</p><p>  一直以來(lái),作為電腦連接外圍設(shè)備通道—接口,一直就沒有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)。1994年,由上述幾家世界著名的計(jì)算機(jī)和通訊公司成立了USB論壇;1995年11月正式制定了USB 0.9通用串行總線規(guī)范,自從通用串行總線(USB)推出以來(lái),U

18、SB很快就成為了PC機(jī)事實(shí)上的外部通訊標(biāo)準(zhǔn)。</p><p>  USB當(dāng)初的設(shè)計(jì)構(gòu)想是,將這些接口統(tǒng)一起來(lái),使用一個(gè)4針插頭作為標(biāo)準(zhǔn)插頭。更重要的是它還整合了電源線和數(shù)據(jù)線,其中兩根芯線用于提供最低最高達(dá)500mA的電力,另外兩根芯線用于數(shù)據(jù)通訊。這樣,很多外設(shè)就不再需要另外提供電源,只需要通過計(jì)算機(jī)的USB接口就能實(shí)現(xiàn)向外設(shè)供電,用戶也就不再需要為每一個(gè)外設(shè)都預(yù)留下一個(gè)電源插口,大大方便了用戶的使用;而且它還

19、支持最多127個(gè)外設(shè)的同時(shí)串聯(lián)。 </p><p>  隨著USB設(shè)備種類的增多,1997年,真正符合USB1.1技術(shù)規(guī)范的技術(shù)標(biāo)準(zhǔn)的外設(shè)出現(xiàn)了,USB逐步走進(jìn)了實(shí)用階段。盡管USB有許多優(yōu)秀的特質(zhì),但它同時(shí)也被許多問題困擾著。所面臨的主要問題是,速度仍然不夠快,USB1.1版的最高速度為12Mbps,因此當(dāng)連接設(shè)備多了時(shí),帶寬共享導(dǎo)致每個(gè)設(shè)備得到的有效帶寬太小。所以USB所應(yīng)用的范圍仍然很窄,針對(duì)于這些缺點(diǎn),經(jīng)

20、過改進(jìn)的USB2.0規(guī)范誕生了。 </p><p>  1999年初在Intel的開發(fā)者論壇大會(huì)上,與會(huì)者介紹了USB 2.0規(guī)范,該規(guī)范的支持者除了原有的Intel、Microsoft和NEC等成員外,還有惠普、朗訊和飛利浦三個(gè)新成員。1999年10月,正式制定了USB2.0通用串行總線規(guī)范,2001年11月Comdex展覽上,基于USB 2.0的外設(shè)產(chǎn)品系統(tǒng)如USB 2.0界面擴(kuò)充卡、外接式硬盤、外接式刻錄機(jī)

21、等產(chǎn)品開始出現(xiàn)。</p><p>  隨著時(shí)間的推移,USB已成為PC的標(biāo)準(zhǔn)配置?;赨SB的外設(shè)越來(lái)越多,現(xiàn)在可以直接使用Windows ME默認(rèn)驅(qū)動(dòng)的外設(shè)就有:調(diào)制解調(diào)器,鍵盤,鼠標(biāo),光驅(qū),數(shù)碼相機(jī),活動(dòng)硬盤,手柄,軟驅(qū),掃描儀等,而非獨(dú)立性I/O連接的外設(shè)將日漸減少。即主機(jī)控制式外設(shè)減少,智能軟件控制的外設(shè)增多。</p><p>  1.2 國(guó)內(nèi)外相關(guān)研究狀況 </p>

22、<p>  2008年11月18日,由Intel、微軟、惠普、德州儀器、NEC、ST-NXP等業(yè)界巨頭組成的USB 3.0 Promoter Group宣布,該組織負(fù)責(zé)制定的新一代USB 3.0標(biāo)準(zhǔn)已經(jīng)正式完成并公開發(fā)布。新規(guī)范提供了十倍于USB 2.0的傳輸速度和更高的節(jié)能效率,可廣泛用于PC外圍設(shè)備和消費(fèi)電子產(chǎn)品。</p><p>  制定完成的USB 3.0標(biāo)準(zhǔn)已經(jīng)移交給該規(guī)范的管理組織USB

23、 Implementers Forum(簡(jiǎn)稱USB-IF)。該組織將與硬件廠商合作,共同開發(fā)支持USB 3.0標(biāo)準(zhǔn)的新硬件,不過實(shí)際產(chǎn)品上市還要等一段時(shí)間。</p><p>  第一版USB 1.0是在1996年出現(xiàn)的,速度只有1.5Mb/s;兩年后升級(jí)為USB 1.1,速度也大大提升到12Mb/s,至今在部分舊設(shè)備上還能看到這種標(biāo)準(zhǔn)的接口;2

24、000年4月,目前廣泛使用的USB 2.0推出,速度達(dá)到了480Mb/s,是USB 1.1的四十倍;如今八個(gè)半年頭過去了,USB 2.0的速度早已經(jīng)無(wú)法滿足應(yīng)用需要,USB 3.0也就應(yīng)運(yùn)而生,最大傳輸帶寬高達(dá)5.0Gb/s,也就是625MB/s,同時(shí)在使用A型的接口時(shí)向下兼容。 IEEE組織最近也批準(zhǔn)了新規(guī)范IEEE1394-2008,不過新版FireWire的傳輸速度只有3.2Gb/s,相當(dāng)于USB 3.0的60%多一點(diǎn)。難怪蘋果等

25、業(yè)界廠商普遍對(duì)該技術(shù)失去了興趣。</p><p>  USB 2.0基于半雙工二線制總線,只能提供單向數(shù)據(jù)流傳輸,而USB 3.0采用了對(duì)偶單純形四線制差分信號(hào)線,故而支持雙向并發(fā)數(shù)據(jù)流傳輸,這也是新規(guī)范速度猛增的關(guān)鍵原因。</p><p>  除此之外,USB 3.0還引入了新的電源管理機(jī)制,支持待機(jī)、休眠和暫停等狀態(tài)。測(cè)量?jī)x器大廠泰克(Tektronix)在上個(gè)月第一家宣布了用于USB

26、 3.0的測(cè)試工具,可以幫助開發(fā)人員驗(yàn)證新規(guī)范與硬件設(shè)計(jì)之間的兼容性。</p><p>  USB 3.0在實(shí)際設(shè)備應(yīng)用中將被稱為“USB SuperSpeed”,順應(yīng)此前的USB 1.1 FullSpeed和USB 2.0 HighSpeed。預(yù)計(jì)支持新規(guī)范的商用控制器將在2009年下半年面世,消費(fèi)級(jí)產(chǎn)品則有望在2010年上市。</p><p>  1.3 USB的特點(diǎn)</p&

27、gt;<p>  USB總線與傳統(tǒng)的外圍總線接口相比,主要有以下一些特點(diǎn):</p><p><b>  (1)傳輸速度快:</b></p><p>  USB有低速(Low-Speed)、全速(Full-Speed)和高速(High-Speed)三種傳輸模式,傳輸速率分別為1.5Mbps、12Mbps和480Mbps,可以靈活選擇以適應(yīng)各種不同類型外設(shè)的

28、需求。</p><p> ?。?)安裝配置簡(jiǎn)單快捷:</p><p>  USB設(shè)備支持即插即用(Plug and Play)和熱插拔(Hot Plug)功能。USB連接器將各種各樣的外設(shè)I/O端口合而為一,使之可熱插拔,并具有自動(dòng)配置能力。在電腦正常工作時(shí),用戶只要簡(jiǎn)單地將外設(shè)插入到PC的USB總線上, PC就能自動(dòng)識(shí)別所連接的是什么設(shè)備, 并動(dòng)態(tài)的加載驅(qū)動(dòng)程序,而無(wú)須關(guān)機(jī)斷電或重新啟動(dòng)

29、,打開機(jī)箱等操作,實(shí)現(xiàn)真正的即插即用。</p><p> ?。?)供電方式靈活,總線結(jié)構(gòu)簡(jiǎn)單</p><p>  USB總線自身能夠提供5V電壓,最大500mA電流。同時(shí),也可以由外部供電,或使用兩種供電方式的組合,并且支持掛起和喚醒模式??偩€結(jié)構(gòu)簡(jiǎn)單,信號(hào)定義僅由2條電源線,2條信號(hào)線組成。</p><p> ?。?)良好的兼容性:</p><

30、p>  USB接口標(biāo)準(zhǔn)有良好的向下兼容性,例如USB2.0就能很好的兼容USB1.1的外設(shè)。系統(tǒng)會(huì)自動(dòng)偵測(cè)外設(shè)接口的版本,并自動(dòng)選擇傳輸速度。</p><p> ?。?)使用和擴(kuò)展靈活:</p><p>  為了適應(yīng)各種不同類型外設(shè)的要求,USB提供了四種不同的數(shù)據(jù)傳輸模式。增加外設(shè)時(shí)無(wú)需在PC內(nèi)添加接口卡,多個(gè)USB集線器可相互傳送數(shù)據(jù),使PC可以用全新的方式控制外設(shè)。使用USB

31、Hub可以同時(shí)連接多達(dá)127個(gè)外設(shè)。</p><p><b> ?。?)廣泛的應(yīng)用</b></p><p>  1.4 系統(tǒng)軟件設(shè)計(jì)要求</p><p> ?。?)通過大規(guī)??删幊绦酒現(xiàn)PGA完成對(duì)數(shù)據(jù)的實(shí)時(shí)處理、并進(jìn)行轉(zhuǎn)換,以便進(jìn)行數(shù)據(jù)傳輸。</p><p> ?。?)編寫下載到USB芯片中的固件程序,完成對(duì)電路時(shí)序

32、的控制,實(shí)現(xiàn)數(shù)據(jù)從硬件電路到計(jì)算機(jī)之間的傳輸。</p><p> ?。?)開發(fā)在Windows下的驅(qū)動(dòng)程序和應(yīng)用程序,完成數(shù)據(jù)的存儲(chǔ)、分析及顯示等功能。</p><p>  1.5 系統(tǒng)基本方案</p><p>  系統(tǒng)確定的基本方案:PC主機(jī)控制程序與USB接口模塊進(jìn)行通信,并通過USB接口模塊控制FPGA進(jìn)行語(yǔ)音的采集、存儲(chǔ)、回放。</p>&l

33、t;p>  系統(tǒng)框圖如圖1_5-1所示:</p><p>  圖1_5-1 系統(tǒng)框圖</p><p>  1.6 軟件設(shè)計(jì)主要內(nèi)容</p><p>  本系統(tǒng)軟件主要由以下四個(gè)部分組成:</p><p> ?。?)PC主機(jī)應(yīng)用程序設(shè)計(jì)</p><p> ?。?)USB接口模塊WINDOWS驅(qū)動(dòng)程序設(shè)計(jì)</

34、p><p> ?。?)USB接口模塊固件設(shè)計(jì)</p><p> ?。?)FPGA模塊語(yǔ)音采集,存儲(chǔ),回放控制程序設(shè)計(jì)</p><p>  第二章 軟件實(shí)現(xiàn)方案選擇論證</p><p>  2.1 PC主機(jī)應(yīng)用程序設(shè)計(jì)實(shí)現(xiàn)方案</p><p>  方案一:采用Visual Basic編程</p><

35、p>  VB是Visual Basic,是微軟的比爾蓋茨發(fā)明的,專為編程初學(xué)者設(shè)計(jì),界面友好。但VB是不夠完全的面向?qū)ο缶幊坦ぞ?,屬本地編譯語(yǔ)言,其效率相對(duì)VC低了很多。</p><p>  方案二:采用Visual C++編程</p><p>  VC++是在Windows平臺(tái)下構(gòu)建32位應(yīng)用程序的強(qiáng)大而有復(fù)雜的開發(fā)工具,是目前世界上使用最多的開發(fā)工具之一。VC++的應(yīng)用非常廣泛,

36、從桌面應(yīng)用程序到服務(wù)器端軟件,從系統(tǒng)軟件到應(yīng)用軟件,從單機(jī)程序到分布式應(yīng)用程序,VC++無(wú)所不在。 VC++是完全面向?qū)ο蟮木幊坦ぞ?,VC++效率高,封裝性好,繼承性高。掌握VC++編程,對(duì)于電子專業(yè)人員而言也是非常必要的。</p><p><b>  綜上,選擇方案二。</b></p><p>  2.2 WINDOWS下USB設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)實(shí)現(xiàn)方案<

37、/p><p>  方案一: 采用DDK進(jìn)行驅(qū)動(dòng)程序開發(fā)</p><p>  DDK是Device Development Kit——設(shè)備開發(fā)包,是由微軟提供的專業(yè)的設(shè)備驅(qū)動(dòng)程序開發(fā)包,里面有很多驅(qū)動(dòng)程序開發(fā)的例子。但對(duì)于剛接觸USB設(shè)備驅(qū)動(dòng)程序開發(fā)的人員而言,有點(diǎn)博大精深。</p><p>  方案二:采用DriverStudio進(jìn)行驅(qū)動(dòng)程序開發(fā)</p>

38、<p>  DriverStudio是Numega公司提供的驅(qū)動(dòng)程序開發(fā)工具,它提供對(duì)USB總線的封裝,大大簡(jiǎn)化了對(duì)USB總線的操作接口。DriverStudio中的DriverWorks軟件為開發(fā)WDM程序提供了一個(gè)完整的框架,相比于DDK驅(qū)動(dòng)程序的開發(fā)會(huì)比較簡(jiǎn)單。</p><p><b>  綜上,采用方案二。</b></p><p>  2.3 US

39、B設(shè)備固件設(shè)計(jì)實(shí)現(xiàn)方案</p><p>  方案一:采用匯編語(yǔ)言進(jìn)行固件程序開發(fā)</p><p>  匯編語(yǔ)言有執(zhí)行效率高的優(yōu)點(diǎn),但其可移植性和可讀性差,以及它本身就是一種編程,效率低下的低級(jí)語(yǔ)言,這些都使它的編程和維護(hù)極不方便,從而導(dǎo)致整個(gè)系統(tǒng)的可靠性也較差。</p><p>  方案二:采用C語(yǔ)言進(jìn)行固件程序開發(fā)</p><p>  使用

40、C語(yǔ)言進(jìn)行嵌入式系統(tǒng)的開發(fā),有著匯編語(yǔ)言編程不可比擬的優(yōu)勢(shì)。其優(yōu)勢(shì)主要是:編程調(diào)試靈活方便,生成的代碼編譯效率高,完全模塊化,可移植性好,便于項(xiàng)目維護(hù)管理等。</p><p><b>  綜上,采用方案二。</b></p><p>  2.4 FPGA程序設(shè)計(jì)實(shí)現(xiàn)方案</p><p>  方案一:采用Verilog 語(yǔ)言進(jìn)行開發(fā)</p&

41、gt;<p>  產(chǎn)業(yè)界Verilog比較流行,其語(yǔ)法比較自由。Verilog HDL 推出已經(jīng)有 20 年了,擁有廣泛的設(shè)計(jì)群體,成熟的資源也比 VHDL 豐富。 Verilog 更大的一個(gè)優(yōu)勢(shì)是:它非常容易掌握,只要有 C 語(yǔ)言的編程基礎(chǔ),通過比較短的時(shí)間,經(jīng)過一些實(shí)際的操作,可以在 2 ~ 3 個(gè)月內(nèi)掌握這種設(shè)計(jì)技術(shù)</p><p>  方案二:采用VHDL語(yǔ)言進(jìn)行開發(fā)</p>

42、<p>  目前,高校教學(xué)主要采用VHDL,其語(yǔ)法比較嚴(yán)謹(jǐn)。VHDL語(yǔ)言具有很強(qiáng)的電路描述和建模能力,能從多個(gè)層次對(duì)數(shù)字系統(tǒng)進(jìn)行建模和描述,從而大大簡(jiǎn)化了硬件設(shè)計(jì)任務(wù),提高了設(shè)計(jì)效率和可靠性。VHDL具有與具體硬件電路無(wú)關(guān)和雨設(shè)計(jì)平臺(tái)無(wú)關(guān)的特性,并且具有良好的電路行為描述和系統(tǒng)描述的能力,并在語(yǔ)言易讀性和層次化、結(jié)構(gòu)化方面,表現(xiàn)了強(qiáng)大的生命力和應(yīng)用潛力。本人對(duì)VHDL語(yǔ)法與設(shè)計(jì)流程也比較熟悉,固以VHDL為首選。</p&

43、gt;<p><b>  綜上,選擇方案二。</b></p><p>  第三章 PC主機(jī)應(yīng)用程序設(shè)計(jì)</p><p>  3.1 開發(fā)環(huán)境VC++ 6.0簡(jiǎn)介</p><p>  本設(shè)計(jì)應(yīng)用程序的開發(fā)采用VC++ 6.0,VC++是在Windows平臺(tái)下構(gòu)建32位應(yīng)用程序的強(qiáng)大而有復(fù)雜的開發(fā)工具,VC++是微軟公司開發(fā)的一

44、個(gè)IDE(集成開發(fā)環(huán)境), 是目前世界上使用最多的開發(fā)工具之一。</p><p>  VC++應(yīng)用程序的開發(fā)主要有兩種模式,一種是WIN API方式,另一種則是MFC方式,傳統(tǒng)的WIN API開發(fā)方式比較繁瑣,而MFC則是對(duì)WIN API再次封裝。</p><p>  3.2 API函數(shù) 簡(jiǎn)介</p><p>  API——Application Program

45、ming Interface(應(yīng)用程序接口)函數(shù),這些函數(shù)是Windows提供給應(yīng)用程序編程的接口,也就是系統(tǒng)提供的函數(shù),主要的函數(shù)都在Windows.h頭文件中進(jìn)行了聲明。</p><p>  Windows操作系統(tǒng)提供了1000多種的API函數(shù),API函數(shù)名大都是有意義的單詞的組合,每個(gè)單詞的首字母大寫,這些函數(shù)的準(zhǔn)確拼寫與調(diào)用語(yǔ)法都可以再M(fèi)SDN中查找到。</p><p>  3.3

46、 應(yīng)用程序控制界面設(shè)計(jì) </p><p>  本系統(tǒng)控制界面 設(shè)計(jì)如圖3_3-1所示:</p><p>  圖3_3-1 語(yǔ)音采集與回放系統(tǒng)控制界面</p><p>  3.4 應(yīng)用程序設(shè)計(jì) </p><p>  在Win32系統(tǒng)中,把每一個(gè)設(shè)備都抽象為文件,此時(shí)的應(yīng)用程序只需通過幾條簡(jiǎn)單的文件操作API函數(shù),就可以實(shí)現(xiàn)與驅(qū)動(dòng)程序中某個(gè)設(shè)

47、備通信。一個(gè)驅(qū)動(dòng)程序可以驅(qū)動(dòng)多個(gè)設(shè)備,并且此驅(qū)動(dòng)程序可能為Windows系統(tǒng)中已有的,也可能為用戶安裝的。</p><p>  通常,這些Win32 API函數(shù)有以下幾種:</p><p>  CreateFile函數(shù). 打開一個(gè)設(shè)備,返回一個(gè)與設(shè)備相關(guān)的句柄。該函數(shù)的聲明形勢(shì)如下:</p><p>  HANDLE CreateFile(</p>

48、<p>  LPCTSTR lpFileName, //要打開的設(shè)備名</p><p>  DWORD dwDesiredAccess, //訪問模式</p><p>  DWORD dwShareMode, //共享模式</p><p>  LPSECURITY_ATTRIBUTES

49、lpSecurityAttributes, //通常為NULL</p><p>  DOWRD dwCreationDistribution, // 創(chuàng)建方式</p><p>  DOWRD dwFlagsAndAttributes, //文件屬性和標(biāo)志</p><p>  HANDLE hTemplateFile

50、 //臨時(shí)文件的句柄,通常為NULL</p><p><b>  );</b></p><p>  如果調(diào)用成功,該函數(shù)返回打開設(shè)備的句柄。</p><p>  ReadFile函數(shù)。 從設(shè)備中讀取數(shù)據(jù),該函數(shù)的聲明形式如下:</p><p>  BOOL ReadFile( </p><p&g

51、t;  HANDLE hCom, //設(shè)備句柄</p><p>  LPVOID lpBuffer, //指向接收緩沖區(qū)的指針</p><p>  DWORD nNumberOfByteToRead, //指向所要讀的字節(jié)數(shù)</p><p>  LPWORD lpNumberOfBytesRead,

52、 //指向調(diào)用該函數(shù)讀出的字節(jié)數(shù)</p><p>  LPOVERLAPPED lpOverlapped //異步結(jié)構(gòu)</p><p><b>  );</b></p><p>  WriteFile 函數(shù),向設(shè)備寫數(shù)據(jù),該函數(shù)聲明形式如下:</p><p>  BOOL WriteFile(</p

53、><p>  HANDLE hCom, //設(shè)備句柄</p><p>  LPCVOID lpBuffer, //指向讀數(shù)據(jù)緩沖區(qū)</p><p>  DWORD nNUMBEROfBytesToWrite, //所讀的字節(jié)數(shù)</p><p>  LPDW

54、ORD lpNumberOfBytesWritten , //指向已讀入的字節(jié)數(shù)</p><p>  LPOVERLAPPED lpOverlapped //異步結(jié)構(gòu)</p><p><b>  );</b></p><p>  其中,參數(shù)hCom為CreateFile函數(shù)所打開的串口句柄。</p><

55、p> ?。?)DeviceControl函數(shù)。對(duì)設(shè)備進(jìn)行一些自定義的操作,比如更改設(shè)備等。該函數(shù)的聲明形式如下:</p><p>  BOOL DeviceControl(</p><p>  HANDLE hDevie, //設(shè)備句柄</p><p>  DWORD dwIoControlCode, //所要執(zhí)行的操作

56、命令碼</p><p>  LPVOID lpInBuffer, //輸入緩沖區(qū)</p><p>  DWORD nInBufferSize, //輸入緩沖區(qū)空間大小</p><p>  LPVOID lpOutBuffer, //接收緩沖區(qū)</p><p>  

57、DWORD nOutBufferSize, //接收緩沖區(qū)空間</p><p>  LPDWORD lpBytesReturned, //實(shí)際所需接收數(shù)據(jù)個(gè)數(shù)</p><p>  LPOVERLAPPED lpOverlapped //異步結(jié)構(gòu)</p><p><b>  );</b></p>

58、;<p>  其中,參數(shù)hDevice為CreateFile函數(shù)所打開的串口句柄。</p><p> ?。?)CloseFile函數(shù),關(guān)閉一個(gè)由CreateFile打開的設(shè)備。該函數(shù)聲明形式如下:</p><p>  BOOL CloseHandle(HANDLE hCom);</p><p>  其中,參數(shù)hCom為CreateFile函數(shù)多所打開

59、的串口句柄。</p><p>  這些函數(shù)的執(zhí)行,都對(duì)應(yīng)著驅(qū)動(dòng)程序的一些分發(fā)例程。表3_4-1是常用API函數(shù)和驅(qū)動(dòng)程序的IRP對(duì)應(yīng)關(guān)系表。</p><p>  表3_4-1 常用API函數(shù)和驅(qū)動(dòng)程序的IRP對(duì)應(yīng)關(guān)系</p><p>  3.4.1 查找設(shè)備</p><p>  利用CreateFile函數(shù)打開一個(gè)串口,通??捎靡韵鲁绦?qū)崿F(xiàn)

60、:</p><p>  HANDLE hCom</p><p>  HCOM=CreateFile( “COM1”, //設(shè)備名</p><p>  GENERIC_READ | GENERIC_WRITE, //允許讀和寫</p><p>  0,

61、 //獨(dú)占方式</p><p><b>  NULL,</b></p><p>  OPEN_EXISTING, // 打開而不是創(chuàng)建</p><p>  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, //重疊方式</p><p>

62、;<b>  NULL</b></p><p><b>  );</b></p><p> ?。?) 獲取設(shè)備信息</p><p>  一個(gè)應(yīng)用程序與某個(gè)設(shè)備的驅(qū)動(dòng)程序通信前,一定要獲取此設(shè)備的獨(dú)特標(biāo)識(shí)符(GUID)。GUID是一個(gè)128位的值,它表征了唯一一個(gè)設(shè)備對(duì)象。在實(shí)際開發(fā)中,可以在編寫設(shè)備驅(qū)動(dòng)程序時(shí)獲得該設(shè)備的G

63、UID,也可以通過API函數(shù)調(diào)用獲得。</p><p>  可以調(diào)用Windows設(shè)備管理函數(shù)SetupDiGetClassDevs來(lái)獲取的信息集。該函數(shù)的聲明如下:</p><p>  HDEVINFO SetupDiGetClassDevs(</p><p>  IN LPGUID ClassGuid, OPTIONAL</p><p&g

64、t;  IN PCTSTR Enumerator, OPTIONAL</p><p>  IN HWND HwndParent, OPTIONAL</p><p>  IN DWORD Flags</p><p><b>  );</b></p><p>  (2) 識(shí)別接口信息</p><p&g

65、t;  SetupDiEnumDeviceInterface函數(shù)返回設(shè)備信息集的一個(gè)設(shè)備接口元素的環(huán)境結(jié)構(gòu),每次調(diào)用該函數(shù)返回一個(gè)設(shè)備接口的信息。可以重復(fù)調(diào)用此函數(shù),直至獲取了設(shè)備信息集中所有的設(shè)備的接口信息。該函數(shù)的聲明如下:</p><p>  BOOLEAN SetupDiEnumDeviceInterface(</p><p>  IN HDEVINFO DeviceInfoSe

66、t,</p><p>  IN PSP_DEVINFO_DATA DeviceInfoData,OPTIONAL</p><p>  IN LPGUID InterfaceCalssGuid,</p><p>  IN DWORD MemberIndex,</p><p>  OUT PSSP_DEVICE_INTERFACE_DATA

67、 DeviceInterfaceData);</p><p>  (3) 獲得設(shè)備路徑名</p><p>  在調(diào)用上一個(gè)函數(shù)SetupDiEnumDeviceInterface時(shí),獲得了一個(gè)DeviceInfoData結(jié)構(gòu)。該結(jié)構(gòu)指向標(biāo)識(shí)一個(gè)請(qǐng)求設(shè)備的接口。為了得到該接口的詳細(xì)信息,可以通過調(diào)用函數(shù)SetupDiEnumDeviceInterfaceDetail來(lái)實(shí)現(xiàn)。此時(shí),返回該接口

68、的詳細(xì)信息中包含了設(shè)備接口的名稱。用戶的首要任務(wù)就得到解決。SetupDiEnumDeviceInterfaceDetail函數(shù)的聲明如下:</p><p><b>  BOOLEAN </b></p><p>  SetupDiEnumDeviceInterfaceDetail(</p><p>  IN HDDEVINFO Device

69、InfoSet,</p><p>  IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,</p><p>  OUT PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailDATA,</p><p>  IN DWORD DeviceInterfac

70、eDetalDatasize,</p><p>  OUT PDWORD RequirdSize,</p><p>  OUT PSP_DEVINFO_DATA DeviceInfoData);</p><p>  3.4.2 打開設(shè)備</p><p>  有了打開設(shè)備的路徑名,下一步的任務(wù)就是打開該設(shè)備,獲得這個(gè)設(shè)備的句柄。如前所

71、述,打開一個(gè)設(shè)備是通過調(diào)用API函數(shù)CreateFile來(lái)實(shí)現(xiàn)的。</p><p>  當(dāng)需要與所打開的USB設(shè)備通信時(shí),還必須打開相應(yīng)的USB端口。</p><p>  3.4.3 讀寫USB設(shè)備</p><p>  對(duì)于應(yīng)用程序來(lái)說,讀寫USB端口與讀寫串口并無(wú)什么的區(qū)別。在用ReadFile和WriteFile讀寫USB設(shè)備時(shí),既可以同步執(zhí)行,也可異步執(zhí)行。

72、在同步執(zhí)行時(shí),函數(shù)知道操作完成才返回。這意味著在同步執(zhí)行時(shí)線程會(huì)被阻塞,從而導(dǎo)致效率下降。在異步執(zhí)行時(shí),即使操作還為完成,調(diào)用的函數(shù)也會(huì)立即返回。費(fèi)時(shí)的I/O操作在后臺(tái)進(jìn)行,這樣線程就可以干別的事情。</p><p>  ReadFile()函數(shù)和WriteFile()函數(shù)是否執(zhí)行異步操作有CreateFile()函數(shù)決定的。如果在調(diào)用CreateFile()創(chuàng)建句柄是指定了FILE_FLAG_OVERLAPPE

73、D標(biāo)志,調(diào)用ReadFile( )和WriteFile()對(duì)該句柄進(jìn)行的讀寫操作可以是異步,如果未指定異步標(biāo)志,則讀寫操作是同步。</p><p>  異步操作結(jié)構(gòu)聲明如下:</p><p>  typedef struct _OVERLAPPED{</p><p>  DWORD Internal,</p><p>  DWORD In

74、teralHigh,</p><p>  DWORD Offset,</p><p>  HANDLE hEvent,</p><p><b>  }</b></p><p>  OVERLAPPED;</p><p>  3.4.4 關(guān)閉通信</p><p>  和關(guān)閉

75、串口一樣,關(guān)閉USB端口也是調(diào)用CloseHandle()函數(shù)來(lái)完成。函數(shù)調(diào)用形式如下:</p><p>  CloseHandle(hComn);</p><p>  第四章 USB接口模塊驅(qū)動(dòng)程序設(shè)計(jì)</p><p>  本設(shè)計(jì)不屬于Windows的標(biāo)準(zhǔn)設(shè)備,故要自己設(shè)計(jì)驅(qū)動(dòng)程序。USB的驅(qū)動(dòng)開發(fā)是一個(gè)技術(shù)難點(diǎn),也是一個(gè)技術(shù)核心。</p><

76、;p>  Windows的驅(qū)動(dòng)開發(fā)需要安裝的開發(fā)軟件有:</p><p><b>  1)Win DDK</b></p><p>  2)DriverStudio3.2</p><p>  3)VC++ 6.0</p><p>  4.1 驅(qū)動(dòng)程序開發(fā)</p><p>  Windows環(huán)境

77、下驅(qū)動(dòng)程序共有三類:</p><p>  一類是Vxd虛擬設(shè)備驅(qū)動(dòng)程序,起源于 Windows 3.1時(shí)代,用于Windows95/98操作想系統(tǒng)中。</p><p>  一類是KMD內(nèi)核模式驅(qū)動(dòng)程序,用于WindowsNT下。</p><p>  還有一類是WDM—Win32驅(qū)動(dòng)程序模型,是微軟從Windows98開始,推出的一個(gè)新的驅(qū)動(dòng)類型,它是一個(gè)跨平臺(tái)的驅(qū)動(dòng)

78、程序模型,WDM驅(qū)動(dòng)程序還可以在不修改源代碼的情況下經(jīng)過重新編譯后在非Intel平臺(tái)下運(yùn)行。</p><p>  WDM在NT4.0驅(qū)動(dòng)程序結(jié)構(gòu)上發(fā)展起來(lái),所以它與NT4.0的驅(qū)動(dòng)程序極為相似,但是它卻有了本質(zhì)上的提高,增加了對(duì)即插即用、高級(jí)電源管理、Windows管理接口的支持。更重要的是,WDM是一種通用的驅(qū)動(dòng)模式,提供了包括USB、IEEE1394和HID等在內(nèi)的一系列驅(qū)動(dòng)程序類。</p>&

79、lt;p>  4.1.1 WDM驅(qū)動(dòng)程序的分層結(jié)構(gòu)</p><p>  WDM體系結(jié)構(gòu)實(shí)行分層處理,典型的分層:高層驅(qū)動(dòng)程序、中間層驅(qū)動(dòng)程序、底層驅(qū)動(dòng)程序。每層驅(qū)動(dòng)再把IO請(qǐng)求劃分成更簡(jiǎn)單的請(qǐng)求,以傳給更下層的驅(qū)動(dòng)執(zhí)行。最底層的驅(qū)動(dòng)程序在收到IO請(qǐng)求后,通過硬件抽象層,與硬件發(fā)生作用,從而完成IO請(qǐng)求工作。</p><p>  在這樣的結(jié)構(gòu)下,上面的驅(qū)動(dòng)層就不需要對(duì)每個(gè)操作系統(tǒng)都開

80、發(fā)一遍。如圖4_1_1-1所示:</p><p>  圖4_1_1-1 WDM驅(qū)動(dòng)程序的體系結(jié)構(gòu)</p><p>  WDM還引入了功能設(shè)備對(duì)象FDO與物理設(shè)備對(duì)象PDO兩個(gè)新類來(lái)描述硬件,一個(gè)PDO對(duì)應(yīng)一個(gè)真實(shí)硬件。一個(gè)硬件只允許有一個(gè)PDO,但卻可以擁有多個(gè)FDO,而在驅(qū)動(dòng)程序中我們不是直接操作硬件而是操作相應(yīng)的PDO與FDO。驅(qū)動(dòng)程序和設(shè)備對(duì)象的分層情況如圖4_1_1-2 所示。&

81、lt;/p><p>  圖4_1_1-2 WDM中驅(qū)動(dòng)程序和設(shè)備對(duì)象的分層情況</p><p>  其中總線驅(qū)動(dòng)程序(Bus Driver)位于最底層控制總線上所有設(shè)備的訪問,創(chuàng)建PDO代表發(fā)現(xiàn)的設(shè)備。功能驅(qū)動(dòng)程序(Function Driver)控制設(shè)備的主要功能,分層在總線驅(qū)動(dòng)的上面,負(fù)責(zé)創(chuàng)建FDO。在USB情況下,功能驅(qū)動(dòng)程序必須使用USB類驅(qū)動(dòng)程序訪問設(shè)備。</p>&

82、lt;p>  4.1.2 USB驅(qū)動(dòng)程序的WDM結(jié)構(gòu)</p><p>  USB驅(qū)動(dòng)程序的構(gòu)成層次如圖4_1_2-1所示。其中USB客戶驅(qū)動(dòng)程序通過Windows系統(tǒng)提供的USB類驅(qū)動(dòng)程序接口與下層驅(qū)動(dòng)程序通信。</p><p>  4_1_2-1 USB驅(qū)動(dòng)程序的構(gòu)成層次</p><p>  在USB設(shè)備可用之前,必須對(duì)其進(jìn)行配置和接口選擇,然后所選擇

83、的接口的各個(gè)管道才可用。在USBDI的基礎(chǔ)上進(jìn)行編程將大大簡(jiǎn)化,設(shè)計(jì)者不用關(guān)心IRP的類型,而只需在相應(yīng)的分發(fā)例程中通過構(gòu)造USB塊并將其通過USBDI發(fā)送下去就可以實(shí)現(xiàn)對(duì)USB設(shè)備的控制。</p><p>  設(shè)備的訪問WDM不是通過驅(qū)動(dòng)程序名稱,而是通過一個(gè)128位的全局唯一的標(biāo)識(shí)符(GUID)實(shí)現(xiàn)驅(qū)動(dòng)程序的識(shí)別。在應(yīng)用程序與WDM驅(qū)動(dòng)程序通信方面系統(tǒng)為每一個(gè)用戶請(qǐng)求打包成一個(gè)IO請(qǐng)求包(IRP)結(jié)構(gòu),將其發(fā)

84、送至驅(qū)動(dòng)程序,并通過識(shí)別IRP中PDO來(lái)區(qū)別是發(fā)送給哪一個(gè)設(shè)備的。內(nèi)核通常通過發(fā)送IRP來(lái)運(yùn)行驅(qū)動(dòng)程序中的代碼。</p><p>  WDM驅(qū)動(dòng)程序有一個(gè)主要的初始化入口點(diǎn),即一個(gè)必須成為DriverEntry的例程。它有一個(gè)標(biāo)準(zhǔn)的函數(shù)原型。當(dāng)WDM驅(qū)動(dòng)程序被載入時(shí),內(nèi)核調(diào)用DriverEntry例程。驅(qū)動(dòng)程序的DriverEntry例程必須設(shè)置一系列的回調(diào)例程來(lái)處理IRP。每個(gè)回調(diào)例程有一個(gè)標(biāo)準(zhǔn)的函數(shù)原型。內(nèi)核

85、會(huì)在合適的環(huán)境下調(diào)用這個(gè)例程。</p><p>  大多數(shù)的WDM設(shè)備對(duì)象都是在即插即用管理器調(diào)用ADDDevice例程入口點(diǎn)時(shí)被創(chuàng)建的。插入新設(shè)備后,當(dāng)系統(tǒng)找到由安裝信息文件所批示的驅(qū)動(dòng)程序時(shí),這個(gè)例程被調(diào)用。在此之后,一系列即插即用IRP被發(fā)送到驅(qū)動(dòng)程序,設(shè)備驅(qū)動(dòng)程序可進(jìn)行相應(yīng)的功能處理。</p><p>  第五章 USB接口模塊固件設(shè)計(jì)</p><p>

86、  USB接口模塊由PDIUSBD12接口芯片與AT89S52單片機(jī)構(gòu)成。AT89S52作為主控核心進(jìn)行相關(guān)事務(wù)的處理,PDIUSBD12作為接口芯片完成USB協(xié)議層的功能。</p><p>  5.1 PDIUSBD12與AT89S52 特性概述</p><p>  5.1.1 PDIUSBD12特性概要</p><p><b>  功能描述:&l

87、t;/b></p><p>  PDIUSBD12是一款性價(jià)比很高的USB器件。它通常用作微控制器系統(tǒng)中實(shí)現(xiàn)與微控制器進(jìn)行通信的高速通用并行接口。它還支持本地的DMA傳輸。 </p><p>  這種實(shí)現(xiàn)USB接口的標(biāo)準(zhǔn)組件使得設(shè)計(jì)者可以在各種不同類型微控制器中選擇出最合適的微控制器。這種靈活性減小了開發(fā)的時(shí)間、風(fēng)險(xiǎn)以及費(fèi)用(通過使用已有的結(jié)構(gòu)和減少固件上的投資),從而用最快捷的方法

88、實(shí)現(xiàn)最經(jīng)濟(jì)的USB外設(shè)的解決方案。 </p><p>  PDIUSBD12完全符合USB1.1版的規(guī)范。它還符合大多數(shù)器件的分類規(guī)格:成像類、海量存儲(chǔ)器件、通信器件、打印設(shè)備以及人機(jī)接口設(shè)備。同樣地,PDIUSBD12理想地適用于許多外設(shè),例如:打印機(jī)、掃描儀、外部的存儲(chǔ)設(shè)備(Zip驅(qū)動(dòng)器)和數(shù)碼相機(jī)等等。它使得當(dāng)前使用SCSI的系統(tǒng)可以立即降低成本。 </p><p>  PDIUSB

89、D12所具有的低掛起功耗連同LazyClock輸出可以滿足使用ACPI、OnNOW和USB電源管理的要求。低的操作功耗可以應(yīng)用于使用總線供電的外設(shè)。 此外它還集成了許多特性,包括SoftConnetTM、GoodLinkTM、可編程時(shí)鐘輸出、低頻晶振和終止寄存器集合。所有這些特性都為系統(tǒng)顯著節(jié)約了成本,同時(shí)使USB功能在外設(shè)上的應(yīng)用變得容易。 </p><p

90、>  5.1.2 AT89S52 特性概要</p><p><b>  功能描述:</b></p><p>  AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。

91、在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。</p><p>  AT89S52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支

92、持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。</p><p>  5.2 USB通信協(xié)議重要概念概述</p><p><b>  5.2.1 端點(diǎn)</b></p><p>  位于USB

93、設(shè)備或主機(jī)上的一個(gè)數(shù)據(jù)緩沖區(qū),用來(lái)存放和發(fā)送USB的各種數(shù)據(jù),每一個(gè)端點(diǎn)都有惟一的確定地址,有不同的傳輸特性(如輸入端點(diǎn)、輸出端點(diǎn)、配置端點(diǎn)、批量傳輸端點(diǎn))</p><p><b>  5.2.2 幀</b></p><p>  時(shí)間概念,在USB中,一幀就是1ms,它是一個(gè)獨(dú)立的單元,包含了一系列總線動(dòng)作,USB將1幀分為好幾份,每一份中是一個(gè)USB的傳輸動(dòng)作。&

94、lt;/p><p>  5.2.3 上行與下行</p><p>  設(shè)備到主機(jī)為上行,主機(jī)到設(shè)備為下行</p><p>  5.2.4 USB的傳輸線結(jié)構(gòu)</p><p>  一條USB的傳輸線分別由地線、電源線、D+、D-四條線構(gòu)成,D+和D-是差分輸入線,它使用的是3.3V的電壓(與CMOS的5V電平不同),而電源線和地線可向設(shè)備提供5V

95、電壓,最大電流為500mA(可以在編程中設(shè)置)。</p><p>  5.2.5 USB的編碼方案</p><p>  USB采用不歸零取反來(lái)傳輸數(shù)據(jù),當(dāng)傳輸線上的差分?jǐn)?shù)據(jù)輸入0時(shí)就取反,輸入1時(shí)就保持原值,為了確保信號(hào)發(fā)送的準(zhǔn)確性,當(dāng)在USB總線上發(fā)送一個(gè)包時(shí),傳輸設(shè)備就要進(jìn)行位插入操作(即在數(shù)據(jù)流中每連續(xù)6個(gè)1后插入一個(gè)0),從而強(qiáng)迫NRZI碼發(fā)生變化。</p><

96、;p>  5.2.6 USB的數(shù)據(jù)格式</p><p>  USB數(shù)據(jù)是由二進(jìn)制數(shù)字串構(gòu)成的,首先數(shù)字串構(gòu)成域(有七種),域再構(gòu)成包,包再構(gòu)成事務(wù)(IN、OUT、SETUP),事務(wù)最后構(gòu)成傳輸(中斷傳輸、并行傳輸、批量傳輸和控制傳輸)。</p><p>  下面簡(jiǎn)單介紹一下域、包、事務(wù)、傳輸,以及它們間的關(guān)系。</p><p><b>  5.2.

97、6.1 域</b></p><p>  USB數(shù)據(jù)最小的單位,由若干位組成(至于是多少位由具體域決定),域可分為七個(gè)類型:</p><p>  1、同步域(SYNC),八位,值固定為0000 0001,用于本地時(shí)鐘與輸入同步。</p><p>  2、標(biāo)識(shí)域(PID),由四位標(biāo)識(shí)符+四位標(biāo)識(shí)符反碼構(gòu)成,表明包的類型和格式,這是一個(gè)很重要的部分,這里可以計(jì)

98、算出,USB的標(biāo)識(shí)碼有16種。</p><p>  3、地址域(ADDR):七位地址,代表了設(shè)備在主機(jī)上的地址,地址000 0000被命名為零地址,是任何一個(gè)設(shè)備第一次連接到主機(jī)時(shí),在被主機(jī)配置、枚舉前的默認(rèn)地址,由此可以知道為什么一個(gè)USB主機(jī)只能接127個(gè)設(shè)備的原因。</p><p>  4、端點(diǎn)域(ENDP),四位,由此可知一個(gè)USB設(shè)備有的端點(diǎn)數(shù)量最大為16個(gè)。</p>

99、<p>  5、幀號(hào)域(FRAM),11位,每一個(gè)幀都有一個(gè)特定的幀號(hào),幀號(hào)域最大容量0x800,對(duì)于同步傳輸有重要意義(同步傳輸為四種傳輸類型之一,請(qǐng)看下面)。</p><p>  6、數(shù)據(jù)域(DATA):長(zhǎng)度為0~1023字節(jié),在不同的傳輸類型中,數(shù)據(jù)域的長(zhǎng)度各不相同,但必須為整數(shù)個(gè)字節(jié)的長(zhǎng)度</p><p>  7、校驗(yàn)域(CRC):對(duì)令牌包和數(shù)據(jù)包(對(duì)于包的分類請(qǐng)看下

100、面)中非PID域進(jìn)行校驗(yàn)的一種方法,CRC校驗(yàn)在通訊中應(yīng)用很泛,是一種很好的校驗(yàn)方法,至于具體的校驗(yàn)方法這里就不多說,請(qǐng)查閱相關(guān)資料,只須注意CRC碼的除法是模2運(yùn)算,不同于10進(jìn)制中的除法。</p><p><b>  5.2.6.2 包</b></p><p>  由域構(gòu)成的包有四種類型,分別是令牌包、數(shù)據(jù)包、握手包和特殊包,前面三種是重要的包,不同的包的域結(jié)構(gòu)不

101、同,介紹如下:</p><p>  1、令牌包:可分為輸入包、輸出包、設(shè)置包和幀起始包(注意這里的輸入包是用于設(shè)置輸入命令的,輸出包是用來(lái)設(shè)置輸出命令的,而不是放據(jù)數(shù)的)</p><p>  其中輸入包、輸出包和設(shè)置包的格式都是一樣的:</p><p>  SYNC+PID+ADDR+ENDP+CRC5(五位校驗(yàn)碼) </p><p>&

102、lt;b>  幀起始包的格式:</b></p><p>  SYNC+PID+11位FRAM+CRC5(五位校驗(yàn)碼)</p><p>  2、數(shù)據(jù)包:分為DATA0包和DATA1包,當(dāng)USB發(fā)送數(shù)據(jù)的時(shí)候,當(dāng)一次發(fā)送的數(shù)據(jù)長(zhǎng)度大于相應(yīng)端點(diǎn)的容量時(shí),就需要把數(shù)據(jù)包分為好幾個(gè)包,分批發(fā)送,DATA0包和DATA1包交替發(fā)送,即如果第一個(gè)數(shù)據(jù)包是DATA0,那第二個(gè)數(shù)據(jù)包就是D

103、ATA1。但也有例外情況,在同步傳輸中(四類傳輸類型中之一),所有的數(shù)據(jù)包都是為DATA0,格式如下:</p><p>  SYNC+PID+0~1023字節(jié)+CRC16</p><p>  3、握手包:結(jié)構(gòu)最為簡(jiǎn)單的包,格式如下</p><p><b>  SYNC+PID</b></p><p>  注:上面每種包都

104、有不同類型的,USB1.1共定義了十種包。</p><p>  5.2.6.3 事務(wù)</p><p>  分別有IN事務(wù)、OUT事務(wù)和SETUP事務(wù)三大事務(wù),每一種事務(wù)都由令牌包、數(shù)據(jù)包、握手包三個(gè)階段構(gòu)成,這里用階段的意思是因?yàn)檫@些包的發(fā)送是有一定的時(shí)間先后順序的,事務(wù)的三個(gè)階段如下:</p><p>  1、令牌包階段:?jiǎn)?dòng)一個(gè)輸入、輸出或設(shè)置的事務(wù)</p

105、><p>  2、數(shù)據(jù)包階段:按輸入、輸出發(fā)送相應(yīng)的數(shù)據(jù)</p><p>  3、握手包階段:返回?cái)?shù)據(jù)接收情況,在同步傳輸?shù)腎N和OUT事務(wù)中沒有這個(gè)階段,這是比較特殊的。</p><p>  事務(wù)的三種類型如下(以下按三個(gè)階段來(lái)說明一個(gè)事務(wù)):</p><p><b>  1、 IN事務(wù):</b></p>&

106、lt;p>  令牌包階段——主機(jī)發(fā)送一個(gè)PID為IN的輸入包給設(shè)備,通知設(shè)備要往主機(jī)發(fā)送數(shù)據(jù);</p><p>  數(shù)據(jù)包階段——設(shè)備根據(jù)情況會(huì)作出三種反應(yīng)(要注意:數(shù)據(jù)包階段也不總是傳送數(shù)據(jù)的,根據(jù)傳輸情況還會(huì)提前進(jìn)入握手包階段)</p><p>  1) 設(shè)備端點(diǎn)正常,設(shè)備往入主機(jī)里面發(fā)出數(shù)據(jù)包(DATA0與DATA1交替);</p><p>  2) 設(shè)

107、備正在忙,無(wú)法往主機(jī)發(fā)出數(shù)據(jù)包就發(fā)送NAK無(wú)效包,IN事務(wù)提前結(jié)束,到了下一個(gè)IN事務(wù)才繼續(xù);</p><p>  3) 相應(yīng)設(shè)備端點(diǎn)被禁止,發(fā)送錯(cuò)誤包STALL包,事務(wù)也就提前結(jié)束了,總線進(jìn)入空閑狀態(tài)。</p><p>  握手包階段——主機(jī)正確接收到數(shù)據(jù)之后就會(huì)向設(shè)備發(fā)送ACK包。</p><p><b>  2、 OUT事務(wù):</b>&l

108、t;/p><p>  令牌包階段——主機(jī)發(fā)送一個(gè)PID為OUT的輸出包給設(shè)備,通知設(shè)備要接收數(shù)據(jù);</p><p>  數(shù)據(jù)包階段——比較簡(jiǎn)單,就是主機(jī)會(huì)設(shè)備送數(shù)據(jù),DATA0與DATA1交替</p><p>  握手包階段——設(shè)備根據(jù)情況會(huì)作出三種反應(yīng):</p><p>  1)設(shè)備端點(diǎn)接收正確,設(shè)備往入主機(jī)返回ACK,通知主機(jī)可以發(fā)送新的數(shù)據(jù)

109、,如果數(shù)據(jù)包發(fā)生了CRC校驗(yàn)錯(cuò)誤,將不返回任何握手信息;</p><p>  2) 設(shè)備正在忙,無(wú)法往主機(jī)發(fā)出數(shù)據(jù)包就發(fā)送NAK無(wú)效包,通知主機(jī)再次發(fā)送數(shù)據(jù);</p><p>  3) 相應(yīng)設(shè)備端點(diǎn)被禁止,發(fā)送錯(cuò)誤包STALL包,事務(wù)提前結(jié)束,總線直接進(jìn)入空閑狀態(tài)。</p><p>  3、SETUP事務(wù):</p><p>  令牌包階段——

110、主機(jī)發(fā)送一個(gè)PID為SETUP的輸出包給設(shè)備,通知設(shè)備要接收數(shù)據(jù);</p><p>  數(shù)據(jù)包階段——比較簡(jiǎn)單,就是主機(jī)會(huì)設(shè)備送數(shù)據(jù),注意,這里只有一個(gè)固定為8個(gè)字節(jié)的DATA0包,這8個(gè)字節(jié)的內(nèi)容就是標(biāo)準(zhǔn)的USB設(shè)備請(qǐng)求命令(共有11條) </p><p>  握手包階段——設(shè)備接收到主機(jī)的命令信息后,返回ACK,此后總線進(jìn)入空閑狀態(tài),并準(zhǔn)備下一個(gè)傳輸(在SETUP事務(wù)后通常是一個(gè)IN或

111、OUT事務(wù)構(gòu)成的傳輸)</p><p>  5.2.6.4 傳輸</p><p>  傳輸由OUT、IN、SETUP事務(wù)其中的事務(wù)構(gòu)成,傳輸有四種類型,中斷傳輸、批量傳輸、同步傳輸、控制傳輸,其中中斷傳輸和批量轉(zhuǎn)輸?shù)慕Y(jié)構(gòu)一樣,同步傳輸有最簡(jiǎn)單的結(jié)構(gòu),而控制傳輸是最重要的也是最復(fù)雜的傳輸。</p><p>  1、中斷傳輸:由OUT事務(wù)和IN事務(wù)構(gòu)成,用于鍵盤、鼠標(biāo)等

112、HID設(shè)備的數(shù)據(jù)傳輸中。</p><p>  2、批量傳輸:由OUT事務(wù)和IN事務(wù)構(gòu)成,用于大容量數(shù)據(jù)傳輸,沒有固定的傳輸速率,也不占用帶寬,當(dāng)總線忙時(shí),USB會(huì)優(yōu)先進(jìn)行其他類型的數(shù)據(jù)傳輸,而暫時(shí)停止批量轉(zhuǎn)輸。</p><p>  3、同步傳輸:由OUT事務(wù)和IN事務(wù)構(gòu)成,有兩個(gè)特殊地方,第一,在同步傳輸?shù)腎N和OUT事務(wù)中是沒有返回包階段的;第二,在數(shù)據(jù)包階段所有的數(shù)據(jù)包都為DATA0。

113、</p><p>  4、控制傳輸:最重要的也是最復(fù)雜的傳輸,控制傳輸由三個(gè)階段構(gòu)成(初始設(shè)置階段、可選數(shù)據(jù)階段、狀態(tài)信息步驟),每一個(gè)階段可以看成一個(gè)的傳輸,也就是說控制傳輸其實(shí)是由三個(gè)傳輸構(gòu)成的,用來(lái)于USB設(shè)備初次加接到主機(jī)之后,主機(jī)通過控制傳輸來(lái)交換信息,設(shè)備地址和讀取設(shè)備的描述符,使得主機(jī)識(shí)別設(shè)備,并安裝相應(yīng)的驅(qū)動(dòng)程序,這是每一個(gè)USB開發(fā)者都要關(guān)心的問題。</p><p>  

114、1)初始設(shè)置步驟:就是一個(gè)由SET事務(wù)構(gòu)成的傳輸</p><p>  2)可選數(shù)據(jù)步驟:就是一個(gè)由IN或OUT事務(wù)構(gòu)成的傳輸,這個(gè)步驟是可選的,要看初始設(shè)置步驟有沒有要求讀/寫數(shù)據(jù)(由SET事務(wù)的數(shù)據(jù)包階段發(fā)送的標(biāo)準(zhǔn)請(qǐng)求命令決定)</p><p>  3) 狀態(tài)信息步驟:這個(gè)步驟就是要獲取狀態(tài)信息,由IN或OUT事務(wù)構(gòu)成的傳輸,但是要注意這里的IN和OUT事務(wù)和之前的INT和OUT事務(wù)有兩

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論