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

下載本文檔

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

文檔簡介

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

2、信命令轉(zhuǎn)換符合通信設(shè)備類中抽象控制模型的規(guī)范,數(shù)據(jù)傳輸部分對現(xiàn)有虛擬串口的實(shí)現(xiàn)技術(shù)進(jìn)行了改進(jìn)。論文的主要工作如下:1)研究了 USB 協(xié)議的請求和傳輸模式,分析了通信設(shè)備類實(shí)現(xiàn)虛擬設(shè)備的方案。2)給出了一種符合通信設(shè)備類中抽象控制模型的虛擬串口實(shí)現(xiàn)方案。該方案提供了一種基于通信設(shè)備類開發(fā)虛擬設(shè)備的模板,對設(shè)計(jì)中的諸多問題進(jìn)行了詳細(xì)的說明,并改進(jìn)了虛擬串口驅(qū)動程序中數(shù)據(jù)的處理流程。3)將改進(jìn)后的數(shù)據(jù)處理流程應(yīng)用于虛擬串口的實(shí)現(xiàn)中,生成了一種基于通信設(shè)備類的穩(wěn)定、高速的虛擬串口。最后,在串口測試軟件下對虛擬審驅(qū)動程序進(jìn)行了測試,達(dá)到了預(yù)期目標(biāo)。關(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è)計(jì)背景及其意義41.2USB虛擬串口設(shè)計(jì)研究方法及目標(biāo)41.3USB虛擬串口設(shè)計(jì)國內(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章虛擬串口的實(shí)現(xiàn)15串口的工作原理15USB虛擬串口設(shè)計(jì)16STM32USB吾B分說明16USB電路連接16虛擬串口程序設(shè)計(jì)17第5章結(jié)論20參考文獻(xiàn)22致明寸23附錄:24第 1 1 章緒論USB虛擬串口設(shè)計(jì)背景及其意義USB 是一種統(tǒng)一的傳輸規(guī)范,但是接口有許多種,最常見的就是咱們電腦上用的那種扁平的,這叫做 A 型口,里面有 4 根連線,根據(jù)誰插接誰分為公母接口,一般

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

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

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

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

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

15、和串口轉(zhuǎn)換的開發(fā)效率,國外有很多公司都開發(fā)出了相應(yīng)的控制芯片。中國臺灣地區(qū)的許多公司可以生產(chǎn)實(shí)現(xiàn)這種轉(zhuǎn)換的設(shè)備,并提供功能齊全的開發(fā)接口和文檔說明。 國內(nèi)集成電路的設(shè)計(jì)開發(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)換器,其重點(diǎn)都是放在虛擬串口設(shè)備的設(shè)計(jì)上。一個好的轉(zhuǎn)接器需要設(shè)計(jì)一個能列舉虛擬串口的驅(qū)動程序,在這

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

17、的普及,通過 TCP/IP 網(wǎng)絡(luò)實(shí)現(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ù)重定向到一個虛擬用口上。這樣,平臺軟件通過虛擬審口進(jìn)行數(shù)據(jù)收發(fā)。USB 和串口之間的轉(zhuǎn)換實(shí)現(xiàn),還有一種實(shí)現(xiàn)是軟件實(shí)現(xiàn)。這里的軟件實(shí)現(xiàn)主要指設(shè)計(jì)USB 轉(zhuǎn)用口的驅(qū)動程序。在 USB 中 CDC 子類成為規(guī)范之前,USB 轉(zhuǎn)用口的驅(qū)動程序的實(shí)現(xiàn)各種各樣,且基于

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

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

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

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

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

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

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

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

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

27、的控制傳輸包括三個過程:建立連接、數(shù)據(jù)過程、狀態(tài)過程。建立連接的過程都是有主機(jī)發(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ù)傳輸方向相反,因?yàn)榇穗A段主要是用來確認(rèn)之前兩階段的所有數(shù)據(jù)已經(jīng)正確傳輸了。下面是枚舉詳細(xì)過程:首先獲取設(shè)備描述符。USB 主機(jī)檢測到 USB 設(shè)備插入后,就會先對設(shè)備復(fù)位。設(shè)備復(fù)位后,USB 主機(jī)就會對地址為 0 的設(shè)備發(fā)送獲取設(shè)備描述符的標(biāo)

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

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

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

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

32、ass)。如果提供相似格式的數(shù)據(jù)流或者相似的主機(jī)交換方式,兩個設(shè)備則被統(tǒng)一在一個類中。如USB 標(biāo)準(zhǔn)就有:AudioClass、CommunicationsDeviceClassHIDClass、VideoClass 等用于在 USB 接口上實(shí)現(xiàn)不同的設(shè)備接口。USB 標(biāo)準(zhǔn)協(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è)備層次的定義,通常用于標(biāo)示一個通訊設(shè)備與該設(shè)備可以提供相應(yīng)的接口。通訊接口類則定義了相應(yīng)的通訊服務(wù),包括如何對設(shè)備進(jìn)行管理和控制,數(shù)據(jù)接口類則定義了如何傳輸數(shù)據(jù)。這兩個接口子類占有不同數(shù)量和類型的終端點(diǎn)(Endpoints)。對于前面所述的不同 CDC 類模型,其所對應(yīng)的接口的終端點(diǎn)需求也是不同的。如所需要討論的抽象控制模型對終端點(diǎn)的需求,通信接口類需要一個控制終端點(diǎn)(ControlEndpoint)和一個可選的中斷(Interrupt)型終端點(diǎn),數(shù)據(jù)接口子類需要一個方向?yàn)檩斎?(IN) 的周期性

35、(Isochronous 型終端點(diǎn)和一個方向?yàn)檩敵觯∣UT)的周期性型終端點(diǎn)。其中控制終端點(diǎn)主要用于 USB 設(shè)備的枚舉和虛擬串口的波特率和數(shù)據(jù)類型(數(shù)據(jù)位數(shù)、停止位和起始位)設(shè)置的通信。輸出方向的非同步終端點(diǎn)用于主機(jī)(Host)向從設(shè)備(Slave)發(fā)送數(shù)據(jù),相當(dāng)于傳統(tǒng)物理用口中的 TXD 線(如果從單片機(jī)的角度看),輸入方向的非同步終端點(diǎn)用于從設(shè)備向主機(jī)發(fā)送數(shù)據(jù),相當(dāng)于傳統(tǒng)物理用口中的 RXD 線6。USB通信過程USB 最主要的的是要理解 USB 主機(jī)發(fā)送命令給設(shè)備,設(shè)備要對主機(jī)的命令進(jìn)行響應(yīng),USB 通訊的基本單位為“包”理解好“包”這個概念是學(xué)習(xí) 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校驗(yàn)和結(jié)束。握手包僅有 PID 域,沒有數(shù)據(jù)也沒有校驗(yàn)和。分離傳輸會用到一類特殊的包,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的地址和下行端口編號以及端點(diǎn)類型(控制、中斷、批量、同步)。以及此次傳輸中數(shù)據(jù)在整個數(shù)據(jù)中的位置(第一個包、中間的包、末尾的包)。令牌包可分為輸入包、輸出包、設(shè)置包和幀起始包(注意這里的輸入包是用于設(shè)置輸入命令的,輸出色是用來設(shè)置輸出命令的,而不

38、是放據(jù)數(shù)的)其中輸入包、輸出包和設(shè)置包的格式都是一樣的:SYNC+PID+ADDR+ENDP+CRC5(五位的校驗(yàn)碼)。幀起始包的格式是 SYNC+PID+11 位 FRAM+CRC5(五位的校驗(yàn)碼)。數(shù)據(jù)包可以分為 DATA0 包和 DATA1 包, 當(dāng) USB 發(fā)送數(shù)據(jù)的時候, 當(dāng)一次發(fā)送的數(shù)據(jù)長度大于相應(yīng)端點(diǎn)的容量時, 就需要把數(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ù)傳輸。雖然高速總線和全速低速總線的幀周期不一樣,當(dāng)時包中幀編號的增加速度是 USB/USBSOF 一樣的,因?yàn)樵诟咚?USB 系統(tǒng)中,SOF 包中幀編號實(shí)際上取得是計(jì)數(shù)器的高 11 位, 最低三位作為微幀編號沒有使用, 因此其幀編號的增加周期也為 1msoU

40、SB 采用 Httleedian 字節(jié)順序,在總線上先傳輸一個字節(jié)的最低有效位,最后傳輸最高有效位,采用 NRZI 編碼,若遇到連續(xù)的 6 個 1 要求進(jìn)行為填充,即插入一個 00所有的USB包都由 SYNC開始, 高速包的 SYNC寬度為 32bit,全速/低速包的 SYNC段長度為 8bit。實(shí)際接收到的 SYNC 產(chǎn)度由于 USBHUB 的關(guān)系,可能會小于該值。第 4 4 章虛擬串口的實(shí)現(xiàn)4.1串口的工作原理之所以取名為“串行”端口,是因?yàn)檫@種端口會將數(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ā)送奇偶校驗(yàn)位。1)波特率。這是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的 bit 的個數(shù)。例如300 波特表示每秒鐘發(fā)送 300 個 bit。當(dāng)我們提到時鐘周期時,我們就是指波特率例如如果協(xié)議需要 4800 波特率,那么時鐘是 4800Hz0這意味著串口通信在數(shù)據(jù)線上的采樣率為 4800H

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

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

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

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

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

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

48、枚舉過程中的獲取設(shè)備描述符部分, 主機(jī)如果要識別成串口, 就要將此 USB 設(shè)備的描述符寫成虛擬串口的描述符,要根據(jù) CDC 類通信協(xié)議進(jìn)行編寫。此程序設(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,/*端點(diǎn) 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)編碼*/*制造商標(biāo)示符*/*產(chǎn)品標(biāo)示符*/*設(shè)備用口號描述符*/0 x01/*可能配置數(shù),指配置字符串的個數(shù)*/);在枚舉前期,USB 主機(jī)發(fā)送 SETUP 包,然后獲取設(shè)備描述符,然后會得知設(shè)備的類型,再加載相應(yīng)的驅(qū)動,此時 USB 虛擬串口就成功了

50、。完成枚舉之后,就可以編寫作為用口接收和發(fā)送數(shù)據(jù)的程序了。在此設(shè)計(jì)中我們只需用到 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配置成上拉的。這也就意味著在開始時這個上拉電阻使得三極管導(dǎo)通,從而使時 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)先級,故默認(rèn)它們的優(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è)備枚舉和功能實(shí)現(xiàn)相關(guān)的。最后一句實(shí)際上運(yùn)行的是 DEVICE_PROP 中的 Virtual_Com_Port_init()這個函數(shù)。這個函數(shù)通過查看可以看到幾個函數(shù):Get_SerialNum(),此為獲取設(shè)備序列號,轉(zhuǎn)變?yōu)?Unicode 字符串。PowerOn(),連接 USB 設(shè)備,實(shí)質(zhì)是讓主機(jī)檢測到 USB 設(shè)備。USART_Config_Default(),配置串口至缺省狀態(tài),在這里波特率被設(shè)置為 9600,并且允許了接收中斷。發(fā)送中斷沒有允許。bDeviceState=UNCONNECTED,將當(dāng)前狀態(tài)定義為未連接狀態(tài)

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

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

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

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

58、和穩(wěn)定性的測試,通過測試得出了還需要對系統(tǒng)做后續(xù)的改進(jìn)和完善的工作。參考文獻(xiàn)1UniversalSerialBusSpecification,Revision2.0.Compaq,Hewlett-Packard,Intel,Lucent,Microsoft,NEC,PhilipsIncJ,2000.2許永和.EZ-USBFX 系列單片機(jī) USB 外圍設(shè)備設(shè)計(jì)與應(yīng)用M.北京:北京航空航天大學(xué)出版社,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.北京:北京航空航天大學(xué)出版社,2008.WalterOneyProgrammingtheMicrosoftWindowsDriverModel.MicrosoftPressJ,2003ChrisCant.WritingWindowsWDMDeviceDrivers.FocalPressJ,1999.9周立功.USB2.0 與 OTG 規(guī)范及開發(fā)指南M.北京:北京航空航天大學(xué)出版社,2004.10肖踞雄,翁鐵成,宋中慶.USB 技術(shù)及應(yīng)用設(shè)計(jì)

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

溫馨提示

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

評論

0/150

提交評論