版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga技術(shù)實(shí)現(xiàn)usb通信說明書
- 基于FPGA實(shí)現(xiàn)的USB串口通信.pdf
- 基于FPGA的USB通信系統(tǒng)的設(shè)計(jì).pdf
- 畢業(yè)設(shè)計(jì)----基于usb的串行通信軟硬件設(shè)計(jì)
- 基于fpga的soc技術(shù)畢業(yè)設(shè)計(jì)
- FPGA與PC機(jī)USB通信的實(shí)現(xiàn).pdf
- 基于FPGA的鏈路口和USB通信接口實(shí)現(xiàn).pdf
- 基于usb總線數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于xilinx fpga高速串行接口設(shè)計(jì)與實(shí)現(xiàn)
- 基于fpga的usb2.0控制芯片設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)設(shè)計(jì)---基于fpga技術(shù)的數(shù)字存儲(chǔ)示波器設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)基于fpga的fft算法設(shè)計(jì)與實(shí)現(xiàn)
- 基于USB和FPGA技術(shù)的高性能數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于fpga的差錯(cuò)控制編碼的設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)設(shè)計(jì)】
- 畢業(yè)設(shè)計(jì)kmp算法的fpga實(shí)現(xiàn)
- 畢業(yè)設(shè)計(jì)論文基于fpga技術(shù)的數(shù)字存儲(chǔ)示波器設(shè)計(jì)
- 基于FPGA的USB芯片設(shè)計(jì).pdf
- 畢業(yè)設(shè)計(jì)---基于fpga的sdram控制器的實(shí)現(xiàn)
- 基于usb2.0fpga的密碼算法硬件實(shí)現(xiàn)平臺(tái)設(shè)計(jì)
- 基于fpga大氣激光通信機(jī)的調(diào)制電路畢業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論