摘要:為解決當(dāng)前計(jì)算機(jī)串行通訊接口只有USB,難以滿(mǎn)足舊型號(hào)設(shè)備或某些單片機(jī)要求RS232通訊的問(wèn)題,設(shè)計(jì)出兩款RS232/USB電路。采用CH341A與MAX223集成電路芯片構(gòu)建標(biāo)準(zhǔn)9線(xiàn)RS232/USB通用接口轉(zhuǎn)換器,無(wú)需編程。采用CH341A與PIC16F877A構(gòu)建單片機(jī)與計(jì)算機(jī)之間的U-SB通訊電路,軟件遵循RS232通訊協(xié)議,硬件進(jìn)行電平轉(zhuǎn)換。實(shí)際使用表明,這兩款產(chǎn)品與計(jì)算機(jī)端Windows操作系統(tǒng)下的串口應(yīng)用程序完全兼容,且通訊過(guò)程中無(wú)握手失敗現(xiàn)象。
關(guān)鍵詞:USB;RS232C;通訊;接口
隨著計(jì)算機(jī)技術(shù)的發(fā)展,具有熱插拔功能的USB接口逐漸取代了RS232C接口,使得采用RS232C通訊的舊式設(shè)備應(yīng)用受到限制。此外,由于RS232C通訊接口編程簡(jiǎn)單,控制靈活,大多數(shù)MCU仍然把它作為一個(gè)標(biāo)準(zhǔn)模塊固化在其外圍電路當(dāng)中。目前,市面上雖然有一些成型的USB/ RS232C轉(zhuǎn)換產(chǎn)品,但功能比較簡(jiǎn)單,只支持3線(xiàn)通信方式,并且與PC端的串口應(yīng)用程序不完全兼容,使用過(guò)程中經(jīng)常出現(xiàn)握手失敗的情況。本文根據(jù)實(shí)際情況中PC的USB接口使用情況,設(shè)計(jì)了兩款產(chǎn)品,在芯片廠家提供的驅(qū)動(dòng)程序下,僅需少量編程即可滿(mǎn)足USB與RS232C接口的轉(zhuǎn)換問(wèn)題,以及實(shí)現(xiàn)MCU與PC之間的USB串口通信。
1 CH341A簡(jiǎn)介
CH341A是南京沁恒公司生產(chǎn)的USB總線(xiàn)轉(zhuǎn)接芯片,其引腳排列如圖1所示。當(dāng)CH341A工作在異步串口模式時(shí),CH341A提供串口發(fā)送使能、串口接收就緒等交互式的速率控制信號(hào)以及常用的MODEM聯(lián)絡(luò)信號(hào),用于為計(jì)算機(jī)擴(kuò)展異步串口,或者將普通的串口設(shè)備直接升級(jí)到USB總線(xiàn)。
異步串口方式下CH341A芯片的引腳包括:數(shù)據(jù)傳輸引腳、硬件速率控制引腳、工作狀態(tài)引腳、MODEM聯(lián)絡(luò)信號(hào)引腳、輔助引腳。
數(shù)據(jù)傳輸引腳包括:TXD引腳和RXD引腳。串口空閑時(shí)TXD和RXD為高電平。硬件速率控制引腳包括:TEN#引腳和RDY#引腳。TEN#是串口發(fā)送使能,當(dāng)其為高電平時(shí),CH341將暫停從串口發(fā)送數(shù)據(jù),直到TEN#為低電平才繼續(xù)發(fā)送。RDY#引腳是串口接收就緒,當(dāng)其為高電平時(shí),說(shuō)明CH341還未準(zhǔn)備好接收,暫時(shí)不能接收數(shù)據(jù),其原因可能是芯片正在復(fù)位、USB尚未配置或者已經(jīng)取消配置、或者串口接收緩沖區(qū)已滿(mǎn)等。
工作狀態(tài)引腳包括:TNOW引腳和ROV#引腳。TNOW以高電平指示CH341正在從串口發(fā)送數(shù)據(jù),發(fā)送完成后為低電平,在半雙工串口方式下,TNOW可以用于指示串口收發(fā)切換狀態(tài)。ROV#以低電平指示CH341A內(nèi)置的串口接收緩沖區(qū)即將或者已經(jīng)溢出,后面的數(shù)據(jù)將有可能被丟棄,正常情況下接收緩沖區(qū)不會(huì)溢出,所以ROV#應(yīng)該為高電平。MODEM聯(lián)絡(luò)信號(hào)引腳包括:CTS#引腳、DSR#引腳、RI#引腳、DCD#引腳、DTR#引腳、RTS#引腳。所有這些MODEM聯(lián)絡(luò)信號(hào)都是由計(jì)算機(jī)應(yīng)用程序控制并定義其用途,而非直接由CH341控制,如果需要較快的速率控制信號(hào),可以用硬件速率信號(hào)代替。
CH341A芯片的ACT#引腳用于USB設(shè)備配置完成狀態(tài)輸出。當(dāng)USB設(shè)備尚未配置或者取消配置后,該引腳輸出高電平,當(dāng)USB設(shè)備配置完成后,該引腳輸出低電平。CH341A芯片內(nèi)置USB上拉電阻,UD+和UD-引腳可直接連接到USB總線(xiàn)上。CH341A芯片內(nèi)置電源上電復(fù)位電路,RSTI引腳用于從外部輸入異步復(fù)位信號(hào);當(dāng)RSTI引腳為高電平時(shí),CH341A芯片被復(fù)位;當(dāng)RSTI引腳恢復(fù)為低電平后,經(jīng)過(guò)20 ms左右的復(fù)位延時(shí)后,進(jìn)入工常工作狀態(tài)。
CH341A內(nèi)置了獨(dú)立的收發(fā)緩沖區(qū),支持單工、半雙工或者全雙工異步串行通訊。串行數(shù)據(jù)包括1個(gè)低電平起始位、5~8個(gè)數(shù)據(jù)位、1或2個(gè)高電平停止位,支持奇校驗(yàn)/偶校驗(yàn)/標(biāo)志校驗(yàn)/空白校驗(yàn)。CH341A支持常用通訊波特率:50、75、100、110、134.5、150、300、600、900、1 200、1 800、2 400、3 600、4 800、9 600、14 400、19 200、28 800、33 600、38 400、56 000、57 600、76 800、115 200、128 000、153 600、230 400、460 800、921 600、1 500 000、2 000 000等。
CH341A的通訊操作采用虛擬形式,在計(jì)算機(jī)端安裝好驅(qū)動(dòng)程序后,即將USB接口虛擬成RS232接口,便可利用RS232通訊協(xié)議對(duì)USB進(jìn)行操作。CH341A設(shè)備驅(qū)動(dòng)程序安裝成功,并與計(jì)算機(jī)可靠連接后,在“設(shè)備管理器”中顯示的信息如圖2所示。
2 轉(zhuǎn)換器設(shè)計(jì)
2.1 USB/RS232轉(zhuǎn)換器
該轉(zhuǎn)換器只應(yīng)用于USB接口或RS232接口不夠,需采用RS232進(jìn)行通訊的場(chǎng)合。利用CH341A進(jìn)行USB與標(biāo)準(zhǔn)9線(xiàn)RS232串口轉(zhuǎn)換的電路原理圖如圖3所示,該轉(zhuǎn)換器在上位機(jī)驅(qū)動(dòng)程序的管理下,無(wú)需二次編程開(kāi)發(fā)。由于轉(zhuǎn)換器功耗很小,由USB端口提供電源;在CH341A的XI、XO引腳接入12M晶振,以提供芯片內(nèi)部時(shí)基,起振電容C13、C14為20pF。將轉(zhuǎn)換器與計(jì)算機(jī)通過(guò)USB接口連接后,發(fā)光二極管VD1被點(diǎn)亮,表示CH341A配置完成,可以進(jìn)行后續(xù)操作。電平適配轉(zhuǎn)換芯片采用MAX223,其外圍電容器件用穩(wěn)定性能較好的鉭電解電容,容值為1μF。MAX223支持掛起狀態(tài),當(dāng)SHDN引腳為低電平時(shí),MAX223進(jìn)入掛起狀態(tài),由于CH341A支持的通訊波特率能滿(mǎn)足大多數(shù)要求,故本設(shè)計(jì)中把SHDN直接接高電平。
本設(shè)計(jì)采用MAX223是為了減小產(chǎn)品體積,實(shí)現(xiàn)標(biāo)準(zhǔn)9線(xiàn)RS232串口的轉(zhuǎn)換,在實(shí)際成型產(chǎn)品中,可以采用3個(gè)MAX232代替,由于外圍電容以及集成電路數(shù)量的增加,轉(zhuǎn)換器的體積也會(huì)隨之增大。在大多數(shù)場(chǎng)合,3線(xiàn)串口即可滿(mǎn)足要求,如STC系列單片機(jī)的ISP程序下載應(yīng)用,此時(shí),可采用小型化的CH341T及單片MAX232進(jìn)一步減小體積。
利用串口調(diào)試助手對(duì)轉(zhuǎn)換器進(jìn)行通訊測(cè)試的結(jié)果如圖4所示。測(cè)試過(guò)程中,轉(zhuǎn)換器與計(jì)算機(jī)連接后虛擬端口為COM3,利用RS232標(biāo)準(zhǔn)線(xiàn)纜將轉(zhuǎn)換器與另一臺(tái)計(jì)算機(jī)的COM1端口相連。通訊采用的波特率為9 600,8位數(shù)據(jù)位,1位停止位,無(wú)校驗(yàn)位,2個(gè)端口每隔1 000 ms自動(dòng)發(fā)送數(shù)據(jù)。由圖4可見(jiàn),該轉(zhuǎn)換器能夠在不同計(jì)算機(jī)的USB/RS232端口間進(jìn)行可靠通訊。此外,采用2個(gè)轉(zhuǎn)換器,可實(shí)現(xiàn)不同計(jì)算機(jī)間的USB通訊,經(jīng)測(cè)試工作可靠。
2.2 MCU與PC之間USB通訊適配
該適配電路適用于計(jì)算機(jī)無(wú)RS232接口,卻需進(jìn)行RS232通訊的數(shù)據(jù)采集系統(tǒng),MCU進(jìn)行底層相關(guān)數(shù)據(jù)的采集與存儲(chǔ),然后在上位機(jī)的控制下通過(guò)適配電路進(jìn)行數(shù)據(jù)的傳遞。MCU與PC機(jī)通過(guò)USB接口進(jìn)行通訊的適配器原理電路如圖5所示,在本設(shè)計(jì)中MCU采用microchip公司的PIC1 6F877A,利用MCU的串口模塊,可以與CH341A直接構(gòu)成3線(xiàn)串口通訊方式,經(jīng)過(guò)CH341A轉(zhuǎn)換后,通過(guò)USB接口與PC機(jī)相連。當(dāng)PC串口通訊波特率較高或者單片機(jī)來(lái)不及接收,利用MCU的RD0引腳控制CH341A的TEN#引腳,當(dāng)MCU空閑且可以接收串口數(shù)據(jù)時(shí)置TEN#為低電平,當(dāng)單片機(jī)較忙或者不便于接收串口數(shù)據(jù)時(shí)置TEN#為高電平。使CH341A暫停發(fā)送下一個(gè)字節(jié),實(shí)現(xiàn)速率控制。
單片機(jī)軟件流程如圖6所示,系統(tǒng)初始化完成I/O口、看門(mén)狗等設(shè)置;串口初始化進(jìn)行波特率、檢驗(yàn)位、通訊方式等設(shè)置。
上位機(jī)軟件向單片機(jī)發(fā)送一個(gè)指令,當(dāng)單片機(jī)檢測(cè)到該指令后判斷是否有鍵按下,如果有,則進(jìn)行相應(yīng)鍵值的判斷,根據(jù)鍵值的不同向上位機(jī)發(fā)送不同的數(shù)據(jù)。在對(duì)本電路測(cè)試中,上位機(jī)指令代碼為“CCh”,單片機(jī)發(fā)送的數(shù)據(jù)與鍵值相對(duì)應(yīng),如按下1號(hào)鍵,發(fā)送數(shù)據(jù)“01h”,測(cè)試結(jié)果如圖7所示。
上述兩種產(chǎn)品結(jié)構(gòu)緊湊,體積小巧,通訊可靠,可以滿(mǎn)足絕大多數(shù)應(yīng)用場(chǎng)合的需求,但在通訊速率的設(shè)置上,應(yīng)盡量采用CH341推薦的波特率,否則可能出現(xiàn)通訊異常的情況。
實(shí)際上,CH341推薦的波特率基本涵蓋了各類(lèi)通訊軟件及產(chǎn)品所采用的波特率,也與51系列MCU采用11.059 2 MHz晶振時(shí)設(shè)置的波特率相兼容,因此,推薦波特率也可以滿(mǎn)足各種場(chǎng)合的需求。
3 結(jié)束語(yǔ)
CH341A作為一種新型的、功能強(qiáng)大的USB接口轉(zhuǎn)換芯片,可以工作在多種模式,且接線(xiàn)簡(jiǎn)單、控制方便、使用靈活,可滿(mǎn)足用戶(hù)的多種需求。由于CH341A屏蔽了USB接口的底層協(xié)議,可以方便地在嵌入式系統(tǒng)中增加USB接口,無(wú)需電平轉(zhuǎn)換器件,在驅(qū)動(dòng)程序的控制下直接與PC機(jī)通訊,極大地方便了用戶(hù),縮短開(kāi)發(fā)周期、減少研發(fā)費(fèi)用。