齊貴寶,李傳南,宋占偉
(吉林大學(xué)電子科學(xué)與工程學(xué)院,長(zhǎng)春130012)
USB(Universal Serial Bus)作為一種通訊協(xié)議已被廣泛應(yīng)用,且將取代部分已有的串行協(xié)議而成為一種主流,現(xiàn)在幾乎所有的計(jì)算機(jī)都配備USB接口。USB是非常成功的標(biāo)準(zhǔn),日常生活中USB接口的設(shè)備普遍存在。但現(xiàn)在一臺(tái)計(jì)算機(jī)通過(guò)USB電纜連接多個(gè)外設(shè)的情況給使用者帶來(lái)了許多不便,比如外設(shè)和電腦的放置距離近,受到限制;多個(gè)USB外設(shè)放在電腦旁,使辦公環(huán)境顯得擁擠。
假設(shè)辦公室中的打印機(jī)、掃描儀、移動(dòng)硬盤和數(shù)碼相機(jī)等USB外設(shè)都可以和電腦以無(wú)線方式進(jìn)行連接,將省去大量繁雜的數(shù)據(jù)線纜[1,2]。同時(shí)由于擺脫了數(shù)據(jù)線纜的限制,可以增加外設(shè)與電腦之間的放置距離,給人們的日常生活和工作帶來(lái)極大的方便。
無(wú)線USB是一個(gè)全新無(wú)線傳輸標(biāo)準(zhǔn),近年來(lái)英特爾、三星、NEC、惠普、CYPRESS等公司推出了一些專門的無(wú)線USB芯片,但主要是針對(duì)鼠標(biāo)、鍵盤這類數(shù)據(jù)量較小的低速設(shè)備。對(duì)高速無(wú)線USB單芯片的解決方案在市面上很少見,為數(shù)不多的幾款高速無(wú)線USB多芯片解決方案產(chǎn)品也由于其價(jià)格較高,嚴(yán)重限制了其普及。筆者采用通用器件搭建無(wú)線USB系統(tǒng),旨在開發(fā)出適合打印機(jī)、掃描儀等對(duì)速度要求稍高的USB設(shè)備的無(wú)線USB裝置(包括點(diǎn)對(duì)點(diǎn)的無(wú)線USB裝置和一點(diǎn)對(duì)多點(diǎn)的無(wú)線USB集線器),以求提高高速無(wú)線USB設(shè)備的性價(jià)比和普及度。實(shí)驗(yàn)中,筆者實(shí)現(xiàn)了無(wú)線打印功能。
無(wú)線USB通訊裝置的系統(tǒng)構(gòu)成如圖1所示,分為主機(jī)端和客戶端,主機(jī)端用于與PC端進(jìn)行USB通信,客戶端用于與打印機(jī)或集線器進(jìn)行數(shù)據(jù)通信。該系統(tǒng)中,主機(jī)端的控制器為S3C2440控制器,連接有WiFi(Wireless Fidelity)模塊和USB Device模塊。PC(Personal Computer)機(jī)通過(guò)USB口與主機(jī)端的USB Device模塊相連接??蛻舳说目刂破鳛镾3C2440控制器,連接有WiFi模塊和USB Host模塊。客戶端的USB Host模塊,在點(diǎn)對(duì)點(diǎn)的模式下,直接與打印機(jī)相連接;在一點(diǎn)對(duì)多點(diǎn)的模式中,該模塊與USB集線器相連接,將打印機(jī)連接到USB集線器上。
圖1 系統(tǒng)硬件構(gòu)成Fig.1 Hardware block diagram of the system
主機(jī)端和客戶端都需要一個(gè)控制器,控制與PC機(jī)或集線器、打印機(jī)的通信。該系統(tǒng)采用三星公司的16/32位精簡(jiǎn)指令集微處理器S3C2440作為控制器核心。S3C2440控制器的核心處理器采用16/32位ARM920T的精簡(jiǎn)指令集微處理器。ARM920T實(shí)現(xiàn)了MMU(Memory Management Unit)、AMBA(Advanced Microcontroller Bus Architecture)總線和高速數(shù)據(jù)、指令緩沖體系結(jié)構(gòu);系統(tǒng)資源和外圍接口豐富,包括電源管理器、外部存儲(chǔ)器控制器、DMA(Direct Memory Access)、SDIO(Secure Digital Input and Output Card)接口、USB Device接口和USB Host接口等[3]。S3C2440控制器內(nèi)部未集成存儲(chǔ)單元,故需要外接Flash和 RAM 存儲(chǔ)器[4]。
主機(jī)端與客戶端之間需要采用無(wú)線方式通信,出于對(duì)高速、距離和穩(wěn)定性等的考慮,該系統(tǒng)采用WiFi無(wú)線技術(shù)。WiFi是當(dāng)今使用最廣的一種無(wú)線網(wǎng)絡(luò)傳輸技術(shù),大部分筆記本電腦、智能手機(jī)和平板電腦等都支持該技術(shù)。該系統(tǒng)中采用的核心芯片為MARVELL 8686,接口為SDIO接口,可直接與S3C2440控制器的SDIO接口相連接,最高無(wú)線傳輸速度可達(dá)54 Mbit/s。
PC機(jī)與主機(jī)端采用USB通信協(xié)議,且PC端為USB Host接口,該系統(tǒng)中主機(jī)端需要USB Device接口。S3C2440控制器內(nèi)置USB Device控制器,允許控制傳輸、中斷傳輸和批量傳輸,批量傳輸時(shí)可以使用DMA功能,支持掛起和遠(yuǎn)程喚醒功能。它兼容USB1.1協(xié)議,有5個(gè)帶FIFO(First Input First Output)的端點(diǎn),端點(diǎn)0(16字節(jié),控制端點(diǎn))和端點(diǎn)1、2、3、4(128字節(jié),批量端點(diǎn))。
客戶端與打印機(jī)或集線器進(jìn)行USB通信,要求客戶端具備USB Host接口,實(shí)現(xiàn)對(duì)USB從設(shè)備的控制。S3C2440控制器集成了USB Host控制器,有兩個(gè)USB Host端口,兼容USB1.1協(xié)議,支持USB2.0的全速和低速設(shè)備。
在實(shí)現(xiàn)一點(diǎn)對(duì)多點(diǎn)的USB通信中,需要用到USB集線器。USB集線器,又稱為USB Hub,可將一個(gè)USB接口轉(zhuǎn)換為多個(gè)接口,且這些接口可同時(shí)使用。USB集線器應(yīng)用于使用星型拓?fù)浣Y(jié)構(gòu)的網(wǎng)絡(luò)中,連接多個(gè)計(jì)算機(jī)或網(wǎng)絡(luò)設(shè)備。USB集線器技術(shù)已經(jīng)很成熟,而且價(jià)格低廉,故實(shí)驗(yàn)階段購(gòu)買成品的USB集線器。
該系統(tǒng)中以HP LaserJet 1020打印機(jī)為例,對(duì)系統(tǒng)軟件進(jìn)行設(shè)計(jì),系統(tǒng)軟件的流程圖如圖2所示。該系統(tǒng)的軟件分為運(yùn)行于PC機(jī)上的打印監(jiān)控程序和針對(duì)該無(wú)線USB設(shè)備的驅(qū)動(dòng)程序,運(yùn)行于主機(jī)端的USB Device驅(qū)動(dòng)程序和WiFi驅(qū)動(dòng)程序、應(yīng)用程序,運(yùn)行于客戶端的USB Host驅(qū)動(dòng)程序和WiFi驅(qū)動(dòng)程序、應(yīng)用程序。主機(jī)端和客戶端均運(yùn)行LINUX操作系統(tǒng),相關(guān)的驅(qū)動(dòng)程序和應(yīng)用程序均在LINUX操作系統(tǒng)下開發(fā)運(yùn)行。PC機(jī)運(yùn)行打印監(jiān)控程序,監(jiān)控PC機(jī)是否有打印消息,當(dāng)有打印消息時(shí)提示“是否使用無(wú)線打印機(jī)”。確定使用無(wú)線打印機(jī)后,PC機(jī)調(diào)用PC機(jī)上的針對(duì)該無(wú)線USB設(shè)備的USB驅(qū)動(dòng)程序?qū)⑽募?shù)據(jù)傳輸給主機(jī)端。主機(jī)端的控制器通過(guò)WiFi模塊將數(shù)據(jù)傳輸給客戶端??蛻舳说目刂破鲗⑼ㄟ^(guò)與其連接的USB Host模塊,控制打印機(jī)進(jìn)行打印,或通過(guò)USB集線器間接控制打印機(jī)進(jìn)行打印。打印機(jī)打印完畢后,PC機(jī)上的打印監(jiān)控程序繼續(xù)監(jiān)控打印消息。
圖2 系統(tǒng)軟件流程Fig.2 Flow chart of software
該驅(qū)動(dòng)程序用到的軟件有DDK(Drive Development Kit)、DRIVERSTUDIO、VC++6.0[5]。DDK一般指windows設(shè)備驅(qū)動(dòng)程序開發(fā)包。如果你想開發(fā)一個(gè)設(shè)備驅(qū)動(dòng)程序,如顯卡驅(qū)動(dòng)程序,就需要使用DDK。DriverStudio是一套用來(lái)簡(jiǎn)化微軟windows平臺(tái)下設(shè)備驅(qū)動(dòng)程序的開發(fā)、調(diào)試和測(cè)試的工具包,它為windows下USB驅(qū)動(dòng)的開發(fā)提供了模板,可以有效降低驅(qū)動(dòng)開發(fā)的難度和提高開發(fā)的效率。VC++6.0為驅(qū)動(dòng)開發(fā)的編輯器和編譯器。當(dāng)該無(wú)線USB裝置插入時(shí),驅(qū)動(dòng)程序可以根據(jù)其VID(Vendor IDentification)和PID(Product IDentification)進(jìn)行匹配識(shí)別。
在LINUX內(nèi)核中集成了SDIO驅(qū)動(dòng)和IEEE802.11協(xié)議,在配置內(nèi)核時(shí)添加對(duì)SDIO接口和IEEE802.11協(xié)議的支持,然后在網(wǎng)絡(luò)配置中添加對(duì)MARVELL 8686芯片的支持,同時(shí)將WiFi模塊需要的固件程序放到LINUX文件系統(tǒng)的lib目錄下[6,7]。在LINUX內(nèi)核啟動(dòng)時(shí)自動(dòng)運(yùn)行腳本文件完成對(duì)WiFi模塊的啟動(dòng)和配置,腳本文件的內(nèi)容如圖3和圖4所示。WiFi的組網(wǎng)模式有一點(diǎn)對(duì)多點(diǎn)模式和Ad-Hoc(點(diǎn)對(duì)點(diǎn))模式,該項(xiàng)目中將WiFi配置成Ad-Hoc模式,實(shí)現(xiàn)主機(jī)端和客戶端點(diǎn)對(duì)點(diǎn)無(wú)線連接和數(shù)據(jù)通信。
圖3 A端WiFi配置腳本Fig.3 Configuration script of WiFi on client terminal
圖4 B端WiFi配置腳本Fig.4 Configuration script of WiFi on Host terminal
在LINUX操作系統(tǒng)下開發(fā)針對(duì)USB Device模塊的Read、Write、Open、Close函數(shù),分別實(shí)現(xiàn)對(duì)USB Device模塊的讀、寫、打開和關(guān)閉操作[8]。同時(shí)在LINUX內(nèi)核中添加對(duì)USB Device模塊的中斷處理,實(shí)現(xiàn)USB Device模塊控制端點(diǎn)的數(shù)據(jù)收發(fā)和數(shù)據(jù)端點(diǎn)的數(shù)據(jù)收發(fā),其中的數(shù)據(jù)包含USB Device的VID、PID,PC機(jī)發(fā)來(lái)的數(shù)據(jù),USB Device返回的數(shù)據(jù)等。
LINUX下打印機(jī)支持軟件包括打印機(jī)操作工具包、針對(duì)特定打印機(jī)的固件、文件格式轉(zhuǎn)換工具等。源碼的編譯是在PC機(jī)的LINUX操作系統(tǒng)下進(jìn)行的,需要用到交叉編譯器。命令的輸入是在超級(jí)終端,操作步驟如下[9]。
1)編譯foo2zjs。下載foo2zjs源碼,編譯后得到foo2zjs和sihp1020.dl兩個(gè)文件,拷貝到客戶端裝置的文件系統(tǒng)中。其中foo2zjs為打印操作的可執(zhí)行工具,sihp1020.dl為HP1020打印機(jī)所需要的固件。
2)編譯ghostscript-8.15。下載ghostscript-8.15源碼,編譯后得到gs可執(zhí)行工具,該工具用于將PDF格式的文件轉(zhuǎn)換為PBM格式的文件。
3)插接USB打印機(jī)到客戶端,客戶端超級(jí)終端打印信息如下。
usb 1-1:new high speed USB Device using s1r72v17 and address 2
usb 1-1:Product:HP LaserJet 1020
usb 1-1:Manufacturer:Hewlett-Packard
usb 1-1:SerialNumber:JL3ESMZ
usb 1-1:configuration#1 chosen from 1 choice
drivers/usb/class/usblp.c:usblp0:USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x03F0 pid 0x2B17
4)在客戶端超級(jí)終端,執(zhí)行“mdev-s”命令,生成lp0節(jié)點(diǎn),位于/dev/lp0路徑下。
5)在客戶端超級(jí)終端,執(zhí)行“cat sihp1020.dl>/dev/lp0”命令,加載打印機(jī)固件。
6)使用gs工具將PDF文件轉(zhuǎn)換生成PBM文件,命令如下:
./gs-q-dBATCH-dSAFER-dQUIET-dNOPAUSE-sPAPERSIZE=a4-r1200x600-sDevice=pbmrawsOutputFile=test.pbm test.pdf
7)調(diào)用foo2zjs工具打印PBM文件,在客戶端超級(jí)終端執(zhí)行如下命令:./foo2zjs-z1-p9-r1200x600 test.pbm>/dev/lp0
主機(jī)端的應(yīng)用程序主要完成USB Device模塊與PC機(jī)的通信以及WiFi模塊的數(shù)據(jù)收發(fā),因此開啟兩個(gè)線程分別完成上述兩個(gè)任務(wù)。USB Device模塊接收數(shù)據(jù)時(shí),采用中斷的方式。由于UDP協(xié)議容易出現(xiàn)丟包的現(xiàn)象,無(wú)線傳輸時(shí)采用TCP傳輸協(xié)議[10]。傳輸文件前,需要先發(fā)送文件的大小,以方便另一端進(jìn)行校驗(yàn)。
客戶端的應(yīng)用程序主要完成WiFi模塊的數(shù)據(jù)收發(fā)以及打印機(jī)的控制。WiFi部分程序不斷檢測(cè)是否有新文件到來(lái),當(dāng)有新文件到來(lái)時(shí),先對(duì)文件的大小進(jìn)行校驗(yàn),校驗(yàn)通過(guò)后將文件轉(zhuǎn)換為PBM格式并調(diào)用打印機(jī)進(jìn)行打印。
系統(tǒng)的實(shí)物連接圖如圖5所示。左端為主機(jī)端,右端為客戶端,主機(jī)端通過(guò)一條USB線與PC機(jī)相連,打印機(jī)或集線器連接到客戶端的USB HOST接口。PC機(jī)上打印監(jiān)控程序界面如圖6所示,點(diǎn)擊該應(yīng)用程序的“隱藏”按鈕后可以后臺(tái)運(yùn)行。將主機(jī)端插接到PC機(jī)的USB口后,在資源管理器中可以看到該無(wú)線USB設(shè)備,表明該設(shè)備驅(qū)動(dòng)安裝成功,如圖7所示。PC機(jī)上點(diǎn)擊“打印”按鈕后,彈出如圖8所示的提示,點(diǎn)擊“確定”按鈕即可完成一次打印。
在實(shí)現(xiàn)一點(diǎn)對(duì)多點(diǎn)的無(wú)線USB集線器功能時(shí),將USB集線器插接到客戶端的USB Host接口,將打印機(jī)連接到USB集線器的一個(gè)USB口上。打印效果圖如圖8所示,打印的內(nèi)容既含文字又含圖片。
圖5 硬件連接和打印效果圖Fig.5 Hardware connection and effect diagram of the printer
圖6 PC機(jī)上打印監(jiān)控程序Fig.6 Monitoring program of printing on PC
圖7 資源管理器中無(wú)線USB設(shè)備Fig.7 The wireless USB Device in explorer
圖8 無(wú)線打印提示消息Fig.8 Prompt message of wireless printer
測(cè)試中打印了一份6頁(yè)的PDF文件,文件大小為627 kByte,比較使用無(wú)線打印機(jī)和有線打印機(jī)的打印效果,前者比后者延時(shí)大約2 s左右,主要用于PDF格式到PBM格式的轉(zhuǎn)換。對(duì)于文件不大的情況,無(wú)線傳輸時(shí)間可以忽略。
無(wú)線USB裝置的研制可有效解決USB設(shè)備放置距離的問題以及有線USB設(shè)備連接混亂的問題。該項(xiàng)目成功實(shí)現(xiàn)了無(wú)線打印功能。項(xiàng)目中實(shí)驗(yàn)階段硬件部分采用兩塊ARM9開發(fā)板,為了進(jìn)一步減少成本、提高集成度,今后可以將開發(fā)板上未使用的模塊去掉,同時(shí)將USB集線器芯片集成到電路板上。隨著人民生活水平不斷提高,無(wú)線USB裝置的應(yīng)用將有更廣闊的空間。
[1]黃勇,邵飛,顧娟,等.無(wú)線USB標(biāo)準(zhǔn)簡(jiǎn)介[J].信息技術(shù)與標(biāo)準(zhǔn)化,2005(7):25-28.HUANG Yong,SHAO Fei,GU Juan,et al.Brief Introduction of Wireless USB Specification[J].Information Technology &Standardization,2005(7):25-28.
[2]白鳳娥,霍利鋒,劉振峰,等.無(wú)線USB原理及其發(fā)展[J].信息技術(shù),2006(12):184-186.BAI Fenge,HUO Lifeng,LIU Zhengfeng,et al.Principles and Its Development of Wireless USB [J].Information Technology,2006(12):184-186.
[3]SAMSUNG ELECTRONICS.S3C2440A 32-Bit RISC Microprocessor User's Manual[EB/OL].(2004-07-01).[2013-03-26].http://www.samsung.com.
[4]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008.WEI Dongshan.Embedded Linux Application Development Completely Manual[M].Beijing:Posts& Telecom Press,2008.
[5]劉榮.圈圈教你玩USB[M].北京:北京航空航天大學(xué)出版社,2008.LIU Rong.Circle Teach You Play USB[M].Beijing:Beihang University Press,2008.
[6]羅娜.基于88W8686的手持終端WiFi功能的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:武漢理工大學(xué)信息工程學(xué)院,2010.LUO Na.88W8686-Based WiFi Design and Implementation for Handheld Device[D].Wuhan:School of Information and Engineering,Wuhan University of Technology,2010.
[7]賀琨,張立文,宋占偉,等.基于WiFi通信的嵌入式集裝箱數(shù)據(jù)終端[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2012,30(6):579-584.HE Kun,ZHANG Liwen,SONG Zhanwei,et al.Embedded Container Data Terminal Based on WiFi Communication [J].Journal of Jilin University:Information Science Edition,2012,30(6):579-584.
[8]宋寶華.Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解[M].北京:人民郵電出版社,2010.SONG Baohua.Linux Device Driver Development Explain[M].Beijing:Posts& Telecom Press,2010.
[9]黃艷,馬旭東.嵌入式Linux下基于ARM9的USB打印機(jī)控制器的設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2008,21(5):66-67.HUANG Yan,MA Xudong.Design of USB Printer Controller Based on ARM9 under Embedded Linux[J].Industrial Control Computer,2008,21(5):66-67.
[10]孟祥磊,干莽,張婷,等.基于WiFi的嵌入式目標(biāo)定位與檢視終端[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2012,30(5):480-486.MENG Xianglei,GAN Mang,ZHANG Ting,et al.WiFi-Based Embedded Target Location and View Terminal[J].Journal of Jilin University:Information Science Edition,2012,30(5):480-486.