STM32的USB虛擬串口設(shè)計_第1頁
STM32的USB虛擬串口設(shè)計_第2頁
STM32的USB虛擬串口設(shè)計_第3頁
STM32的USB虛擬串口設(shè)計_第4頁
STM32的USB虛擬串口設(shè)計_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、畢業(yè)設(shè)計論文題目:基于 STM32STM32 的 USBUSB 虛擬串口學院:專業(yè):姓名:學號:指導老師:完成時間:20142014 年 5 5 月 1919 日USB 接口由于支持熱插拔和標準統(tǒng)一等特點得到了廣泛應(yīng)用,越來越多的電腦設(shè)備開始采用 USB 接口進行數(shù)據(jù)的傳輸,而如何在不改變現(xiàn)有應(yīng)用軟件的情況下,將設(shè)備移植到USB 接口成為人們研究的熱門。論文以 USB 通信設(shè)備類中的抽象控制模型為基礎(chǔ), 研究了通信設(shè)備類及實現(xiàn)虛擬設(shè)備的原理,設(shè)計并實現(xiàn)了基于通信設(shè)備類的虛擬串口驅(qū)動程序。論文研究設(shè)計了基于通信設(shè)備類的虛擬審驅(qū)動程序的結(jié)構(gòu)和實現(xiàn)方案,程序主要由通信命令轉(zhuǎn)換和數(shù)據(jù)傳輸兩部分構(gòu)成,通

2、信命令轉(zhuǎn)換符合通信設(shè)備類中抽象控制模型的規(guī)范,數(shù)據(jù)傳輸部分對現(xiàn)有虛擬串口的實現(xiàn)技術(shù)進行了改進。論文的主要工作如下:1)研究了 USB 協(xié)議的請求和傳輸模式,分析了通信設(shè)備類實現(xiàn)虛擬設(shè)備的方案。2)給出了一種符合通信設(shè)備類中抽象控制模型的虛擬串口實現(xiàn)方案。該方案提供了一種基于通信設(shè)備類開發(fā)虛擬設(shè)備的模板,對設(shè)計中的諸多問題進行了詳細的說明,并改進了虛擬串口驅(qū)動程序中數(shù)據(jù)的處理流程。3)將改進后的數(shù)據(jù)處理流程應(yīng)用于虛擬串口的實現(xiàn)中,生成了一種基于通信設(shè)備類的穩(wěn)定、高速的虛擬串口。最后,在串口測試軟件下對虛擬審驅(qū)動程序進行了測試,達到了預(yù)期目標。關(guān)鍵字:通訊設(shè)備類;枚舉過程;虛擬用程序;抽象控制模型

3、AbstractAbstractUSBinterfacesupportsplugandplaywhichhasunifiedstandards,soithasawiderangeofapplications.MoreandmorecomputerdeviceuseUSBinterfacetotransferdata,sohowtomakemanyolddeavestosupportUSBinterfacewithoutchangingcurrentapplicationisbecomingthehotfield.USBCommunicationDeviceClassanditsabstract

4、controlmodelarestudied,principlesofCommunicationDeviceClassandimplementationtechniquesofabstractdevicearealsoanalyzedinthethesis.Onthebasisofthis,designandimplementationofvirtualserialportdriverbasedonCommunicationDeviceClassaregiven.Theoverallstructureandimplementationschemeofvirtualserialportdrive

5、rbasedonCDCaredesigned.Thevirtualserialportdriverismadeupoftwopartswhicharecommunicationcommandtransfermoduleanddatatransmissionmodule.Thecommunicationcommandtransfermodulesatisfiesthespecificationofabstractcontrolmodel,andthedatatransferpartimprovesthetechniqueofcurrentvirtualserialport.Themainwork

6、sinthethesisareasfollows:1)TherequestandtransfermodelforUSBprotocolarestudied,andtheimplementationtechniquesofvirtualserialportareanalyzed.2)TheimplementationschemeofvirtualserialportdriverthatsatisfyabstractcontrolmodeinCDCisgraven.AnewtemplateforthedevelopmentofvirtualserialportbasedonCDCisbrought

7、out,anditdescribessomeissuesforthevirtualserialportdriverindetails,atthesametime,theprocessingstepsforvirtualserialportdriverisimproved.3)Theimproveddataprocessingstepsforvirtualserialportdriverisappliedintheimplementationofritualserialportdriver,andastable,high-speedvirtualserialportismade.Atlast,t

8、hetestforthevirtualserialportdriveonActiveSyncisgiven,andthetestresultshowthatitsfunctionisachievedtherequirementgoals.Keywords:CommunicationDeviceClass;EnumerationProcess;VirtualSerialPortDriver;AbstractControlModel目錄摘要1Abstract2目錄3第1章緒論41.1USB虛擬串口設(shè)計背景及其意義41.2USB虛擬串口設(shè)計研究方法及目標41.3USB虛擬串口設(shè)計國內(nèi)外研究現(xiàn)狀5第2

9、章USB及串口簡單介紹71USB簡介71串口簡介71USB虛擬串口簡介8第3章USB和USBCDC協(xié)議9通用串行總線USB92)USB協(xié)議相關(guān)知識介紹92)USB協(xié)議枚舉過程分析10USBCDC協(xié)議11USB通信過程12第4章虛擬串口的實現(xiàn)15串口的工作原理15USB虛擬串口設(shè)計16STM32USB吾B分說明16USB電路連接16虛擬串口程序設(shè)計17第5章結(jié)論20參考文獻22致明寸23附錄:24第 1 1 章緒論USB虛擬串口設(shè)計背景及其意義USB 是一種統(tǒng)一的傳輸規(guī)范,但是接口有許多種,最常見的就是咱們電腦上用的那種扁平的,這叫做 A 型口,里面有 4 根連線,根據(jù)誰插接誰分為公母接口,一般

10、線上帶的是公口,機器上帶的是母口。現(xiàn)在的很多電子設(shè)備都采用 USB 接口來設(shè)計,使得各個設(shè)備之間的相互通信更為方便和快捷。然而越來越多的設(shè)備開始使用 USB 接口,對 USB 協(xié)議也是一個很大的挑戰(zhàn)。一般在傳輸數(shù)據(jù)的接口與通信協(xié)議是對應(yīng)的,而由于接口的不同,不太外設(shè)使用的協(xié)議也不同。USB 接口具有使用簡單、支持熱插拔、傳輸速度快、便于端口擴展等特點,在高速實時數(shù)據(jù)傳輸系統(tǒng)、 數(shù)據(jù)采集系統(tǒng)等工業(yè)領(lǐng)域得到了廣泛的應(yīng)用。 現(xiàn)代個人計算機往往都帶有四個以上的 USB 接口。然而在現(xiàn)代嵌入式系統(tǒng)和工業(yè)現(xiàn)場中,最常用的標準外設(shè)是異步串行通信接口(串口),如何在沒有串口的情況下得到串口數(shù)據(jù),并完成數(shù)據(jù)傳輸

11、成為一個亟待解決的問題。首先, 越來越多帶 USB 接口的器件涌現(xiàn)出來, 如帶 USB 接口的單片機, 或獨立的 USB接口器件,而這些器件的成本已經(jīng)很接近使用 RS232 電平轉(zhuǎn)換芯片所帶來的成本。其次,市場上也出現(xiàn)了一些 USB 轉(zhuǎn)用口的芯片或者 USB 轉(zhuǎn)用口數(shù)據(jù)線,它們的一頭為串口,另一頭為 USB 接口,在其內(nèi)部完成串口到 USB 協(xié)議的轉(zhuǎn)換。它們通過 USB 接口連接到個人計算機后,操作系統(tǒng)識別的卻是一個串口設(shè)備,這說明 USB 接口對于傳統(tǒng)的串口調(diào)試工具和用戶基于串口的應(yīng)用程序是公開的,開發(fā)者完全不用更改 PC 端的調(diào)試和應(yīng)用程序。 但這些器件的 USB 類不屬于標準的 USB

12、設(shè)備類, 因此需要在操作系統(tǒng)上安裝必要的驅(qū)動。另外由于不是操作系統(tǒng)自帶的設(shè)備驅(qū)動,而且通信經(jīng)過了多次轉(zhuǎn)換,當調(diào)試遇到問題時常常無法確定是串口出了問題還是 USB 出了問題。這些問題限制了 USB 轉(zhuǎn)用口器件的應(yīng)用。設(shè)備通信類(CommunicationDeviceClass)是 USB 組織定義的一類專門給各種通信設(shè)備使用的 USB 子類,是一種可以實現(xiàn)虛擬串口通信的協(xié)議。CDC 類對實現(xiàn) USB 接口和串口之間的轉(zhuǎn)換提供了一個很好的解決辦法。而且 CDC 類是 USB 的一個子類,操作系統(tǒng)默認提供此類驅(qū)動,故可以解決 USB 轉(zhuǎn)用口類器件傳輸不穩(wěn)定的問題。USB虛擬串口設(shè)計研究方法及目標本文

13、所講述的 USB 虛擬用口是采用 STM32 來實現(xiàn)的。STM32 系列控制器具有高性能、低成本、低功耗的特點,它自身帶的 USB 模塊符合 USB2.0 規(guī)范和 OTG1.3規(guī)范,支持全速 12Mbps 和低速 1.2Mbps 兩種模式。而且 STM32 官方封裝了很多庫函數(shù),對于編寫 USB 驅(qū)動節(jié)省了很多時間。 本文在理解 USB 體系結(jié)構(gòu)并深入研究 USBCDC 協(xié)議的基礎(chǔ)上,通過分析 USB 枚舉過程在 STM32 平臺上實現(xiàn)了 USB 虛擬串口,通過虛擬串口達到了 USB 與串口通信的預(yù)期目的。USB虛擬串口設(shè)計國內(nèi)外研究現(xiàn)狀國內(nèi)研究現(xiàn)開發(fā)設(shè)備控制芯片較難,中國臺灣地區(qū)的許多公司可

14、以生產(chǎn)這種轉(zhuǎn)換的設(shè)備,并提供功能齊全的開發(fā)接口和文檔說明。國內(nèi)集成電路的設(shè)計開發(fā)公司的能力還有限,限于提供不太復(fù)雜的應(yīng)用及單一產(chǎn)品中, 并且在國內(nèi)的市場占有率還很小, 目前正處于蓬勃發(fā)展的階段。當前 USB 已經(jīng)成為個人計算機(PC)必備接口,各種 PC 電子消費產(chǎn)品也逐漸配置了這種標準的接口。為了順應(yīng)這種情況,對于使用串口開發(fā)應(yīng)用的人員需要提供串口與 USB之間的轉(zhuǎn)接組件,使用口數(shù)據(jù)和及其控制信號可以在 USB 總線上進行傳輸。USB 和串口之間的轉(zhuǎn)換實現(xiàn),有硬件實現(xiàn)和軟件實現(xiàn)兩種。硬件實現(xiàn)一般需要設(shè)計專用的設(shè)備控制芯片。開發(fā)設(shè)備控制芯片較難,需要有專業(yè)的硬件設(shè)計及編程能力,為了提高USB

15、和串口轉(zhuǎn)換的開發(fā)效率,國外有很多公司都開發(fā)出了相應(yīng)的控制芯片。中國臺灣地區(qū)的許多公司可以生產(chǎn)實現(xiàn)這種轉(zhuǎn)換的設(shè)備,并提供功能齊全的開發(fā)接口和文檔說明。 國內(nèi)集成電路的設(shè)計開發(fā)公司能力還有限, 限于提供不太復(fù)雜的應(yīng)用及單一產(chǎn)品中,并且在國內(nèi)的市場占有率還很小,目前正處于蓬勃發(fā)展階段。設(shè)備控制芯片分為通用設(shè)備控制器,定位于某幾類 USB 產(chǎn)品的編程應(yīng)用;專用設(shè)備控制器,定位于某一個 USB產(chǎn)品的應(yīng)用。通用設(shè)備控制器大部分被國外芯片壟斷,國內(nèi)在專用設(shè)備控制器已有所發(fā)展。國內(nèi)外已有很多商業(yè)上成熟的此類接口轉(zhuǎn)換器,其重點都是放在虛擬串口設(shè)備的設(shè)計上。一個好的轉(zhuǎn)接器需要設(shè)計一個能列舉虛擬串口的驅(qū)動程序,在這

16、種情況下,PC 端的應(yīng)用軟件依然是針對 RS-232 串行端口編程的,外設(shè)也是以 RS-232 為數(shù)據(jù)通信通道,但從 PC 到外設(shè)之間的物理連接卻是 USB 總線, 其上的數(shù)據(jù)通信也是 USB 數(shù)據(jù)格式。 采用這種方式的好處在于:一方面可以保護原有的軟件開發(fā)投入,并使已有的針對 RS-232 外設(shè)的應(yīng)用軟件不加修改,便可繼續(xù)使用;另一方面就是 USB 總線的高傳輸速率和即插即用的特性得到了充分利用。 虛擬串口的用途最初都是用于用口轉(zhuǎn)網(wǎng)絡(luò)通信接口,也就是把對網(wǎng)口的操作映射為對串口操作。例如,在傳統(tǒng)的門禁系統(tǒng)、考勤系統(tǒng)、售飯系統(tǒng)、POS 消費系統(tǒng)和一些其中控制和可靠性方面存在較大的局限性,隨著網(wǎng)絡(luò)

17、的普及,通過 TCP/IP 網(wǎng)絡(luò)實現(xiàn)網(wǎng)絡(luò)連接,解決系統(tǒng)中,傳統(tǒng)串口總線獲得了大量的應(yīng)用但與網(wǎng)絡(luò)相比,傳統(tǒng)串口總線在傳輸距離傳統(tǒng)用在傳輸距離和可靠性方面方面存在較大的局限性成為必然選擇。由于原來的平臺軟件是通過電腦用收發(fā)數(shù)據(jù),為了使平臺軟件不用改變工作方式,需要在電腦平臺上安裝虛擬用口驅(qū)動, 通過虛擬串口驅(qū)動可以將硬件轉(zhuǎn)換器從網(wǎng)絡(luò)上傳送來的數(shù)據(jù)重定向到一個虛擬用口上。這樣,平臺軟件通過虛擬審口進行數(shù)據(jù)收發(fā)。USB 和串口之間的轉(zhuǎn)換實現(xiàn),還有一種實現(xiàn)是軟件實現(xiàn)。這里的軟件實現(xiàn)主要指設(shè)計USB 轉(zhuǎn)用口的驅(qū)動程序。在 USB 中 CDC 子類成為規(guī)范之前,USB 轉(zhuǎn)用口的驅(qū)動程序的實現(xiàn)各種各樣,且基于

18、特定的設(shè)備,通用性較差。USB 中 CDC 子類中抽象控制模型規(guī)范了虛擬串口實現(xiàn)的框架,增強了虛擬審驅(qū)動程序的通用性。第 2 2 章 USBUSB 及串口簡單介紹USB簡介USB 是英文 UniversalSerialBus(通用串行總線)的縮寫,是一個外部總線的標準,用于規(guī)范電腦與外部設(shè)備的連接和通訊,是應(yīng)用在 PC 領(lǐng)域的接口技術(shù)。USB 傳輸速度極快,使用很方便,它可以連接的非常多的外設(shè)。比如:鼠標、鍵盤、移動硬盤等。USB 設(shè)備之所以會被大量應(yīng)用,主要有以下優(yōu)點:1)可以熱插拔。這讓用戶在使用外接設(shè)備時不需要重復(fù)關(guān)機這樣的動作。2)攜帶方便。USB 設(shè)備通常以“小、輕、薄”見長,對用戶

19、來說,同樣 40G 硬盤,USB硬盤比 IDE 硬盤要輕一半,在想要隨身攜帶大量數(shù)據(jù)時,當然 USB 硬盤會是首選了。3)標準統(tǒng)一。常見的是 IDE 接口的硬盤,串口的鼠標鍵盤,并口的打印機掃面議,可以有了 USB 之后, 這些應(yīng)用外設(shè)統(tǒng)統(tǒng)可以用同樣的標準與 PC 連接, 這時就有了 USB 硬盤,USB 鼠標,等等。4)可以連接多個設(shè)備。USB 在 PC 上往往具有多個接口,可以同時連接幾個外設(shè),最高可連接 127 個設(shè)備。每個 USB 只有一個主機,主機也稱為根,根結(jié)或根 Hub,它做在主板上或作為適配卡安裝在計算機上,主機包含有主控制器和根集線器,控制著 USB 總線上的數(shù)據(jù)和控制信息的

20、流動,每個 USB 系統(tǒng)只能有一個根集線器,它連接在主控制器上。關(guān)于 USB 的數(shù)據(jù)傳輸:主控制器負責主機和 USB 設(shè)備間數(shù)據(jù)流的傳輸。它支持四種基本的數(shù)據(jù)傳輸模式:控制傳輸,等時傳輸,中斷傳輸及數(shù)據(jù)塊傳輸。串口簡介串行通信接口即是用口,采用串行通信方式的擴展接口。其通信線只有一根用來傳輸數(shù)據(jù),數(shù)據(jù)傳輸方式是一位一位的順序傳送。這樣的傳輸方式簡單可以降低很多成本,故很多嵌入式系統(tǒng)采用此種接口。用口適用于長距離通信,但其傳輸速率較慢。串口通信可以分為單工、半雙工和全雙工三種,單工數(shù)據(jù)傳輸只支持數(shù)據(jù)在一個方向上傳輸;半雙工數(shù)據(jù)傳輸允許數(shù)據(jù)在兩個方向上傳輸,但是,在某一時刻,只允許數(shù)據(jù)在一個方向上

21、傳輸,它實際上是一種切換方向的單工通信;全雙工數(shù)據(jù)通信允許數(shù)據(jù)同時在兩個方向上傳輸,因此,全雙工通信是兩個單工通信方式的結(jié)合,它要求發(fā)送設(shè)備和接收設(shè)備都有獨立的接收和發(fā)送能力。串口通常有 RXD 和 TXD 兩個端口,RXD 是接收端,TXD 是發(fā)送端。串口將 RXD 連接到另一個設(shè)備的 TXD 端,TXD 連接到另一個設(shè)備的 RXD 端,然后通過 CLK 的時序就可以進行數(shù)據(jù)的發(fā)送與接收了。USB虛擬串口簡介USB 通信設(shè)備類在物理層通過 USB 總線,采用虛擬串口的方式為主機提供一個物理用口。在系統(tǒng)內(nèi)部,USB 芯片提供一個批量傳輸 IN 端點和一個批量傳輸?shù)?OUT 端點,用于數(shù)據(jù)的接受

22、和發(fā)送,模擬串口的 RXD 線和 TXD 線;另外,芯片還提供中斷 IN 端點,發(fā)送當前串口的狀態(tài),實現(xiàn)對串口傳輸?shù)目刂?。串口設(shè)備的數(shù)據(jù),由系統(tǒng)的串口采集,在芯片內(nèi)完成 USB 包的封裝,通過 USB 總線上傳至主機,再由相應(yīng)的串口應(yīng)用程序(串口調(diào)試助手)進行處理。對用戶來說,看到的是基于串口的數(shù)據(jù)采集和傳輸,而實際上實現(xiàn)的是基于 USB 協(xié)議包的數(shù)據(jù)傳輸。第 3 3 章 USBUSB 和 USBCDCUSBCDC 協(xié)議通用串行總線USBUSB 協(xié)議相關(guān)知識介紹USB 端點USB 通信最基本的形式是通過一個名為端點的東西。USB 端點只能往一個方向傳送數(shù)據(jù),從主機到設(shè)備(稱為輸出端點)或者從設(shè)

23、備到主機(稱為輸入端點)。端點可以看作是單向的管道。USB 是主機與外圍設(shè)備之間的一種串行連接。它以單一類型的總線連接不同類型的設(shè)備3。USB 通過具有一定格式的“信包”按一定的“規(guī)程”來傳輸信息,根據(jù)信息的性質(zhì)可以分為 4 種傳輸類型:1)控制模式:主要用于配置 USB 設(shè)備,獲取設(shè)備信息,發(fā)送數(shù)據(jù)到設(shè)備,或者獲取設(shè)備的報告。每一個 USB 設(shè)備都必須具有名為端點 0 的控制端點,USB 核心使用該端點在插入設(shè)備時進行相應(yīng)的配置。在 USB 虛擬串口設(shè)計中使用該模式進行配置 USB 設(shè)備,并通過該模式在主機與設(shè)備間交換控制請求。2)中斷模式:雖然是中斷模式,實際上是用于對 USB 設(shè)備周期性

24、查詢來實現(xiàn)的。USB 設(shè)備不存在主動向主機發(fā)送“中斷請求”的能力,只能被動地接受主機通過 USB總線查詢。在 USB 虛擬串口設(shè)計中使用該模式來實時報告設(shè)備狀態(tài)。3)批量模式:批量端點用于傳輸大量的數(shù)據(jù),沒有很強的時間要求,但需要確保數(shù)據(jù)的可靠傳輸。在 USB 虛擬串口設(shè)計中該模式進行數(shù)據(jù)發(fā)送與接收。4)等時模式:用于定時傳輸大量的數(shù)據(jù),但不能確保數(shù)據(jù)是否丟失。USB 描述符USB 是通過描述符來對 USB 設(shè)備進行屬性說明的,當 USB 第一次連接到主機上時,主機要求了解 USB 設(shè)備的一些基本信息,比如設(shè)備有何種功能,需要占用多少 USB 資源,屬于何種設(shè)備類等。只有主機完全確認了這些信息

25、之后,設(shè)備才能正常工作。這些信息是通過存儲在設(shè)備中的 USB 描述符來體現(xiàn)的。當 USB 設(shè)備插入主機后,主機要對其進行總線枚舉,配置該設(shè)備所需的驅(qū)動等信息。主機通過標準請求來讀取 USB 的描述符。標準的 USB 設(shè)備有 5 種描述符,分別為設(shè)備描述符、配置描述符、接口描述符、端點描述符和字符串描述符。每一個 USB 設(shè)備都有一個設(shè)備描述符。而每一個設(shè)備描述符有一個默認的配置描述符,配置描述符主要定義了 USB 設(shè)備功能,那樣就需要為每個功能定義一個配置。但是同一個時刻只有一個配置可用,一個配置支持至少一個接口。接口定義了實現(xiàn)功能的硬件的集合,接口往往包括多個端點。USB 枚舉枚舉就是從設(shè)備

26、讀取一些信息,知道設(shè)備時什么樣的設(shè)備,如何進行通信,這樣主機就可以根據(jù)這些信息來加載合適的驅(qū)動程序。調(diào)試 USB 設(shè)備很重要的一點就是枚舉過程,只要枚舉成功了,那么就已經(jīng)成功大半了。USB 協(xié)議枚舉過程分析USB 協(xié)議定義了設(shè)備的 6 種狀態(tài),枚舉過程會經(jīng)歷 4 種狀態(tài)的遷移:上電狀態(tài),默認狀態(tài),地址狀態(tài)和配置狀態(tài)(其他兩種是連接狀態(tài)和掛起狀態(tài))。枚舉過程實際上用到而且只用到了總線的“控制傳輸”的傳輸方式。 這種傳輸方式通常用于配置、命令、狀態(tài)等情形,其中的設(shè)置操作 setup 和狀態(tài)操作 status 過程的數(shù)據(jù)包具有 USB 協(xié)議定義的數(shù)據(jù)結(jié)構(gòu),因此,控制傳輸只能通過消息管道進行。一個完整

27、的控制傳輸包括三個過程:建立連接、數(shù)據(jù)過程、狀態(tài)過程。建立連接的過程都是有主機發(fā)起,它開始于一個 Setup 令牌包,后面緊跟著一個 DATA0 包。如果是控制輸入傳輸,數(shù)據(jù)過程則為輸入數(shù)據(jù),若是控制輸出傳輸,則數(shù)據(jù)過程是輸出數(shù)據(jù)。數(shù)據(jù)過程可選型是指設(shè)置過程需要指定數(shù)據(jù)長度,如果指定為 0,則沒有數(shù)據(jù)過程。狀態(tài)過程跟在數(shù)據(jù)之后,狀態(tài)過程恰好和數(shù)據(jù)過程的數(shù)據(jù)傳輸方向相反,因為此階段主要是用來確認之前兩階段的所有數(shù)據(jù)已經(jīng)正確傳輸了。下面是枚舉詳細過程:首先獲取設(shè)備描述符。USB 主機檢測到 USB 設(shè)備插入后,就會先對設(shè)備復(fù)位。設(shè)備復(fù)位后,USB 主機就會對地址為 0 的設(shè)備發(fā)送獲取設(shè)備描述符的標

28、準請求。所有的 USB 設(shè)備在總線復(fù)位后其地址都為 0,這樣主機就可以跟那些剛剛插入的設(shè)備通過地址 0(端點 0)通信。主機在建立階段發(fā)出獲取設(shè)備描述符的輸入請求,設(shè)備收到該請求后,在數(shù)據(jù)過程將設(shè)備描述符返回給主機。 主機在成功獲取到一個數(shù)據(jù)包的設(shè)備描述符后并且確認沒有什么錯誤后(注意:有些 USB 設(shè)備的端點 0 大小不足 18字節(jié)(但至少具有 8 字節(jié)),而標準的設(shè)備描述有 18 字節(jié),在這種情況下,USB 設(shè)備只能暫時按最大包將部分設(shè)備描述符返回,而主機在成功獲取到前面一部分描述符后,就不會再請求剩下的設(shè)備描述符部分,而是進入設(shè)置地址階段),就會返回一個0 長度的狀態(tài)數(shù)據(jù)包給設(shè)備。然后獲

29、取地址。主機再對設(shè)備復(fù)位一下,接下來就會進入到設(shè)置地址階段。這時 USB主機發(fā)出一個設(shè)置地址的請求(建立過程,設(shè)置地址無數(shù)據(jù)過程),地址包含在建立包中,具體的地址 USB 主機會負責管理,它會分配一個唯一的地址給新的設(shè)備。USB 設(shè)備在收到地址后,返回 0 長度的狀態(tài)包,主機收到 0 長度的狀態(tài)包之后,會返回一個 ACK 給設(shè)備。設(shè)備在收到這個 ACK 之后,就可以啟用新的地址了。這樣設(shè)備就分配到了一個唯一的設(shè)備地址,以后主機就通過它來進行訪問該設(shè)備。然后主機再次獲取設(shè)備描述符。 這次跟第一次可能有點不一樣, 這次需要獲取完全部的18 個字節(jié)的設(shè)備描述符。當然,如果你的端點 0 緩沖大于 18

30、 字節(jié)的話,那就跟第一次的情形一樣了。接下來,主機就會獲取配置描述符。配置描述符總共為 9 字節(jié)。主機在獲取到配置描述符后,根據(jù)里面的配置集合總長度,再獲取配置集合。配置集合包括配置描述符,接口描述符,端點描符等等。然后主機就會根據(jù)獲取的配置集合對設(shè)備進行配置,使設(shè)備從地址狀態(tài)進入配置狀態(tài)。最后主機發(fā)送最后一個 Setup 包,允許所有端點進入工作狀態(tài)。過程大體分為:獲取設(shè)備描述符、設(shè)置地址、再次獲取設(shè)備描述符(此次獲取完整的設(shè)備描述符)、獲取配置描述符、對設(shè)備進行配置。枚舉就相當于主機與 USB 連接的一個過程,為了能夠進行數(shù)據(jù)交換的一個相互識別的過程。枚舉完成后,主機就可以對 USB 設(shè)備

31、進行讀寫操作了。USBCDC協(xié)議USB 通信設(shè)備類的研究目前尚未成熟,可以參考的資料文獻和代碼都比較少,更多的是依靠討論得出方法,然后對該方法的可行度和可靠性進行試驗。存在開發(fā)難度大,需要解決的問題多等困難。止匕外,驅(qū)動程序開發(fā)對操作系統(tǒng)的依賴性很高,需要對操作系統(tǒng)的相關(guān)細節(jié)了解透徹,但是微軟的 WindowsNT 系列操作系統(tǒng)不開源,無法查證實現(xiàn)細節(jié),這也加大了設(shè)計實現(xiàn)的難度。由于驅(qū)動程序運行在內(nèi)核態(tài),因此在用戶態(tài)能用的很多標準函數(shù)都無法使用,需要重新查閱函數(shù)用法,驅(qū)動程序的開發(fā)不能像用戶態(tài)程序一樣方便地進行調(diào)試40USB 為了實現(xiàn)不同的應(yīng)用,將具有特定屬性與服務(wù)的一類設(shè)備劃分為一個類(Cl

32、ass)。如果提供相似格式的數(shù)據(jù)流或者相似的主機交換方式,兩個設(shè)備則被統(tǒng)一在一個類中。如USB 標準就有:AudioClass、CommunicationsDeviceClassHIDClass、VideoClass 等用于在 USB 接口上實現(xiàn)不同的設(shè)備接口。USB 標準協(xié)議中,有一類專用于通訊設(shè)備(主要包括電信通信設(shè)備和中速網(wǎng)絡(luò)通信設(shè)備)的 CDC 協(xié)議,USB 的 CDC 類(CommunicationsDeviceClass 是 USB 通信設(shè)備類的簡稱??梢酝ㄟ^ USBCDC 協(xié)議來將 USB 接口虛擬為其他通訊接口如串口, 以太網(wǎng)接口, ISDN接口等等。根據(jù) CDC 類協(xié)議所針對

33、通信設(shè)備的不同,CDC 協(xié)議又被分成幾種不同的模型:USB 傳統(tǒng)電話業(yè)務(wù)(POTS)模型,USBISDN 模型和 USB 網(wǎng)絡(luò)模型。其中,USB 傳統(tǒng)純電話業(yè)務(wù)模型,有可分為直接線控制模型(DirectLineControlModel)、抽象控制模型(AbstractControlModel)和 USB 電話模型(USBTelephoneModel),如圖 3.1 所示。本文所討論的虛擬串口就屬于 USB 傳統(tǒng)純電話業(yè)務(wù)模型下的抽象控制模型。CDC類圖3.1CDC類分類CDC 協(xié)議由根據(jù)不同的功能可以分為三個部分:通訊設(shè)備類DevicesClass)、通訊接口類(CommunicationIn

34、terfaceClass)和數(shù)據(jù)接口類(DataInterfaceClass)50通訊設(shè)備類是設(shè)備層次的定義,通常用于標示一個通訊設(shè)備與該設(shè)備可以提供相應(yīng)的接口。通訊接口類則定義了相應(yīng)的通訊服務(wù),包括如何對設(shè)備進行管理和控制,數(shù)據(jù)接口類則定義了如何傳輸數(shù)據(jù)。這兩個接口子類占有不同數(shù)量和類型的終端點(Endpoints)。對于前面所述的不同 CDC 類模型,其所對應(yīng)的接口的終端點需求也是不同的。如所需要討論的抽象控制模型對終端點的需求,通信接口類需要一個控制終端點(ControlEndpoint)和一個可選的中斷(Interrupt)型終端點,數(shù)據(jù)接口子類需要一個方向為輸入 (IN) 的周期性

35、(Isochronous 型終端點和一個方向為輸出(OUT)的周期性型終端點。其中控制終端點主要用于 USB 設(shè)備的枚舉和虛擬串口的波特率和數(shù)據(jù)類型(數(shù)據(jù)位數(shù)、停止位和起始位)設(shè)置的通信。輸出方向的非同步終端點用于主機(Host)向從設(shè)備(Slave)發(fā)送數(shù)據(jù),相當于傳統(tǒng)物理用口中的 TXD 線(如果從單片機的角度看),輸入方向的非同步終端點用于從設(shè)備向主機發(fā)送數(shù)據(jù),相當于傳統(tǒng)物理用口中的 RXD 線6。USB通信過程USB 最主要的的是要理解 USB 主機發(fā)送命令給設(shè)備,設(shè)備要對主機的命令進行響應(yīng),USB 通訊的基本單位為“包”理解好“包”這個概念是學習 USB 的關(guān)鍵所在。USB 數(shù)據(jù)包的

36、格式如圖 3.2 所示。電話模型網(wǎng)絡(luò)模型(CommunicationISDN模型FieldPIDADDRENDPDATACRCFrameNumberBits4+474N*8(N=0,.,1024)5/1611圖3.2USB數(shù)據(jù)包的格式對于數(shù)據(jù)包來說, PID 之后直接跟數(shù)據(jù)域, 數(shù)據(jù)域的長度為 N 字節(jié), 數(shù)據(jù)域后以 16 位的 CRC校驗和結(jié)束。握手包僅有 PID 域,沒有數(shù)據(jù)也沒有校驗和。分離傳輸會用到一類特殊的包,S t a r t ? S p l i t C o m p l e t e - S p l i t 包 , 其 格 式 分 別 如 圖 3 . 3 和 如 圖 3 . 4 所

37、示 。FieldSPLIDPIDHubAddrSCPortSEETCRC5Bits87171125圖3.3Start-Split包FieldSPLIDPIDHubAddrSCPortSUETCRC5Bits87171125圖3.4Complete-Split包在Start-Split和 Complete-Split包中主要指定了此次分離傳輸所在的HUB的地址和下行端口編號以及端點類型(控制、中斷、批量、同步)。以及此次傳輸中數(shù)據(jù)在整個數(shù)據(jù)中的位置(第一個包、中間的包、末尾的包)。令牌包可分為輸入包、輸出包、設(shè)置包和幀起始包(注意這里的輸入包是用于設(shè)置輸入命令的,輸出色是用來設(shè)置輸出命令的,而不

38、是放據(jù)數(shù)的)其中輸入包、輸出包和設(shè)置包的格式都是一樣的:SYNC+PID+ADDR+ENDP+CRC5(五位的校驗碼)。幀起始包的格式是 SYNC+PID+11 位 FRAM+CRC5(五位的校驗碼)。數(shù)據(jù)包可以分為 DATA0 包和 DATA1 包, 當 USB 發(fā)送數(shù)據(jù)的時候, 當一次發(fā)送的數(shù)據(jù)長度大于相應(yīng)端點的容量時, 就需要把數(shù)據(jù)包分為好幾個包, 分批發(fā)送, DATA0 包和 DATA1包交替發(fā)送, 即如果第一個數(shù)據(jù)包是 DATA0,那第二個數(shù)據(jù)包就是 DATA10但也有例外情況,在同步傳輸中(四類傳輸類型中之一),所有的數(shù)據(jù)包都是為 DATA0,格式如下:SYNC+PID+01023

39、 字節(jié)+CRC16。握手包的結(jié)構(gòu)最為簡單的包,格式如下:SYNC+PID。數(shù)據(jù)在 USB 總線上的傳輸以包為單位, 包只能在幀內(nèi)傳輸。 高速 USB 總線的幀周期為125uS,全速以及低速 USB 總線的幀周期為 1mS。幀的起始由一個特定的包(SOF 包)表示,幀尾為 EOF。EOF 不是一個包,而是一種電平狀態(tài),EOF 期間不允許有數(shù)據(jù)傳輸。雖然高速總線和全速低速總線的幀周期不一樣,當時包中幀編號的增加速度是 USB/USBSOF 一樣的,因為在高速 USB 系統(tǒng)中,SOF 包中幀編號實際上取得是計數(shù)器的高 11 位, 最低三位作為微幀編號沒有使用, 因此其幀編號的增加周期也為 1msoU

40、SB 采用 Httleedian 字節(jié)順序,在總線上先傳輸一個字節(jié)的最低有效位,最后傳輸最高有效位,采用 NRZI 編碼,若遇到連續(xù)的 6 個 1 要求進行為填充,即插入一個 00所有的USB包都由 SYNC開始, 高速包的 SYNC寬度為 32bit,全速/低速包的 SYNC段長度為 8bit。實際接收到的 SYNC 產(chǎn)度由于 USBHUB 的關(guān)系,可能會小于該值。第 4 4 章虛擬串口的實現(xiàn)4.1串口的工作原理之所以取名為“串行”端口,是因為這種端口會將數(shù)據(jù)“串行化”。更具體地說,它一次獲取一個字節(jié)的數(shù)據(jù)并傳輸該字節(jié)的 8 位。 這樣做的優(yōu)勢在于, 串行端口只需要一條線路就能傳輸 8 個位

41、,而并行端口則需要 8 條。相應(yīng)的劣勢在于,其傳輸數(shù)據(jù)的用時是擁有八條線路時的 8 倍。止匕外,串行端口還可以降低線纜成本,使線纜更加小巧。在發(fā)送數(shù)據(jù)的每個字節(jié)之前, 串行端口會發(fā)送一個開始位, 這是一個值為 0 的單個位。在發(fā)送完數(shù)據(jù)的每個字節(jié)之后,它將發(fā)送一個停止位,表示該字節(jié)已傳輸完成。此外,它還可以發(fā)送奇偶校驗位。1)波特率。這是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的 bit 的個數(shù)。例如300 波特表示每秒鐘發(fā)送 300 個 bit。當我們提到時鐘周期時,我們就是指波特率例如如果協(xié)議需要 4800 波特率,那么時鐘是 4800Hz0這意味著串口通信在數(shù)據(jù)線上的采樣率為 4800H

42、z。通常電話線的波特率為 14400,28800 和 36600。波特率可以遠遠大于這些值,但是波特率和距離成反比。高波特率常常用于放置的很近的儀器間的通信,典型的例子就是 GP 舊設(shè)備的通信。2)數(shù)據(jù)位。這是衡量通信中實際數(shù)據(jù)位的參數(shù)。當計算機發(fā)送一個信息包,實際的數(shù)據(jù)不會是 8 位的,標準的值是 5、7 和 8 位。如何設(shè)置取決于你想傳送的信息。比如,標準的 ASCII 碼是 0127(7 位)。擴展的 ASCII 碼是 0255(8 位)。如果數(shù)據(jù)使用簡單的文本(標準 ASCII 碼),那么每個數(shù)據(jù)包使用 7 位數(shù)據(jù)。每個包是指一個字節(jié),包括開始/停止位,數(shù)據(jù)位和奇偶校驗位。由于實際數(shù)據(jù)

43、位取決于通信協(xié)議的選取,術(shù)語“包”指任何通信的情況。3)停止位。用于表示單個包的最后一位。典型的值為 1,1.5 和 2 位。由于數(shù)據(jù)是在傳輸線上定時的,并且每一個設(shè)備有其自己的時鐘,很可能在通信中兩臺設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數(shù)越多, 不同時鐘同步的容忍程度越大, 但是數(shù)據(jù)傳輸率同時也越慢。4)奇偶校驗位。在用口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對于偶和奇校驗的情況,用口會設(shè)置校驗位(數(shù)據(jù)位后面的一位),用一個值確保傳輸?shù)臄?shù)據(jù)有偶個或者奇?zhèn)€邏輯高位。例如,如果

44、數(shù)據(jù)是 011,那么對于偶校驗,校驗位為 0,保證邏輯高的位數(shù)是偶數(shù)個。如果是奇校驗,校驗位位 1,這樣就有 3 個邏輯高位。高位和低位不真正的檢查數(shù)據(jù), 簡單置位邏輯高或者邏輯低校驗。 這樣使得接收設(shè)備能夠知道一個位的狀態(tài),有機會判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同4.2USB虛擬串口設(shè)計STM32USB 部分說明STM32 的 USB 模塊可以產(chǎn)生三種中斷:USB 喚醒中斷、USB 高優(yōu)先級中斷和 USB低優(yōu)先級中斷,在 STM32 的參考手冊中沒有詳細說明這三種中斷對應(yīng)哪些事件,現(xiàn)說明如下網(wǎng):USB 喚醒中斷:在中斷向量表中的位置是 42。這個中斷在 USB 設(shè)備從暫停

45、模式喚醒時產(chǎn)生,喚醒事件由 USB_ISTR 寄存器的 WKUP 位標識。USB 高優(yōu)先級中斷:在中斷向量表中的位置是 19。這個中斷僅由 USB 同步(Isochronous)模式傳輸或雙緩沖塊(Bulk)傳輸模式下的正確傳輸事件產(chǎn)生, 正確傳輸事件由 USB_ISTR 寄存器的 CTR 位標識。USB 低優(yōu)先級中斷:在中斷向量表中的位置是 20。這個中斷由所有其它的 USB 事件產(chǎn)生,例如正確傳輸(不包括同步模式和雙緩沖塊模式)、USB 復(fù)位等,事件標志位在USB_ISTR 寄存器中。在 STM32 的 USB 開發(fā)包的例子中包含了上述中斷的處理,例如在 USB 揚聲器的例子中,CTR_H

46、P 函數(shù)處理 USB 高優(yōu)先級中斷;在所有例子中都有 USB_Istr()函數(shù)處理 USB 低優(yōu)先級中斷。USB 如何區(qū)分低速、全速和高速設(shè)備:對于全速和高速設(shè)備,上拉電阻是接在D+上;而低速設(shè)備則是上拉電阻接在 D-上。USB 系統(tǒng)中只允許有一個主機,主機分為 3 個不同的功能模塊:應(yīng)用軟件、USB 系統(tǒng)軟件和 USB 總線接口??蛻糗浖撠熀?USB 設(shè)備的功能單元進行通信,以實現(xiàn)其特定功能,它需要開發(fā)人員自行開發(fā),包才 SUSB 設(shè)備驅(qū)動程序和界面應(yīng)用程序兩部分??蛻糗浖荒苤苯釉L問 USB 設(shè)備,具與功能單元的通信必須經(jīng)過 USB 系統(tǒng)軟件和 USB 總線接口模塊才能實現(xiàn)。USB 電路

47、連接從主機角度上講,USB 設(shè)備可看作是由一些配置、接口和端點組成的,這是通常所說的 USB 設(shè)備架構(gòu),即一個 USB 設(shè)備可以含有一個或多個配置。在每個配置中可含有一個或多個接口,在每個接口中可含有若干個端點。其中,配置和接口是對 USB 設(shè)備功能的抽象,實際的數(shù)據(jù)傳輸由端點來完成,在使用 USB 設(shè)備前,必須指明其采用哪個配置和接口。USB 設(shè)備使用各種描述符來說明其設(shè)備構(gòu)架,包括設(shè)備描述符、配置描述符、接口描述符、端點描述符和字符串描述符等,它們通常被保存在 USB 接口芯片的固件中。USB 的電路連接如圖 4.1 所示:PRTR5V0U2X圖4.1USB硬件接口圖虛擬串口程序設(shè)計首先是

48、枚舉過程中的獲取設(shè)備描述符部分, 主機如果要識別成串口, 就要將此 USB 設(shè)備的描述符寫成虛擬串口的描述符,要根據(jù) CDC 類通信協(xié)議進行編寫。此程序設(shè)備描述符是一個數(shù)組,數(shù)組的成員是描述符的內(nèi)容。下面定義的數(shù)組即是設(shè)備描述符。constuint8_tVirtual_Com_Port_DeviceDescriptor=(0 x12,/*描述符字節(jié)長度*/USB_DEVICE_DESCRIPTOR_TYPE,/*設(shè)備描述符類型*/0 x00,FB13碳侏DGNDB65V】51_UNILIIE-USBP70 x02,/*USB 規(guī)范發(fā)布號,表示用哪種協(xié)議,0 x20 表示 USB2.0*/0 x

49、02,/*類型代碼即 CDC*/0 x00,/*子類型代碼*/0 x00,/*協(xié)議代碼*/0 x40,/*端點 0 最大分組大小,值為,8、16、32、64*/0 x83,0 x04,/*供應(yīng)商 ID*/0 x40,0 x57,/*產(chǎn)品 ID。由產(chǎn)品 ID 和供應(yīng)商 ID,就可以讓操作系統(tǒng)加載不同的驅(qū)動程序*/0 x00,0 x02,/*設(shè)備出產(chǎn)編碼*/*制造商標示符*/*產(chǎn)品標示符*/*設(shè)備用口號描述符*/0 x01/*可能配置數(shù),指配置字符串的個數(shù)*/);在枚舉前期,USB 主機發(fā)送 SETUP 包,然后獲取設(shè)備描述符,然后會得知設(shè)備的類型,再加載相應(yīng)的驅(qū)動,此時 USB 虛擬串口就成功了

50、。完成枚舉之后,就可以編寫作為用口接收和發(fā)送數(shù)據(jù)的程序了。在此設(shè)計中我們只需用到 STM32 的 GPIOA,GPIOB 和串口以及 USB 時鐘。所以先要允許 GPIOA,GPIOB 和串口的時鐘。USB 時鐘會在接下來使能。下面看第一個 Set_System()S 數(shù):RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT,ENABLE);這個函數(shù)叫允許 USB 斷開線。通過查看 RCC_APB2Periph_GPIO_DISCONNECT 在程序中的定義為 RCC_APB2Periph_GPIOA。而 USB_DISCONNECT_PI

51、N 在程序中定義的為 GPIO_Pin_11。說明是程序定義的斷開線引腳是 PA11,查看 STM32 引腳圖可以看出 PA11 是連接 USB 弓|腳的 DM 弓|腳。此引腳連接到一個上拉電阻控制的三極管上面,接下來將 USB 的斷開引腳即 PA11配置成上拉的。這也就意味著在開始時這個上拉電阻使得三極管導通,從而使時 DP 腳被加上一個 1.5K 的電阻,這樣就可以開始枚舉了。第二個函數(shù) Set_USBClock(),這個函數(shù)就是先將 USB 所在的總線 AP1 經(jīng)過 PLL 分頻,得到 AP1 時鐘,然后再允許 USB 時鐘使能。第三個函數(shù) USB_Interrupts_Config()

52、,由名字可以看出是配置 USB 中斷的。在該函數(shù)中使能了兩個中斷,一個是 USB,一個是用口。程序中沒有設(shè)定它們的搶占優(yōu)先級,故默認它們的優(yōu)先級分組相同,USB 的響應(yīng)優(yōu)先級為 0,串口的響應(yīng)優(yōu)先級為 1,由于搶占優(yōu)先級相同,不存在嵌套關(guān)系,故這兩個中斷都不會被另一個中斷打斷。在它們中斷函數(shù)里面是我要處理的各個事情,等一下再介紹它們。最后是 USB_Init()o 第一句是將 pInformation 指向 Device_Info 結(jié)構(gòu)體;第三句是將pProperty 指向 Device_Property 結(jié)構(gòu)體;第四句將 pUser_Standard_Request 指針指向User_Sta

53、ndard_Requests 吉構(gòu)體。這三個結(jié)構(gòu)體都是與具體設(shè)備枚舉和功能實現(xiàn)相關(guān)的。最后一句實際上運行的是 DEVICE_PROP 中的 Virtual_Com_Port_init()這個函數(shù)。這個函數(shù)通過查看可以看到幾個函數(shù):Get_SerialNum(),此為獲取設(shè)備序列號,轉(zhuǎn)變?yōu)?Unicode 字符串。PowerOn(),連接 USB 設(shè)備,實質(zhì)是讓主機檢測到 USB 設(shè)備。USART_Config_Default(),配置串口至缺省狀態(tài),在這里波特率被設(shè)置為 9600,并且允許了接收中斷。發(fā)送中斷沒有允許。bDeviceState=UNCONNECTED,將當前狀態(tài)定義為未連接狀態(tài)

54、。到此初始化結(jié)束了。下面就是中斷部分了。中斷函數(shù)是串口的接受中斷, 程序中串口的發(fā)送中斷是沒有允許的。那么用口是如何發(fā)送數(shù)據(jù)呢?不用中斷方式,那就是直接來用寫寄存器方式來發(fā)送了。不過寫寄存器方式,當有大量數(shù)據(jù)發(fā)送時就會出現(xiàn)問題,因為它沒有判斷是否發(fā)送緩沖區(qū)為空。串口接收中斷調(diào)用的函數(shù)為 USART_To_USB_Send_Data()函數(shù)功能是從串口向 USB端發(fā)送數(shù)據(jù)。然后數(shù)據(jù)再從 USB 端向主機發(fā)送,這樣就可以與主機相互通信了。在做好的虛擬串口端可以連接一個硬件,使其通過串口將數(shù)據(jù)發(fā)送給 USB 虛擬的串口處理器中,然后可以通過設(shè)備的 USB 向 PC 機發(fā)送數(shù)據(jù)。而對于 PC 機,US

55、B設(shè)備相當于一個串口設(shè)備,它識別的也是個 COM 口,所以我們可以通過串口調(diào)試助手來查看接收到的數(shù)據(jù)。也可以用串口調(diào)試助手來發(fā)送數(shù)據(jù),通過 USB 虛擬的串口設(shè)備來返回該數(shù)據(jù)。第 5 5 章結(jié)論隨著越來越多的外設(shè)開始使用 USB 接口進行數(shù)據(jù)通信,合理并快速地實現(xiàn)基于 USB的數(shù)據(jù)傳輸顯得尤為重要, 而基于通信設(shè)備類的虛擬設(shè)備實現(xiàn)又是開發(fā)人員研究的重點。 論文研究了以 USB 通信設(shè)備類為核心的虛擬串口實現(xiàn)方案, 并對虛擬用口驅(qū)動的加載及卸載、通信命令轉(zhuǎn)換和數(shù)據(jù)高速傳輸進行了研究, 實現(xiàn)了基于通信設(shè)備類的虛擬串口驅(qū)動程序的可用版本。 與現(xiàn)有類似驅(qū)動程序相比, 該系統(tǒng)具有符合通信設(shè)備類的抽象控制

56、模型和高速傳輸?shù)葍?yōu)點,此外它還與 Windows2003、XP、Vista和 Win7 系統(tǒng)在源代碼級別兼容,具有廣闊的應(yīng)用前景。論文中通信設(shè)備類的研究及基于通信設(shè)備類的虛擬串口實現(xiàn), 對開發(fā)人員設(shè)計其他基于通信設(shè)備類的虛擬設(shè)備實現(xiàn)方案具有很好的指導意義。本論文主要完成以下工作:1) 深入研究了 Windows 驅(qū)動的工作原理, 閱讀了英文原版的 WindowsNT 文件系統(tǒng)及 USB協(xié)議中通信設(shè)備類的相關(guān)書籍,既學習了 Windows 驅(qū)動程序的的一般開發(fā)方法,又學習了符合 USB 協(xié)議的驅(qū)動程序的開發(fā)方法。閱讀了相關(guān)的驅(qū)動開發(fā)源碼,掌握了WindowsNT 操作系統(tǒng)下虛擬設(shè)備驅(qū)動程序的開發(fā)

57、方法;2)研究了現(xiàn)有的虛擬串口實現(xiàn)技術(shù),分析了各種實現(xiàn)方法的優(yōu)缺點,從中選擇了通信設(shè)備類的抽象控制模型作為虛擬串口實現(xiàn)的理論依據(jù),避免了重新設(shè)計 USB轉(zhuǎn)用口電路板及兼容性的問題,這使得虛擬串口驅(qū)動有更廣闊的應(yīng)用前景, 通用性和高效性;3)學習了 USB 協(xié)議,對通信設(shè)備類進行了深入的研究和分析,并且根據(jù)通信設(shè)備類中各模型的特點,確定了虛擬串口驅(qū)動所用的模型為抽象控制模型;4)根據(jù)虛擬串口驅(qū)動程序的設(shè)計目標,研究了虛擬串口驅(qū)動程序的總體結(jié)構(gòu)和詳細方案,對虛擬串口驅(qū)動程序中的難點和重點問題進行深入的分析和解決方法的優(yōu)化;5)根據(jù)虛擬串口驅(qū)動程序的研究結(jié)果,實現(xiàn)了該驅(qū)動程序的演示版本,進行了兼容性

58、和穩(wěn)定性的測試,通過測試得出了還需要對系統(tǒng)做后續(xù)的改進和完善的工作。參考文獻1UniversalSerialBusSpecification,Revision2.0.Compaq,Hewlett-Packard,Intel,Lucent,Microsoft,NEC,PhilipsIncJ,2000.2許永和.EZ-USBFX 系列單片機 USB 外圍設(shè)備設(shè)計與應(yīng)用M.北京:北京航空航天大學出版社,2002.3MindShare,inc,DonAnderson,DaveDzatko 孟文.USB 系統(tǒng)體系M.北京:中國電力出版社,2003.4李肇慶,廖峰,劉建存.USB 接口技術(shù)M.北京:國防工

59、業(yè)出版社,20045王成儒,李英偉.USB2.0 原理與工程開發(fā)M.北京:國防工業(yè)出版社,2004.6張帆,史彩成.Windows 設(shè)備驅(qū)動程序開發(fā)指南M.北京:北京航空航天大學出版社,2008.WalterOneyProgrammingtheMicrosoftWindowsDriverModel.MicrosoftPressJ,2003ChrisCant.WritingWindowsWDMDeviceDrivers.FocalPressJ,1999.9周立功.USB2.0 與 OTG 規(guī)范及開發(fā)指南M.北京:北京航空航天大學出版社,2004.10肖踞雄,翁鐵成,宋中慶.USB 技術(shù)及應(yīng)用設(shè)計

60、M.北京:清華大學出版社,2004.11JanAxelson.USBComplete:TheDeveloperGuideM.LakeviewResearch,2011.時光荏苒,四年的大學生活已經(jīng)接近尾聲。在畢業(yè)論文完成之際,我謹向所有給予了我指導、關(guān)心和支持的老師、同學和親人們致以最衷心的感謝!首先,深深感謝我的導師侯寧老師。有了您的悉心指導與勉勵,我才能順利完成了理論學習和畢業(yè)論文。您平易近人、治學嚴謹、知識淵博,對待生活積極樂觀,為我們營造了輕松積極的環(huán)境,真正做到了傳道、授業(yè)、解惑。您在學習和生活上給予了我很多引導和幫助,為人的和藹、敏銳的把握能力和孜孜不倦的研究精神永遠是我學習、生活和工作的榜樣,這將成為我人生中一筆寶貴的財富

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論