【正文】
學(xué)院、荷蘭 Delft 技術(shù)大學(xué)等都在醫(yī)學(xué)、工業(yè)等各個(gè)移動(dòng)計(jì)算領(lǐng)域進(jìn)行應(yīng)用系統(tǒng)的開發(fā)工作。如 : 1) 北京靈圖軟件技術(shù)有限公司推出的在移動(dòng)信息設(shè)備上提供地理信息以及位置信息服務(wù)的 SmartInHand軟件產(chǎn)品。 目前 PDA 主要應(yīng)用于地圖導(dǎo)航領(lǐng)域,而藍(lán)牙技術(shù)主要應(yīng)用于手機(jī)電腦等電子產(chǎn)品,而在工業(yè)現(xiàn)場(chǎng)應(yīng)用還較少。利用這一方案可實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)對(duì)多點(diǎn)的通訊傳輸 ,并把設(shè)計(jì)人員從無(wú)數(shù)錯(cuò)綜復(fù)雜的電纜連接中解放出來(lái) ,從而可以方便地設(shè)計(jì)自己的個(gè)人網(wǎng)絡(luò)。而且可以將幾個(gè) PICONET 網(wǎng)進(jìn)一步互連 ,組成一個(gè)更大的分布式網(wǎng)絡(luò)(也叫作 SCATTERNET 網(wǎng)) ,以在各個(gè)設(shè)備之間進(jìn)行快速方便的通信聯(lián)系。在目前公布的 Bluetooth 藍(lán)牙技術(shù)規(guī)范中 ,數(shù)據(jù)的最大傳出速率為 721kbit/s, 系統(tǒng)的最大跳頻速率為 1600 跳 /秒,在 到 之間,采用 79 個(gè) 1MHz 帶寬的頻點(diǎn)。 藍(lán)牙協(xié)議 ( HCI) 介紹 藍(lán)牙 SIG 開發(fā)了藍(lán)牙協(xié)議規(guī)范 , 已發(fā)布版本包括 , 和 。協(xié)議棧各層都是相對(duì)分離的實(shí)體 , 通過(guò)回調(diào)表將精心設(shè)計(jì)好的接口暴露給上下層 ,除此之外協(xié)議棧內(nèi)的各部分沒(méi)有任何交互關(guān)系 , 每一層都是可替換的。藍(lán)牙協(xié)基于 PDA 的藍(lán)牙通信程序設(shè)計(jì) —— 軟件設(shè)計(jì) 4 議可以分為 4 層,即核心協(xié)議層、電纜替代協(xié)議層、電話控制協(xié)議層和采納的其它協(xié)議層。藍(lán)牙既支持電路型數(shù)據(jù),也支持分組型數(shù)據(jù);既支持點(diǎn)對(duì)點(diǎn) 連接,也支持點(diǎn)對(duì)多點(diǎn)連接。主節(jié)點(diǎn)向從節(jié)點(diǎn)發(fā)送數(shù)據(jù)只能占用偶時(shí)隙,反之從節(jié)點(diǎn)只能在奇時(shí)隙才能向主節(jié)點(diǎn)發(fā)送數(shù)據(jù)。 邏輯鏈路控制與適應(yīng)協(xié)議( L2CAP)位于基帶協(xié)議層之上,屬于數(shù)據(jù)鏈路層,是一個(gè)為高層傳輸和應(yīng)用層協(xié)議屏蔽基帶協(xié)議的適配協(xié)議。SDP 支持 3 種查詢方式:按業(yè)務(wù)類別搜尋、按業(yè)務(wù)屬性搜尋和業(yè)務(wù)瀏覽( browsing)。PH2401 實(shí)現(xiàn)數(shù)據(jù)的無(wú)線接收和發(fā)送 。 MT1020A 基帶控制器的結(jié)構(gòu)與原理 MT1020A 是 MITEL 公司推出的低成本、微功耗藍(lán)牙基帶控制器芯片。圖 3 為其引腳排列圖。 A4( SubGND) :芯片接地端 。 A8( Sadd1):地址端( 19 位總線) 。 基于 PDA 的藍(lán)牙通信程序設(shè)計(jì) —— 軟件設(shè)計(jì) 6 B1( Sdata11):數(shù)據(jù)端( 19 位總線) 。 B5( nSoe):系統(tǒng)輸出使能端 ,低電平有效 。 B9( Sdata13):系統(tǒng)數(shù)據(jù)端( 15 位總線) 。 C2( Sdata1):系統(tǒng)數(shù)據(jù)端( 15 位總線) 。 C6( Sdata12):系統(tǒng)數(shù)據(jù)端( 15 位總線) 。 C9( Sdata15):系統(tǒng)數(shù)據(jù)端 。 D2( nSub):系統(tǒng)高位 ,低電平有效 。 D6( Sdata3):系統(tǒng)數(shù)據(jù)端( 15 位總線) 。 D10( Gpio2):通用 I/O 口 。 E3( U1txd): UART1 數(shù)據(jù)發(fā)送 。 E7( Sdata4):系統(tǒng)數(shù)據(jù)( 15 位總線) 。 E11( LaVDD):微處理器電源端 。 F4( U1rts): UART1 發(fā)送準(zhǔn)備好 。 F8(Gpio7):通用 I/O 或外部中斷 1。 G1( La VDD):芯片電源引腳 。 G5( Tck_bdiag0): ICE 測(cè)試時(shí)鐘輸入或者 Xdiag0輸出 。 G9( Sadd2):系統(tǒng)地址( 19 位總線) 。 H2( Tdi_bdiag_1): ICE 測(cè)試數(shù)據(jù)輸入或者Xdiag1輸出 。 H6( Ri_spi_clk):無(wú)線電串行接口時(shí)鐘 。 H10( Sadd17):系統(tǒng)地址( 19 位總線) 。 J3( nTrst): Xpins/diag 模式或 ICE 復(fù)位和 ARM/UIM 測(cè)試模式 ,低電平有效 。 J7( Lp_clk_in): 時(shí)鐘輸入 ,用于藍(lán)牙休眠定時(shí) 。 J11( Ear_plus): CODEC(多媒體數(shù)字信號(hào)編解碼器)耳機(jī)聽筒音頻差分輸出正端 。 K4( Sadd16):系統(tǒng)地址( 19 位總線) 。 K8( Ri_reset_O):系統(tǒng)無(wú)線電復(fù)位引腳 。 L1( SubGND):芯片接地端 。 L5( Ri_rxd):無(wú)線電數(shù)據(jù)接收端 。 L9( Mic_minus): CODEC(多媒體數(shù)字信號(hào)編解碼器)麥克風(fēng)音頻差分負(fù)輸入端 。在該芯片中 ,系統(tǒng) 內(nèi) 部時(shí)鐘可以低至 5MHz、內(nèi)核供電電壓為 2V、硬件解碼、支持 DMA 傳輸 ,所有這些使得該芯片具有超低功耗 [5]。鍵路控制器用來(lái)完成與外部無(wú)線收發(fā)器之間的通信 ,以實(shí)現(xiàn)數(shù)據(jù)發(fā)送時(shí)的裝配、加同步字、幀頭和 CRC 校驗(yàn)以及數(shù)字接收時(shí)的解碼和檢錯(cuò)等。 PH2401 無(wú)線收發(fā)器 與嵌入式控 制內(nèi)核 功能介紹 PH2401 單片無(wú)線收發(fā)器用砷化鎵工藝制造 ,具有高集成度、超低功耗、體積小等優(yōu)點(diǎn) ,專門優(yōu)化用于 無(wú)線個(gè)人系統(tǒng) ,完全兼容藍(lán)牙規(guī)范 “Bluetoooth ”?;鶐Э刂破魍ㄟ^(guò)串行總線與 PH2401 接口。用藍(lán) 牙外圍電路的無(wú)線接口 J6( Ri_spi_misod):(無(wú)線電串行接口數(shù)據(jù)輸入)基于 PDA 的藍(lán)牙通信程序設(shè)計(jì) —— 軟件設(shè)計(jì) 9 L6( Ri_spi_misod):(無(wú)線電串行接口數(shù)據(jù)輸出) 與 PH1024 無(wú)線收發(fā)器相連 。 至此工業(yè)現(xiàn)場(chǎng)通信的三方通信硬件平臺(tái)的搭建已基本完成,三方通信框圖如 圖 6 所示。隨著科技的發(fā)展, PDA逐漸 融合計(jì)算、通信、網(wǎng)絡(luò)、存儲(chǔ)、娛樂(lè)、電子商務(wù)等多功能,成為人們移動(dòng)生活不可缺少的工具。不過(guò)截止到今天, “掌上電腦 ”也就是 PDA,相對(duì)于普通電腦來(lái)說(shuō),只是一個(gè)功能精簡(jiǎn)的系統(tǒng),并不是真正意義上具有普通電腦的所有功能。之所以稱為 “智能 ”,相當(dāng)與傳統(tǒng)手機(jī)來(lái)說(shuō),增加了 PDA 功能。 PDA 最大的特點(diǎn)就是,該設(shè)備具有一個(gè)開放的系統(tǒng),就像電腦的操作系統(tǒng)一樣,人們可以根據(jù)自己的需要,安裝不同的軟件,實(shí)現(xiàn)不同的功能。 Palm 操作系統(tǒng)是 PalmSource 開發(fā)的一種功能強(qiáng)大的操作系統(tǒng) 。 基于 PDA 的藍(lán)牙通信程序設(shè)計(jì) —— 軟件設(shè)計(jì) 11 PDA 的內(nèi)存管理 Palm 和 Pocket PC 操作系統(tǒng)使用的存儲(chǔ)器和文件管理系統(tǒng)有很大區(qū)別。它將數(shù)據(jù)保存在被稱作 “記錄 ”的存儲(chǔ)塊中 ,并且組成數(shù)據(jù)庫(kù)。 與 Pocket PC 操作系統(tǒng)一樣 ,Palm 應(yīng)用程序使用一些內(nèi)存來(lái)保存狀態(tài)信息 ,所以也不是所有的內(nèi)存空間 都用于存儲(chǔ)數(shù)據(jù)。軟件包括初始化 , 藍(lán)牙交互 , 處理數(shù)據(jù)三個(gè)模塊。 限于篇幅,具體主程序的編寫不再贅述。 基于 PDA 的藍(lán)牙通信程序設(shè)計(jì) —— 軟件設(shè)計(jì) 13 U 1 6 o p c o d e U 8 l e n U 8 p a r a m [ 2 5 6 ] C m d _ p k t U 1 6 e v c o d e U 8 l e n U 8 p a r a m [ 2 5 6 ] E v e n t _ p k t U 1 6 h d r U 8 l e n U 8 * d a t a A c l _ p k t H c i _ i n f o h i H c i _ c o n h c U 8 h c i _ b u f [ 1 0 0 0 ] H c i _ d e v e i c e u 8 lo c al u 1 6c o n u 1 6p a ge r o l e u 1 6s c an u 8 st a t e U 16 c _h a nd l e u 8 re mo t e 圖 9 核心數(shù) 據(jù)結(jié)構(gòu)圖 軟件采用前后臺(tái)的方式實(shí)現(xiàn) , 前臺(tái)運(yùn)行主程序 ,后臺(tái)定時(shí)循環(huán)調(diào)用 HCI 狀態(tài)機(jī)。 I D L E _ S TA T EA C L _ H DR _ S T A T EA C L _ H DR _ S T A T EE V E N T _ DA T A _ S T AT EE V E N _ DA D T _ S T AT ES C O _ H D T_ S T A T ES C O _ D AD T _ S T A TEE L S EA C L _ PK T取連接句柄處 理A C L 數(shù)據(jù)E V T _ P KT讀 元 器件 碼 和參 數(shù) 長(zhǎng)度讀 元 器件 參 數(shù)處 理 事件處 理 S C O 數(shù)據(jù)S C O _ P KT 取 連接 句柄 圖 10 HCI 狀態(tài)機(jī) HCI 狀態(tài)機(jī)初始狀態(tài)置為 IDLE_STATE, 根據(jù) HCI UART 傳 輸層格式規(guī)范 , 按字段取藍(lán)牙模塊返回的各個(gè)字節(jié) , 每個(gè)字節(jié)為一個(gè)十六進(jìn)制數(shù) , 不同的數(shù)代表不同的含義。若為事件分組 , 則狀態(tài)機(jī)轉(zhuǎn)換為 EVENT_HDR_STATE 狀態(tài) , 繼續(xù)取字節(jié) , 讀出事件碼和參數(shù) 長(zhǎng)度后 , 轉(zhuǎn)換到 EVENT_DATA_STATE 狀態(tài) , 表示再來(lái)的字節(jié)即為事件參數(shù) , 讀取事件參數(shù) ,并調(diào)用 process_event ( ) 處理事件 , 完成后回到 IDLE_STATE 狀態(tài)。如中途出現(xiàn)分組丟失或錯(cuò)誤的字段 , 狀態(tài)機(jī)會(huì)報(bào)錯(cuò)并重新置回初始態(tài) [10]?,F(xiàn)在 ,很多 Pocket PC 也加入電話功能成為 Pocket PC Phone。Visual C 2020 中 的 SerialPort 類控制串口資源非常方便 ,因此 ,本文選用 Visual C 2020 來(lái)編寫藍(lán)牙串口通信程序。初始化 SerialPort 類實(shí)例和配置資源參數(shù)方法如下 : namespace BlueTooth_RS232_ { public partial class FormMain : Form //窗體 { public FormMain() { InitializeComponent()。 = false。 = false。 …… default: = true。 = false。 break。 //打開串口 } PDA 通信讀寫操作 在成功設(shè)置通信參數(shù)并打開串口連接后 ,可采取事件觸發(fā)的方式對(duì)數(shù)據(jù)進(jìn)行接收 與發(fā)送 處理。 //緩存實(shí)例化 基于 PDA 的藍(lán)牙通信程序設(shè)計(jì) —— 軟件設(shè)計(jì) 17 private void serialPort_DataReceived(object sender, e) { byte[] recBytes = new byte[]。 //將數(shù)據(jù)重載入緩存 } private void timer_Tick(object sender, EventArgs e) //將數(shù)據(jù)從緩存?zhèn)魉偷浇邮諈^(qū) { if () //如果該項(xiàng)選中,則轉(zhuǎn)化為 unicode 字符顯示 { char[] chars = ().ToCharArray() 。 } } else { += ()。 byte[] sendBytes = new byte[]。 關(guān)閉串口 為了省電 ,掌上電腦串口通常關(guān)閉。 圖 11 程序組件框圖 PC 端的軟件設(shè)計(jì) PC 端硬件 連接比較簡(jiǎn)單 , 將藍(lán)牙 USB 適配器直接通過(guò) USB 連接到 PC 上即可 , 需要注意的是 , 插上適配器后 , 如果是在 XP 系統(tǒng)下 , 系統(tǒng)會(huì)自動(dòng)裝載藍(lán)牙適配器驅(qū)動(dòng)程序 , 因?yàn)樵诖耸且_發(fā)自己的簡(jiǎn)單應(yīng)用程序 , 而自動(dòng)安裝的驅(qū)動(dòng)程序是針對(duì)高級(jí)應(yīng)用開發(fā)的 , 覆蓋了 HCI 層 , 因此需要將其卸載 , 安裝針對(duì)特定適配器的 HCI 驅(qū)動(dòng)程序。編程環(huán)境為