VB6.0環(huán)境下基于USB的虛擬串口通訊實(shí)現(xiàn)
摘要:以FTDI公司的FT232BL芯片為核心設(shè)計(jì)并實(shí)現(xiàn)了基于USB接口的計(jì)算機(jī)與單片機(jī)之間的虛擬串口通訊。單片機(jī)采用Philips公司P89系列單片機(jī),完成數(shù)據(jù)的存儲(chǔ)。計(jì)算機(jī)在Windows環(huán)境下利用MSComm通訊控件實(shí)現(xiàn)上位機(jī)與下位機(jī)之間的數(shù)據(jù)傳輸。在此提出了PC機(jī)對(duì)虛擬串口的自動(dòng)識(shí)別方法,并提供了程序的源代碼。實(shí)驗(yàn)結(jié)果表明,用虛擬串口實(shí)現(xiàn)計(jì)算機(jī)與單片機(jī)之間的USB通信,具有速度快,軟件實(shí)現(xiàn)簡單等優(yōu)點(diǎn)。
關(guān)鍵詞:VB6.0;USB口;FT232BL;虛擬串口
0 引言
數(shù)據(jù)傳輸是現(xiàn)代通訊過程中的一個(gè)重要環(huán)節(jié),在數(shù)據(jù)傳輸過程中,不僅要求數(shù)據(jù)傳輸?shù)臏?zhǔn)確率要高,而且要求速度快、連接方便。傳統(tǒng)的RS 232串口通訊和并口通訊都存在傳輸速度低、擴(kuò)展性差、安裝麻煩等缺點(diǎn),而基于USB接口的數(shù)據(jù)傳輸系統(tǒng)能夠較好地解決這些問題。目前,USB接口以其傳輸速率高、即插即用、支持熱插拔等優(yōu)點(diǎn),逐步成為PC機(jī)的標(biāo)準(zhǔn)接口。
本文中的數(shù)據(jù)傳輸系統(tǒng)采用了USB接口進(jìn)行上位機(jī)與下位機(jī)之間的數(shù)據(jù)通訊。下位機(jī)采用Philips公司P89系列單片機(jī),完成數(shù)據(jù)的存儲(chǔ)。上位機(jī)通過VB6.0編程,實(shí)現(xiàn)上位機(jī)與下位機(jī)之間的數(shù)據(jù)傳輸。
1 數(shù)據(jù)傳輸系統(tǒng)的總體設(shè)計(jì)
系統(tǒng)的硬件部分主要包括2部分:上位機(jī)端和下位機(jī)端。上位機(jī)采用PC機(jī)或筆記本電腦,操作系統(tǒng)為Windows XP,實(shí)現(xiàn)上位機(jī)和下位機(jī)之間的數(shù)據(jù)傳輸、顯示、處理、存儲(chǔ)及查詢功能。系統(tǒng)的下位機(jī)采用philips公司P89系列單片機(jī),完成數(shù)據(jù)的存儲(chǔ)。下位機(jī)為一個(gè)手持的數(shù)據(jù)存儲(chǔ)儀,由USB轉(zhuǎn)串口數(shù)據(jù)轉(zhuǎn)換模塊、TTL轉(zhuǎn)RS 422總線模塊、中央處理模塊、顯示模塊、存儲(chǔ)模塊、電源模塊等組成。上位機(jī)與下位機(jī)的連接利用PC機(jī)自帶的USB接口,原理框圖如圖1所示。
把數(shù)據(jù)記錄卡插入數(shù)據(jù)存儲(chǔ)儀內(nèi),可把卡內(nèi)數(shù)據(jù)轉(zhuǎn)存到存儲(chǔ)模塊。數(shù)據(jù)存儲(chǔ)儀通過USB口與PC機(jī)連接,把所存數(shù)據(jù)傳輸?shù)缴衔粰C(jī),上位機(jī)對(duì)數(shù)據(jù)進(jìn)行顯示、處理及存儲(chǔ)。
系統(tǒng)采用FTDI公司的FT232BL芯片作為USB轉(zhuǎn)串口模塊,可以和單片機(jī)的內(nèi)置串口直接連接,使單片機(jī)通過USB口和PC機(jī)通訊。芯片一方面可以接收從PC機(jī)發(fā)來的USB數(shù)據(jù),并將其轉(zhuǎn)換為串行I/O數(shù)據(jù)格式發(fā)送給單片機(jī)串口;另一方面可把單片機(jī)從串口發(fā)出的數(shù)據(jù)轉(zhuǎn)換為USB的數(shù)據(jù)格式傳回PC機(jī)。與其他USB接口芯片相比,用FT232BL芯片進(jìn)行USB外設(shè)開發(fā),只需熟悉單片機(jī)編程及簡單的VC或VB編程,而無需考慮固件設(shè)計(jì)以及驅(qū)動(dòng)程序的編寫,從而能大大縮短USB外設(shè)產(chǎn)品的開發(fā)周期。
2 硬件電路設(shè)計(jì)
2.1 FT232BL芯片簡介
FT232BL內(nèi)部結(jié)構(gòu)如圖2所示,主要由USB收發(fā)器、串行接口引擎(SIE)、USB協(xié)議引擎、通用異步收發(fā)(UART)先進(jìn)先出(FIFO)控制器和通用異步收發(fā)(UART)轉(zhuǎn)換器等構(gòu)成。USB收發(fā)器提供USB1.1/2.0全速物理接口到USB總線;串行接口引擎主要用于完成USB數(shù)據(jù)的串/并雙向轉(zhuǎn)換,并按照USB2.0規(guī)范來完成USB數(shù)據(jù)流的位填充/位反填充,以及循環(huán)冗余校驗(yàn)碼(CRC5/CRC16)的產(chǎn)生和檢錯(cuò);USB協(xié)議引擎管理來自USB設(shè)備控制端口的數(shù)據(jù)流;通用異步收發(fā)(UART)先進(jìn)先出(FIFO)控制器處理收發(fā)通道緩沖與通用異步收發(fā)(UART)寄存器之間的數(shù)據(jù)傳遞。
通用異步收發(fā)器(UART)實(shí)現(xiàn)與單片機(jī)(如P89V51RD2)的串行接口,通過TXD,RXD,GND3根數(shù)據(jù)線分別與單片機(jī)的RXD,TXD,GND相連,完成與單片機(jī)的數(shù)據(jù)交換。FT232BL內(nèi)含2個(gè)數(shù)據(jù)緩沖區(qū),一個(gè)是128 B的發(fā)送緩沖區(qū),另一個(gè)是384 B的接收緩沖區(qū)。它們均用于USB數(shù)據(jù)與串行I/O數(shù)據(jù)的交換緩沖區(qū)。
另外,F(xiàn)T232BL還包括1個(gè)內(nèi)置的3.3 V穩(wěn)壓器,1個(gè)6 MHz的振蕩器、8倍頻的時(shí)鐘倍頻器、USB鎖相環(huán)和電擦除只讀存儲(chǔ)器接口。
2.2 FT232BL電路設(shè)計(jì)
根據(jù)USB設(shè)計(jì)規(guī)范,USB設(shè)備有總線供電和自供電2種方式??紤]到USB通訊功能僅在連接PC機(jī)時(shí)使用,所以,F(xiàn)T232BL芯片由USB總線供電,電路其他部分通過雙觸點(diǎn)開關(guān)的一個(gè)常開觸點(diǎn)連到USB總線電源正極上。典型硬件電路如圖3所示。采用上電復(fù)位方式,通過輸出可使單片機(jī)復(fù)位。時(shí)鐘電路采用1個(gè)6 MHz無源晶振及2個(gè)27 pF的陶瓷電容組成。PWREN腳與單片機(jī)的P1.7相連,用于判斷USB總線是處于掛起狀態(tài)還是正常狀態(tài)。在USB接口的電源端接一個(gè)磁珠,用以減少主機(jī)與設(shè)備的干擾;電源端增加了去耦電容和旁路電容,以提高電路的抗干擾性。在印刷電路板的設(shè)計(jì)中,2根串行數(shù)據(jù)線的走線應(yīng)可能短,并且長度相等。圖3中的93C46(93C56或93C66)是一片電擦除只讀存儲(chǔ)器(E2PROM),用于存儲(chǔ)產(chǎn)品的VID,PID,設(shè)備序列號(hào)及一些說明性文字等。這需要用戶自己編寫,編寫的應(yīng)用程序由FTDI公司提供。用戶只需運(yùn)行相應(yīng)的VB程序,寫入相應(yīng)的信息即可。該電擦除只讀存儲(chǔ)器(E2PROM)是可選的。若沒有電擦除只讀存儲(chǔ)器(E2PROM),F(xiàn)T232BL將使用默認(rèn)的VID,PID(進(jìn)程標(biāo)識(shí)符),產(chǎn)品描述符和電源描述符,并且沒有設(shè)備的序列號(hào)。
3 上位機(jī)的軟件設(shè)計(jì)與編程
3.1 虛擬串口驅(qū)動(dòng)程序安裝
當(dāng)下位機(jī)連接到上位機(jī)的USB接口時(shí),上位機(jī)會(huì)檢測(cè)到新硬件,這時(shí)需要安裝一個(gè)從FTDI公司網(wǎng)站上免費(fèi)下載的虛擬串口(VCP)驅(qū)動(dòng)程序。該驅(qū)動(dòng)程序適用于Windows 98/2000/ME/XP等不同操作系統(tǒng)。用戶可以在這虛擬串口上進(jìn)行應(yīng)用程序的開發(fā)。該虛擬串口可以像一個(gè)標(biāo)準(zhǔn)的物理串口那樣被訪問,可本質(zhì)上所有針對(duì)虛擬串口的數(shù)據(jù)通信都是通過USB總線完成的。
3.2 上位機(jī)的軟件編程
上位機(jī)軟件采用VB 6.0提供的串口通訊MSComm控件進(jìn)行應(yīng)用程序的編寫。MSComm控件提供了功能完善的串口數(shù)據(jù)的發(fā)送和接收功能,它有2種處理通信的方式:一種是事件驅(qū)動(dòng)方式,當(dāng)串口發(fā)生事件或錯(cuò)誤時(shí),MSComm控件會(huì)產(chǎn)生OnComm事件,程序可以捕獲該事件進(jìn)行響應(yīng)處理;另一種是查詢方式,在程序中查詢MSComm控件的CommEvent屬性的值是否發(fā)生變化,從而確定響應(yīng)處理。
3.2.1 虛擬串口的自動(dòng)識(shí)別
一般來說,上位機(jī)操作系統(tǒng)為FT232BL芯片分配的虛擬COM端口是不確定的,下位機(jī)連接到同一上位機(jī)的不同USB口,其虛擬COM端口號(hào)不同,下位機(jī)連接到不同的上位機(jī),虛擬COM端口號(hào)更是無法確定。為了讓上位機(jī)能夠自動(dòng)識(shí)別下位機(jī)連接的虛擬COM口,程序中采用了循環(huán)訪問各COM口的方式,如果該COM口是存在的則按照通訊協(xié)議向該端口發(fā)送“3CH”,如果該COM口不存在,則跳過,判斷下一個(gè)COM口。如果收到下位機(jī)回送的“3CH”,則說明通訊檢測(cè)成功。
程序代碼如下:
4 系統(tǒng)運(yùn)行結(jié)果
上位機(jī)可以從下位機(jī)中讀取最多31組數(shù)據(jù)(數(shù)據(jù)組數(shù)由下位機(jī)存儲(chǔ)器容量決定),每組數(shù)據(jù)8 KB,用戶可根據(jù)需要自行選擇查看各組數(shù)據(jù)。圖4是數(shù)據(jù)傳輸系統(tǒng)實(shí)際運(yùn)行的結(jié)果。
5 結(jié)語
該系統(tǒng)通過調(diào)試,已成功應(yīng)用到項(xiàng)目中,運(yùn)行穩(wěn)定、可靠,滿足了設(shè)計(jì)需求和功能,對(duì)開發(fā)類似的系統(tǒng)具有很好的參考價(jià)值。