畢業(yè)設(shè)計---基于fpga技術(shù)實現(xiàn)usb通信-軟件_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、;<p>  【關(guān)鍵詞】應(yīng)用程序,USB,F(xiàn)PGA,語音</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 國內(nèi)外相關(guān)研究狀況2</p><p>  1.3 USB的特點3</p&g

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

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

8、 API函數(shù) 簡介7</p><p>  3.3 應(yīng)用程序控制界面設(shè)計7</p><p>  3.4 應(yīng)用程序設(shè)計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ū)動程序設(shè)計14</p><p>  4.1 驅(qū)動程序開發(fā)14</p><p>  4.1.1 WDM驅(qū)動程序的分層結(jié)構(gòu)14</p><p>  4.1.2 USB驅(qū)動程序的WDM結(jié)構(gòu)16</p><p>  第五章

10、 USB接口模塊固件設(shè)計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 端點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è)計23</p><p>  第六章 FPGA語音采集與

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

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

15、  7.3 整機系統(tǒng)調(diào)試30</p><p><b>  總結(jié)31</b></p><p><b>  致謝32</b></p><p><b>  參考文獻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等公司為簡化PC與外設(shè)之間的互連而共同研究開發(fā)的一種免費的標準化連

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

47、備通信。一個驅(qū)動程序可以驅(qū)動多個設(shè)備,并且此驅(qū)動程序可能為Windows系統(tǒng)中已有的,也可能為用戶安裝的。</p><p>  通常,這些Win32 API函數(shù)有以下幾種:</p><p>  CreateFile函數(shù). 打開一個設(shè)備,返回一個與設(shè)備相關(guān)的句柄。該函數(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, //文件屬性和標志</p><p>  HANDLE hTemplateFile

50、 //臨時文件的句柄,通常為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ù)。對設(shè)備進行一些自定義的操作,比如更改設(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ù)據(jù)個數(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)閉一個由CreateFile打開的設(shè)備。該函數(shù)聲明形式如下:</p><p>  BOOL CloseHandle(HANDLE hCom);</p><p>  其中,參數(shù)hCom為CreateFile函數(shù)多所打開

59、的串口句柄。</p><p>  這些函數(shù)的執(zhí)行,都對應(yīng)著驅(qū)動程序的一些分發(fā)例程。表3_4-1是常用API函數(shù)和驅(qū)動程序的IRP對應(yīng)關(guān)系表。</p><p>  表3_4-1 常用API函數(shù)和驅(qū)動程序的IRP對應(yīng)關(guān)系</p><p>  3.4.1 查找設(shè)備</p><p>  利用CreateFile函數(shù)打開一個串口,通常可用以下程序?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、 //獨占方式</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>  (1) 獲取設(shè)備信息</p><p>  一個應(yīng)用程序與某個設(shè)備的驅(qū)動程序通信前,一定要獲取此設(shè)備的獨特標識符(GUID)。GUID是一個128位的值,它表征了唯一一個設(shè)備對象。在實際開發(fā)中,可以在編寫設(shè)備驅(qū)動程序時獲得該設(shè)備的G

63、UID,也可以通過API函數(shù)調(diào)用獲得。</p><p>  可以調(diào)用Windows設(shè)備管理函數(shù)SetupDiGetClassDevs來獲取的信息集。該函數(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) 識別接口信息</p><p&g

65、t;  SetupDiEnumDeviceInterface函數(shù)返回設(shè)備信息集的一個設(shè)備接口元素的環(huán)境結(jié)構(gòu),每次調(diào)用該函數(shù)返回一個設(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)用上一個函數(shù)SetupDiEnumDeviceInterface時,獲得了一個DeviceInfoData結(jié)構(gòu)。該結(jié)構(gòu)指向標識一個請求設(shè)備的接口。為了得到該接口的詳細信息,可以通過調(diào)用函數(shù)SetupDiEnumDeviceInterfaceDetail來實現(xiàn)。此時,返回該接口

68、的詳細信息中包含了設(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è)備,獲得這個設(shè)備的句柄。如前所

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

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

73、D標志,調(diào)用ReadFile( )和WriteFile()對該句柄進行的讀寫操作可以是異步,如果未指定異步標志,則讀寫操作是同步。</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ù)來完成。函數(shù)調(diào)用形式如下:</p><p>  CloseHandle(hComn);</p><p>  第四章 USB接口模塊驅(qū)動程序設(shè)計</p><p>  本設(shè)計不屬于Windows的標準設(shè)備,故要自己設(shè)計驅(qū)動程序。USB的驅(qū)動開發(fā)是一個技術(shù)難點,也是一個技術(shù)核心。</p><

76、;p>  Windows的驅(qū)動開發(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ū)動程序開發(fā)</p><p>  Windows環(huán)境

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

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

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

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

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

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

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

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

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

86、  USB接口模塊由PDIUSBD12接口芯片與AT89S52單片機構(gòu)成。AT89S52作為主控核心進行相關(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是一款性價比很高的USB器件。它通常用作微控制器系統(tǒng)中實現(xiàn)與微控制器進行通信的高速通用并行接口。它還支持本地的DMA傳輸。 </p><p>  這種實現(xiàn)USB接口的標準組件使得設(shè)計者可以在各種不同類型微控制器中選擇出最合適的微控制器。這種靈活性減小了開發(fā)的時間、風險以及費用(通過使用已有的結(jié)構(gòu)和減少固件上的投資),從而用最快捷的方法

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

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

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

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

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

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

94、lt;/p><p>  5.2.3 上行與下行</p><p>  設(shè)備到主機為上行,主機到設(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采用不歸零取反來傳輸數(shù)據(jù),當傳輸線上的差分數(shù)據(jù)輸入0時就取反,輸入1時就保持原值,為了確保信號發(fā)送的準確性,當在USB總線上發(fā)送一個包時,傳輸設(shè)備就要進行位插入操作(即在數(shù)據(jù)流中每連續(xù)6個1后插入一個0),從而強迫NRZI碼發(fā)生變化。</p><

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

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

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

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

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

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

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

103、ATA1。但也有例外情況,在同步傳輸中(四類傳輸類型中之一),所有的數(shù)據(jù)包都是為DATA0,格式如下:</p><p>  SYNC+PID+0~1023字節(jié)+CRC16</p><p>  3、握手包:結(jié)構(gòu)最為簡單的包,格式如下</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òu)成,這里用階段的意思是因為這些包的發(fā)送是有一定的時間先后順序的,事務(wù)的三個階段如下:</p><p>  1、令牌包階段:啟動一個輸入、輸出或設(shè)置的事務(wù)</p

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

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

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

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

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

110、主機發(fā)送一個PID為SETUP的輸出包給設(shè)備,通知設(shè)備要接收數(shù)據(jù);</p><p>  數(shù)據(jù)包階段——比較簡單,就是主機會設(shè)備送數(shù)據(jù),注意,這里只有一個固定為8個字節(jié)的DATA0包,這8個字節(jié)的內(nèi)容就是標準的USB設(shè)備請求命令(共有11條) </p><p>  握手包階段——設(shè)備接收到主機的命令信息后,返回ACK,此后總線進入空閑狀態(tài),并準備下一個傳輸(在SETUP事務(wù)后通常是一個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é)構(gòu),而控制傳輸是最重要的也是最復(fù)雜的傳輸。</p><p>  1、中斷傳輸:由OUT事務(wù)和IN事務(wù)構(gòu)成,用于鍵盤、鼠標等

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

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

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

溫馨提示

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

評論

0/150

提交評論