一種藍(lán)牙打印機(jī)的實(shí)現(xiàn)方案
作為一種短距離無線通信協(xié)議,藍(lán)牙技術(shù)以其低成本、低功耗、高速率、方便靈活等特點(diǎn)在眾多無線解決方案中脫穎而出。藍(lán)牙10m的工作距離可以很好的滿足大多數(shù)數(shù)字設(shè)備的應(yīng)用場合,如辦公室或家庭。打印機(jī)是常用的一個(gè)設(shè)備,擺脫打印機(jī)連線所帶來的不便,實(shí)現(xiàn)無線打印,可以減少桌面上令人不快的電纜,并且可以將打印機(jī)遠(yuǎn)離主機(jī)任意搬動,擺放在房間中適合的位置。本文介紹一種用藍(lán)牙技術(shù)來實(shí)現(xiàn)主機(jī)與打印機(jī)的無線連接,實(shí)現(xiàn)遙控打印的方法。
藍(lán)牙打印機(jī)的設(shè)計(jì)方案
設(shè)計(jì)的總體思路如圖1所示:
圖1 藍(lán)牙打印機(jī)設(shè)計(jì)的總體思路
在主機(jī)端用一單片機(jī)來仿真打印機(jī)進(jìn)行工作,截取從主機(jī)并口傳出的數(shù)據(jù)及控制信號,并通過藍(lán)牙無線連接傳送到打印機(jī)端。在打印機(jī)側(cè)的單片機(jī)則根據(jù)所收到的藍(lán)牙數(shù)據(jù)來仿真主機(jī)對打印機(jī)進(jìn)行控制操作,從而實(shí)現(xiàn)打印機(jī)與主機(jī)的藍(lán)牙無線連接。主機(jī)端的藍(lán)牙作為主設(shè)備進(jìn)行查詢和發(fā)起連接,打印機(jī)端的藍(lán)牙則作為從設(shè)備等待連接的建立。單片機(jī)采用89C2051,藍(lán)牙芯片采用愛立信公司生產(chǎn)的支持點(diǎn)對點(diǎn)連接的ROK101-008。該模塊內(nèi)包括了無線部分、基帶控制器、閃存、電源控制模塊和內(nèi)部時(shí)鐘這五個(gè)主要部分,提供UART、PCM、I2C標(biāo)準(zhǔn)接口并內(nèi)置晶振,其硬件框圖如圖2所示:
圖2 Ericsson ROK 101 008 硬件框圖
該方案適用于具有Centronic并行接口的通用打印機(jī)。用戶無須更改打印機(jī)的驅(qū)動程序,只需將含有單片機(jī)和藍(lán)牙的兩塊板子分別連接到主機(jī)端和打印機(jī)上,就可以進(jìn)行無線打印了。整個(gè)過程對于原打印機(jī)驅(qū)動程序是透明的,這樣就為打印機(jī)用戶提供了很大的方便。
單片機(jī)對藍(lán)牙模塊的控制
圖3 藍(lán)牙HCI傳輸層示意圖
藍(lán)牙規(guī)范定義了主機(jī)控制接口(HCI),它為基帶控制器、硬件控制器、硬件狀態(tài)和控制寄存器等提供了標(biāo)準(zhǔn)的命令接口。主機(jī)通過HCI傳輸層將控制命令和數(shù)據(jù)發(fā)送給藍(lán)牙模塊,而藍(lán)牙模塊又通過HCI傳輸層將其狀態(tài)信息及數(shù)據(jù)發(fā)還給主機(jī)。HCI傳輸層的主要目的是實(shí)現(xiàn)透明性。傳輸層不需要對主控制器驅(qū)動程序傳送給主控制器的數(shù)據(jù)可見,這就使接口(HCI)或主控制器能在不影響傳輸層的基礎(chǔ)上升級。
如圖3所示,在HCI傳輸層中至少傳送4種不同類型的包——HCI命令、HCI事件、ACL數(shù)據(jù)和SCL數(shù)據(jù)。每個(gè)HCI包都以HCI指示頭開始,不同的指示頭代表著不同類型的HCI包:
0x01 HCI指令分組
0x02 HCI ACL數(shù)據(jù)分組
0x03 HCI SCO數(shù)據(jù)分組
0x04 HCI事件分組
傳輸層主要有下列3種:HCI USB ; HCI PCM; HCI UART。我們用單片機(jī)通過HCI-UART傳輸子層對藍(lán)牙模塊進(jìn)行控制。連接的原理圖如圖4所示:
圖4 單片機(jī)與藍(lán)牙連接原理圖
一般來說,將單片機(jī)與藍(lán)牙芯片在短距離內(nèi)直接相連,便已可保證數(shù)據(jù)的可靠傳輸,也無須接CTS和RTS信號進(jìn)行流量控制。單片機(jī)與藍(lán)牙間的UART通信采用8位數(shù)據(jù)位,1位終止位,無奇偶校驗(yàn),使用無類型小Endian格式,即最低位最先發(fā)送。UART通信格式及波特率均可通過單片機(jī)向藍(lán)牙發(fā)送HCI指令來進(jìn)行調(diào)整。ROK-101-008芯片最高可支持460.8Kbps的UART速率。發(fā)送給藍(lán)牙模塊的第一條HCI指令應(yīng)該是軟件復(fù)位(Soft Reset)命令,當(dāng)藍(lán)牙執(zhí)行完一條指令后,將返回一個(gè)帶有狀態(tài)參數(shù)信息的命令完成事件(Command_Complete_Event),以告知主機(jī)(單片機(jī))命令執(zhí)行的情況。
當(dāng)完成軟件復(fù)位后,要使得藍(lán)牙模塊做為從設(shè)備等待來自其他藍(lán)牙設(shè)備的查詢和連接發(fā)起,我們還需設(shè)置一些計(jì)時(shí)器的值,進(jìn)行一系列的參數(shù)設(shè)定。即使是作為主設(shè)備的主機(jī)端藍(lán)牙,在進(jìn)行查詢和建立連接之前也需要做上述的參數(shù)設(shè)定工作。這些需要設(shè)置的參數(shù)主要有下列幾個(gè):
* Set Event Filter(設(shè)置事件過濾器)
* Write Scan Enable(設(shè)置掃描參數(shù),如是否可以進(jìn)行查詢和尋呼)
* Write Authentication Enable(設(shè)置是否需要進(jìn)行驗(yàn)證)
* Write Page Timeout(設(shè)置尋呼超時(shí),一般該值可以設(shè)為7s)
打印機(jī)端的藍(lán)牙模塊在設(shè)置完上述各參數(shù)后便已經(jīng)做好了從設(shè)備的準(zhǔn)備,等待連接的建立。而在主機(jī)端的藍(lán)牙模塊還需進(jìn)行查詢(Inquiry)過程以取得遠(yuǎn)端設(shè)備的藍(lán)牙地址,并根據(jù)查詢得到的藍(lán)牙地址來發(fā)起連接。一旦藍(lán)牙連接被建立之后,便可以進(jìn)行數(shù)據(jù)的收發(fā),以實(shí)現(xiàn)藍(lán)牙無線打印。
單片機(jī)與主機(jī)以及打印機(jī)的連接
單片機(jī)和主機(jī)以及打印機(jī)的接口電路十分簡單,以與打印機(jī)連接為例,電路如圖5所示:
圖5 單片機(jī)與打印機(jī)連接原理圖
將89C2051的P1口直接與打印機(jī)的數(shù)據(jù)口相連,用P3.7來采樣打印機(jī)的BUSY信號。由于主機(jī)與打印機(jī)的連線一般較長,打印機(jī)一側(cè)一般均有匹配電阻,因此作為STROBE信號輸出的P3.3不能與打印機(jī)直接相連,這里我們用一與非門來增加驅(qū)動能力以實(shí)現(xiàn)控制。當(dāng)單片機(jī)接收到主機(jī)通過藍(lán)牙發(fā)送過來的數(shù)據(jù)后,在打印機(jī)側(cè)模擬主機(jī)對打印機(jī)進(jìn)行控制操作。首先將要發(fā)送給打印機(jī)的數(shù)據(jù)從P1口輸出,隨后從P3.3經(jīng)過門電路反向產(chǎn)生一個(gè)負(fù)脈沖,作為選通信號發(fā)送給打印機(jī),偵聽P3.7上的BUSY信號,當(dāng)該信號電平為低時(shí),則表示本次數(shù)據(jù)已被打印機(jī)接收,可以發(fā)送下一個(gè)數(shù)據(jù)。
結(jié)語
以上方案并不涉及打印機(jī)的具體型號,也無須改變用戶打印機(jī)的驅(qū)動程序,因而適用于大多數(shù)的通用打印機(jī)。這種用單片機(jī)通過UART傳輸層對藍(lán)牙模塊進(jìn)行控制的方法,不僅僅適用于藍(lán)牙打印機(jī)的研制,還適應(yīng)于各類嵌入式的藍(lán)牙系統(tǒng)。
參考文獻(xiàn):
1. Specifications of the Bluetooth System Version 1.1,
http://www.bluetooth.com. 2. Ericsson ROK 101 008 Data Sheet,http://www.ericsson.com.
3. 金純等著,《藍(lán)牙技術(shù)》,電子工業(yè)出版社,2001.
4. 李華等著,《MCS-51系列單片機(jī)實(shí)用接口技術(shù)》,北京航空航天大學(xué)出版社,1993.