程麗玲
(浙江省檢驗檢疫科學技術研究院,浙江 杭州 310020)
通用異步接收發(fā)送器(universal asynchronous receiver/transmitter,UART)和通用串行總線(universal serial bus,USB)是用戶經常使用的兩種通信接口。由于USB靈活的協議設置、接口擴展功能以及即插即用等優(yōu)點,目前在消費電子產品領域USB接口已經逐步取代了UART接口。UART接口具有協議簡單、數據流穩(wěn)定可靠等優(yōu)點,在工業(yè)計算機、工業(yè)專用電子設備和測試設備領域仍占有一席之地。因此,在許多場合很多電子設備會同時設計成兼具UART和USB接口,并分別為這兩種接口配備各自獨立的應用協議軟件和各自獨立的內存。這樣的設計存在內存空間浪費,不能同時進行數據分析、傳輸和通信等問題,不利于數據的高效使用,在資源急缺的今天絕對不是一種好的選擇。
本文通過研究通用異步接收發(fā)送器(UART)接口和通用串行總線(USB)接口的通信格式和協議特點,提出一種支持UART和USB雙模通信的驅動軟件構架以及硬軟件設計方法,以解決雙通道共用中統(tǒng)一數據鏈路層和應用接口層等關鍵技術設計難題。
UART和USB雙模通信接口主要由硬件接口層、協議棧層和應用接口層組成,如圖1所示。
圖1 雙模接口架構Fig.1 Structure of the two mode interface
硬件接口層的主要功能是提供雙通道數據通信所需的物理接口和硬件電路,由USB和UART物理接口、USB接口芯片和接口電平轉換芯片組成。其中,USB物理接口負責對外連接主USB設備,UART物理接口提供對外部其他UART設備的連接通道;USB接口芯片負責USB協議的實現和相關的通信工作;接口電平轉換芯片負責RS-232電平和TTL電平的轉換。
協議棧層的主要功能是實現USB接口芯片和UART數據通路的驅動程序和協議。協議棧在實現過程中,并不是簡單地將USB和UART協議分別實現,而是在數據鏈路上將UART和USB兩個數據通道有效融合,達到提高數據傳輸效率和節(jié)省內存的目的。
接口軟件層的主要功能是提供用戶應用程序需要的接口函數,使用戶應用程序可以方便地控制和調用協議棧層提供的各項功能,進而控制USB和UART兩個數據通路,并進行數據交互。
USB和UART兩種數據通道采用的協議和傳輸數據的速率不同,給數據鏈路層和應用接口層的統(tǒng)一帶來了很大的困難。
首先,USB協議[1]與UART協議在數據鏈路層和應用接口層體現出的具體功能函數存在較大差別。為了解決這個矛盾,我們可以先梳理USB協議和UART協議提供的各項數據傳輸功能和輔助功能,將相同功能和相似功能(例如數據發(fā)送和數據接收功能為兩個端口均具備的功能)加以整合保留;而對于兩個端口各自的特殊功能(例如USB端口的掛起和復位功能),則封裝為具有自動處理特性的功能子函數,并利用TMS320VC5402DSP所特有的軟件中斷功能來統(tǒng)一處理。通過這一獨特設計,用戶無需關心這些特殊功能的實現和使用,當數據通信過程中發(fā)生該類動作時,數據鏈路層自動觸發(fā)內部的軟件中斷,并調用對應的軟件中斷函數,自動完成相應處置并實現對應功能。
其次,USB和UART的端口數據傳輸速率不同,對各種中斷事件響應的速度要求也存在很大差異。為了解決這個矛盾,在設計數據鏈路層時可增加一個通道狀態(tài)寄存器。該寄存器會跟隨數據鏈路傳輸數據過程動態(tài)更新。這不僅可以告知用戶數據通道處于何種狀態(tài),而且更重要的是數據鏈路層和應用接口層的各功能函數可以在需要的時候查詢該寄存器的狀態(tài),從而調用不同的時延函數,進而使USB和UART兩個數據通道的傳輸速率和中斷響應時間達到平衡統(tǒng)一,而無需用戶的干預。
USB和UART雙模通信接口硬件部分主要由型號為 PDIUSBD12[2]的 USB 接口專用芯片、MAX3221 電平轉換芯片、TMS320VC5402[3]主控芯片等器件構成。
USB接口與UART接口的物理層存在很大差異,這兩類接口的電平定義與接口形式不同。因此,本設計在物理電路層采用各自獨立的信道來實現,而在軟件層面實現協議的融合和交互處理。
本設計采用PDIUSBD12芯片來實現USB通路底層通信的數據鏈路級交互。該芯片提供一個并行接口同主處理器互聯,最高數據吞吐速率可以達到2 Mbit/s。此外,該芯片內部高度集成了USB通信所需的各種硬件資源,可以減小系統(tǒng)物料清單(bill of material,BOM)元件的數量,使設計簡化。
系統(tǒng)主控芯片采用TMS320VC5402。該芯片具有144 MHz的工作主頻,峰值運算速度可達288 MIPS,可以勝任高速數據吞吐的處理任務。TMS320VC5402具有豐富的外設接口,包括一個16位并行外部總線接口,可以方便地掛接 USB接口專用芯片。同時,TMS320VC5402具有豐富的I/O接口,配合內部的程序資源,可以實現UART協議和控制接口。
UART接口通常采用兩種電平格式,即TTL電平和RS-232電平。因此,本設計采用MAX3221芯片負責將主處理器提供的UART信號由TTL電平轉換為RS-232電平。
硬件原理圖如圖2所示。
圖2 雙模接口硬件原理圖Fig.2 Principle of the two mode interface hardware
系統(tǒng)的軟件主要包括USB和UART驅動程序、數據鏈路處理程序和應用接口程序等。在此將重點介紹系統(tǒng)軟件的整體框架和實現方法,最后以實際應用為例介紹接口函數的使用[4]。
本系統(tǒng)的軟件部分主要由驅動程序、數據鏈路處理程序和接口程序組成,其框圖如圖3所示。
圖3 軟件系統(tǒng)組成圖Fig.3 Composition of software system
端口初始化子函數、發(fā)送數據包子函數是本設計軟件體系中的兩個關鍵函數[6-8]。
端口初始化子函數用于對端口進行初始化操作,只有對端口進行正確的初始化操作,才能使端口正常進入工作狀態(tài)。端口初始化子函數的功能主要包括清空數據接收緩沖區(qū)和發(fā)送緩沖區(qū)、復位USB和UART中斷標志、正確設置數據鏈路通道狀態(tài)、使能USB和UART端口等。
端口初始化子函數偽代碼實現如下。
發(fā)送數據包子函數用于向上位機發(fā)送一個完整的數據包。該子函數要按照指定通道向上位機發(fā)送指定數量的字節(jié)數據。在發(fā)送數據過程中,要正確設置數據鏈路的通道狀態(tài)并正確處理中斷狀態(tài)。
發(fā)送數據包子函數偽代碼實現如下。
傳統(tǒng)USB方案為USB接口和UART接口分別配備獨立的數據鏈路層和應用接口層功能,分別獨立滿足USB和UART兩個數據接口的需求。本設計方案則采用了統(tǒng)一的數據鏈路層和應用接口層設計,將UART通道和USB通道的數據鏈路級程序加以整合,有效解決了雙模通信中存在的內存浪費、不能同時進行實時分析通信等方面的難題,為電器測量設備中雙模通信接口的使用提供了較好的設計思路[8]。
[1]庫依楠,楊玉森.基于DSP的USB2.0設備接口協議的實現[J].吉林大學學報:自然科學版,2005,35(2):170-173.
[2]于英民,于佳.計算機接口技術[M].2版.北京:電子工業(yè)出版社,2004:5-7.
[3]宋向榮,韓克敏.基于MCS單片機與PC機串行通信電平轉換[J].電子測量技術,2001(4):12-15.
[4]祖先鋒,潘孟春,韓旭,等.集UART與RS232于一體的MAX3110E原理及應用[J].國外電子元器件,2003(1):8-10.
[5]楊鳳彪,王超,張晨光.基于CH341A的USB串口通信設計[J].電子設計工程,2011(3):15-16.
[6]呂剛,李強.AVR單片機軟件模擬UART通信接口[J].單片機與嵌入式系統(tǒng)應用,2003(2):2-3.
[7]胡延平,李廣森.TMS320C54X軟件模擬實現UART技術[J].微處理機,2000(3):4-7.
[8]陳志強,張愛華,李并珊.TMS320 C54X DSP軟件實現UART技術[J].中原工學院學報,2007(3):50-53.