STM32的USB虛擬串口設計_第1頁
STM32的USB虛擬串口設計_第2頁
STM32的USB虛擬串口設計_第3頁
STM32的USB虛擬串口設計_第4頁
STM32的USB虛擬串口設計_第5頁
免費預覽已結束,剩余37頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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虛擬串口設計背景及其意義41.2USB虛擬串口設計研究方法及目標41.3USB虛擬串口設計國內外研究現狀5第2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

36、格式如圖 3.2 所示。電話模型網絡模型(CommunicationISDN模型FieldPIDADDRENDPDATACRCFrameNumberBits4+474N*8(N=0,.,1024)5/1611圖3.2USB數據包的格式對于數據包來說, PID 之后直接跟數據域, 數據域的長度為 N 字節, 數據域后以 16 位的 CRC校驗和結束。握手包僅有 PID 域,沒有數據也沒有校驗和。分離傳輸會用到一類特殊的包,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的地址和下行端口編號以及端點類型(控制、中斷、批量、同步)。以及此次傳輸中數據在整個數據中的位置(第一個包、中間的包、末尾的包)。令牌包可分為輸入包、輸出包、設置包和幀起始包(注意這里的輸入包是用于設置輸入命令的,輸出色是用來設置輸出命令的,而不

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

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

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

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

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

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

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

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

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

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

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

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

50、。完成枚舉之后,就可以編寫作為用口接收和發送數據的程序了。在此設計中我們只需用到 STM32 的 GPIOA,GPIOB 和串口以及 USB 時鐘。所以先要允許 GPIOA,GPIOB 和串口的時鐘。USB 時鐘會在接下來使能。下面看第一個 Set_System()S 數:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT,ENABLE);這個函數叫允許 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 的電阻,這樣就可以開始枚舉了。第二個函數 Set_USBClock(),這個函數就是先將 USB 所在的總線 AP1 經過 PLL 分頻,得到 AP1 時鐘,然后再允許 USB 時鐘使能。第三個函數 USB_Interrupts_Config()

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論