1.USB虛擬串口代替物理串口的可行性編程
首先,愈來愈多帶USB接口的器件涌現出來,如帶USB接口的單片機,或獨立的USB接口器件,並且這些器件的成本已經很接近於使用RS232電平轉換芯片所帶來的成本。網絡
其次,市場上也出現了一些USB接口轉串口的芯片,這些芯片一頭爲串口,另外一頭爲USB接口,在其內部完成串口到USB協議的轉換。該芯片經過USB口鏈接到我的計算機後,在操做系統中表現爲一個串口設備,這意味着USB接口對於傳統的串口調試工具(HyperTerninal)和用戶基於串口的應用程序是透明的,開發人員徹底不用更改PC端的調試和應用程序。異步
可是這些器件的USB類不屬於標準的USB設備類,所以須要在Windows和Linux操做系統上安裝額外的設備驅動。另外,因爲不是操做系統自帶的設備驅動,並且通訊通過了由串口到串口,USB從設備到USB主機的屢次轉換,當調試遇到問題時經常沒法肯定是串口出了問題仍是USB出了問題。所以,應該使嵌入式系統直接和PC經過USB總線接口鏈接(經過片上的USB接口或片外USB接口芯片),由單片機直接完成USB虛擬串口的協議轉換。函數
在USB標準子類中,有一類稱之爲CDC類,能夠實現虛擬串口通訊的協議,並且因爲大部分的操做系統(Windows和Linux)都帶有支持CDC類的設備驅動程序,能夠自動識別CDC類的設備,這樣不只免去了寫專用設備驅動的負擔,同時簡化了設備驅動的安裝。工具
2.什麼是CDC類編碼
USB的CDC類是USB通訊設備類(Communication Device Class)的簡稱。CDC類是USB組織定義的一類專門給各類通訊設備(電信通訊設備和中速網絡通訊設備)使用的USB子類。根據CDC類所針對通訊設備的不一樣,CDC類又被分紅如下不一樣的模型:USB傳統純電話業務(POTS)模型,USB ISDN模型和USB網絡模型。其中,USB傳統純電話業務模型,有可分爲直接線控制模型(Direct Line Control Model)、抽象控制模型(Abstract Control Model)和USB電話模型(USB Telephone Model),如圖1所示。本文所討論的虛擬串口就屬於USB傳統純電話業務模型下的抽象控制模型。
操作系統
3.AT89C5131的簡單介紹設計
基於單片機的嵌入式系統要實現USB總線通訊,一般都是經過外擴專用的USB總線接口芯片(如飛利浦的D12)。可是這樣的方案既增長了成本,又使PCB板的面積變大,因此使用Atmel公司的集成了USB2.0全速(Full Speed)從接口外設的51單片機AT89C5131。調試
AT89C5131是一個基於52內核的單片機。在存儲器方面,其內部集成了32KB的Flash存儲器用於代碼的存儲,1KB的EEPROM存儲器用於用戶數據的存儲,用戶可使用片上的Bootloader或Flash API經過USB接口或者其餘接口(如UART和I2C總線)對Flash存儲器和EEPROM存儲器進行ISP或者IAP編程。 此外AT89C5131還集成了10位的ADC、I2C總線接口和PCA模塊等豐富的外設。
接口
AT89C5131的USB2.0全速從接口包含了7個終端點,其中0號終端點被配置成爲默認的控制終端點。其餘1~6號終端點均可以經過特殊寄存器配置爲控制(Control),突發(Bulk),中斷(Interrupt)和週期性(Isochronous)模式。因爲每個終端點都由一組獨立的寄存器對該終端點進行控制、狀態識別和數據的存取,則若是將這些寄存器直接映射到51單片機的特殊功能寄存器地址空間顯然是容納不下的。所以,這7個終端點的7組寄存器在單片機的地址空間中其實使用的是同一組寄存器的地址,而經過一個特殊功能寄存器(UEPNUM)來選擇當前該組寄存器實際選擇的是哪一個終端點的寄存器組,這樣就大大節省了所佔用的地址空間,爲集成其餘特殊外設提供了可能。
4.基於AT89C5131的CDC類的實現
AT89C5131與USB接口的硬件鏈接很簡單,選用一個Btype的USB插座,由於按照USB規範,從設備使用Btype的USB插座,主設備使用Atype的USB插座,將Btype的USB插座的D+和D-腳分別與AT89C5131上的D+和D-腳相連。而後再在電源和D+之間用一個1.5 kΩ的上拉電阻鏈接,由於按照USB規範,USB主設備是經過從設備在插入時D+和D-上的絕對電平來肯定從設備是一個全速設備仍是一個低速設備的,而AT89C5131是一個全速設備,因此須要將D+上拉。
下面介紹虛擬串口的單片機軟件設計與實現。首先來看一下終端點的分配,按照CDC類抽象控制模型對終端點的需求,將單片機0號終端點和1號終端點分配給通訊接口子類,分別做爲控制終端點(完成枚舉和串口參數設置)和中斷終端點,而將2號和3號終端點分配給數據接口子類,分別做爲IN和OUT終端點,虛擬串口的數據主要從這兩終端點來進行傳送。
軟件使用Keil C51爲編譯系統,爲了便於和系統的其餘程序集成,採用標準字符型設備的API接口usb_getc()和usb_putc(),使程序具備很好的移植性。應用程序層函數(usb_getc()和usb_putc())與USB中斷處理程序經過兩個先進先出FIFO循環隊列(TX和RX)來交換數據,這樣有效的起到收發緩衝的做用,防止緩衝溢出。
5.總結
在單片機上實現基於CDC類的USB虛擬串口很好的適應了當前計算機外設接口的發展,同時由於這樣的接口在PC操做系統中仍然映射爲一個串口,因此又避免了大量的PC端調試程序和應用程序的從新編寫。