梁寶娟,孫少波
(1.長安大學 電子與控制工程學院,陜西 西安 710064;2.西安文理學院 計算機系,陜西 西安 710065)
在USB的拓撲機構中居于核心地位的是主機(Host),任何一次USB的數據傳輸都必須由主機來發(fā)起和控制,所有USB設備都只能和主機建立連接,任何兩個外設之間或是兩個主機之間無法直接通信。而目前,大量扮演主機角色的是個人電腦PC。目前所買到和使用的USB設備基本都是只具備USB設備的功能而不具備主機功能,比如USB接口的移動硬盤、數碼相機、打印機等。所有這些設備都只能在USB Host上使用,也就是通常只能通過PC來進行相互的文件和數據交換。沒有了PC主機,這些設備是不能互聯的[1]。
最簡單的USB系統模型組成是以USB主機為核心,以外圍的USB設備為特定功能的設備模塊。即USB提供的是主機和設備中間的一種數據通信服務。此外,為了構建更復雜的USB系統,還需要加上USB集線器(Hub)[2]。
USB主機包括PC或嵌入式系統兩種類型,每一次USB數據通信都必須是由USB主機來發(fā)起的 (遠程喚醒模式除外),主機管理著每個USB設備。即使新興的USB On-The-Go設備,其核心部分仍然是嵌入了USB主機的功能[3-4]。本方案主要是基于嵌入式USB主機的USB系統模型。
USB的拓撲體系由3種元素組成:主機、Hub和設備,通過Hub的級聯,構成了層次化的星形結構。USB的拓撲結構如圖1所示。

圖1 USB總線拓撲結構Fig.1 USB bus topological structure
電源電路的組成如下:
系統采用雙電壓給電方式;觸發(fā)器采用3.3 V給電;1284收發(fā)器采用5 V和3.3 V的雙電壓給電方式。在交流適配器中將干擾過濾后,提供5 V直流電壓。3.3 V直流電壓由固定輸出電源模塊來提供。電源系統結構如圖2所示。

圖2 電源部分電路系統結構圖Fig.2 Structure diagram of the power control unit system
為了給USB總線安全的提供電源,采用電源管理芯片,利用MCU來管理USB總線的電源。系統reset時,為了使與其連接的USB設備不進行誤操作,關閉 USB電源;總線電路異常而導致過流(over current)時,系統自動關閉電源并通知MCU。并且還采用壓敏電阻(varistor)來防止靜電(ESD);采用共模軛流線圈(Common Mode Choke Coil)來減少對總線差模數據的干擾[5-6]。USB Host接口部分的電路如圖 3所示。

圖3 USB接口電路圖Fig.3 USB interface circuit
由RS232端口來下載MCU程序,對應的電路圖如圖4所示。

圖4 MCU程序下載電路Fig.4 MCU program download circuit
DB9插座和MAX232置于單獨的下載板上,利用8PIN插座和主板(SPP/USB轉換主板)來連接。異步串行接口下載程序時,各管腳設置如下所示:

在 MB90F337內部有上電復位(power on reset)功能,在外部reset電路發(fā)生外部reset請求。外部reset電路的初步想法如圖5所示。使用的復位芯片 (reset chip)是 PST9231。reset時間利用外部電容,設置為40~50 ms之間。

圖5 上電復位電路Fig.5 Power on reset circuit
MiniHost部分負責USB Host部分的操作,它將完成如下功能:初始化MiniHost部分電路;支持USB 2.0高速和低速設備;注冊回調函數;設備的枚舉,包括BUS Reset、SET ADDRESS請求以及設定控制端點的最大包的大小;SETUP請求操作;Bulk傳輸請求操作[7]。
設置一個PWCTimer,使其再0.1ms中斷一次,在這個中斷處理程序中對記錄時間的全局變量加1,也就是說系統中時間的單位是0.1ms。如果記錄時間的全局變量溢出,則將這個變量的值設置為0。
初始化定時器代碼如下:

MiniHost Module主流程圖如圖6所示。
當一個新的傳輸請求開始處理時,將會執(zhí)行如圖7所示流程。1)發(fā)送 SETUP階段請求;
2)發(fā)送塊請求(BULK Request);
當一個傳輸請求在一個階段處理不完時,將會執(zhí)行圖8所示流程。比如控制傳輸(Control Transfer)需要3個階段。
3)控制傳輸(Control Transfer)結束,向 EndPoint 結構體中寫入傳送完成的結果,并根據傳輸的類型做相應處理。
4)塊傳輸(BULK Transfer)結束,向 EndPoint結構體中寫入傳送完成的結果,并向并口上發(fā)送ACK BUSY信號。
利用上述系統,設計一個能夠把并口轉換為USB接口的打印轉換器,這個轉換器只是把從并口收到的數據轉發(fā)到USB接口上,然后根據USB接口規(guī)范,把數據重新包裝后發(fā)送給USB打印機,轉換器中并不需要對并口的數據內容進行解釋,只是轉發(fā)。

圖6 MiniHost Module主流程圖Fig.6 MiniHost module main flow chart

圖7 新傳輸請求處理過程Fig.7 NEW request process flow chart

圖8 CHECK處理過程Fig.8 CHECK process flow chart
并口打印機采用IEEE1284標準進行通訊。IEEE1284標準為PC和外設之間的通訊定義了雙向通訊協議,通過該協議PC和外設之間的雙向數據傳輸率可以比以前提高20到50倍,同時該協議保持了軟件的向下兼容性。IEEE1284標準一共定義了5種數據傳輸模式,即正向傳輸模式 (兼容模式),兩種反向傳輸模式(半字節(jié)模式和字節(jié)模式),兩種雙向傳輸模式(EPP模式-高速增強并行端口和ECP模式-擴展并行端口)。
打印電纜我們采用D25接口,并行口一般有25個引腳,其中包括8位數據線,5位打印機狀態(tài)線,4位控制線。
打印設備它們能夠把頁面描述語言(PDL)轉換為人們能夠讀懂的打印頁面。因此需要制定打印機如何來接收這些PDL格式的數據,如何能夠返回打印機的狀態(tài)信息。常規(guī)的并口打印機用一個雙向打印端口來只認識這些語言。USB用一個 Bulk OUT端點來發(fā)送這些數據到打印機,并用一個Bulk IN端點來發(fā)送狀態(tài)信息或其他數據。 對于現已存在的方式來說,能夠在主機中通過Bulk IN端點使用查詢機制來檢索并口的狀態(tài)信息。一些 PDL允許打印機返回大量的數據,諸如一些字體定義等信息。 如果打印機實現了這個功能,它將使用用于傳送回狀態(tài)信息的Bulk IN端點來傳送回這些數據[8]。
1)并口部分功能
①為了方便處理打印并口只支持IEEE 1284-1994 SPP模式。
②打印數據只支持單方向(數據:PC→轉換器)。
③BUSY和ACK的信號時序類型為A-B(Ack-in-Busy)。
2)USB打印機接口功能
①支持USB Ver2.0 Full Speed。
②符合Universal Serial Bus Specification 2.0。
③符合Universal Serial Bus Device Class Definition for Printing Devices規(guī)范。
④控制傳送的數據最大值為64字節(jié)。
⑤批量(Bulk)傳送的數據最大值為64字節(jié)。
⑥不處理USB Hub。
3)內部功能
①定期取得打印機的狀態(tài)(以1秒為單位),反映到并口信號線中(利用USB控制傳送的GET_PORT_STATUS)。
②并口的收信緩沖存儲為64字節(jié),接收到64字節(jié)后由USB接口傳送給打印機。
③并口的收信處理中設置了超時(1秒),一旦超時發(fā)生,接收到的數據由USB接口傳送給打印機。
負責和并口相關的工作。從并口讀取數據放入數據緩沖區(qū)。設置和讀取并口狀態(tài)和控制端口。通過讀取時間,來生成并口的時序。使用中斷(Interrupt)對并口的InputPrime信號進行相應的處理。使用中斷(Interrupt)對并口的nStrobe信號進行相應的處理。
主模塊負責初始化整個系統,包括Parallel Module,MiniHost Module以及整個系統的變量。編寫一個回調函數,此函數在設備狀態(tài)(連接或斷開)改變時調用。在檢測到設備連接后,調用 MiniHost Module枚舉功能,枚舉打印機,并把打印機設置為某種模式。 檢查是否要發(fā)送的控制或批量傳送。 如果要,則把它們發(fā)送出去。
本論文設計了一種嵌入式USB主機系統,并完成了該系統的硬件和固件的實現和調試。為了驗證系統,實現了打印機IEEE 1284中的SPP模式協議到USB打印設備類協議轉換器。在硬件設計中,系統采用富士通90330系列MCU中的MB90F337完成中央控制器和USB Host控制器,電路設計簡潔。文章為其他嵌入式USB Host設備的開發(fā)提供了設計參考。
[1]李英偉,王成儒,練秋生,等.USB2.0原理與工程開發(fā)[M].2版.北京:國防工業(yè)出版社,2007.
[2]夏益民,王廣君.基于USB總線的高速數據采集系統[J].國外電子元器件,2003(10):20-23.
XIA Yi-min,WANG Guang-jun.A high speed data collection system based on USB[J].International Electronic Elements,2003(10):20-23.
[3]董海濤,謝經明,陳冰,等.基于ARM9的CNC系統USB-HOST驅動實現[J].儀表技術與傳感器,2011(7):44-46.
DONG Hai-tao,XIE Jing-ming,CHEN Bing,et al.Realization of USB-Host drive in CNC system based on ARM9[J].Instrument Technique and Sensor,2011(7):44-46.
[4]何蘇勤,黃翠翠.基于USB2.0的異步數據傳輸和控制接口的設計[J].國外電子測量技術,2010,29(3):79-83.
HE Su-qin,HUANG Cui-cui.Design of asynchronous data transmission and control interface based on USB2.0[J].Foreign Electronic Measurement Technology,2010,29(3):79-83.
[5]陳英俊,張紅兵.RS-232、RS-485/USB轉換器的最簡設計[J].航空精密制造技術,2003(6):17-20,24.
CHEN Ying-jun,ZHANG Hong-bing.The simplest solution for RS-232、RS-485/USB converter[J].Aviation Precision Manufacturing Technology,2003(6):17-20,24.
[6]何源,顧金良.USB與RS232接口轉換器的設計[J].指揮控制與仿真,2006,28(5):114-117.
HE Yuan,GU Jin-liang.Design of USB/RS232 converter[J].Command Control&Simulation,2006,28(5):114-117.
[7]Michael Bar.C/C++嵌入式系統編程[M].于志宏,譯.北京:中國水利出版社,2001.
[8]Universal Serial Bus Specification Revision 2.0[EB/OL].(2012-02-01)http://www.usb.org