藍(lán)牙技術(shù)作為一種短距離的無(wú)線通信技術(shù),具有巨大的發(fā)展?jié)摿?本文意從HCI層進(jìn)行藍(lán)牙技術(shù)的應(yīng)用開(kāi)發(fā)。本文首先介紹了HCI和UART的結(jié)構(gòu)與原理,在分析和比較HCI三種類(lèi)型接口USB、RS-232和UART優(yōu)缺點(diǎn)的基礎(chǔ),提出了一種基于FPGA采用硬件設(shè)計(jì)HCI-UART的實(shí)現(xiàn)方式。本設(shè)計(jì)在Quartus II 9.0集成設(shè)計(jì)環(huán)境下,采用硬件描述語(yǔ)言Verilog分模塊設(shè)計(jì)完成,設(shè)計(jì)經(jīng)過(guò)Modelsim 6.4a仿真與驗(yàn)證。
1 ?引言
藍(lán)牙(Bluetooth)是世界級(jí)著名的計(jì)算機(jī)和通信領(lǐng)域大公司(愛(ài)立信、IBM、INTEL、諾基亞和東芝等) 倡導(dǎo)推出的一種無(wú)線通信技術(shù)的開(kāi)放式工業(yè)標(biāo)準(zhǔn),其取自10 世紀(jì)丹麥國(guó)王哈拉爾德(HaraldBluetooth)的 別名,意在形成一個(gè)全球統(tǒng)一的無(wú)線通信技術(shù)標(biāo)準(zhǔn)[1]。藍(lán)牙技術(shù)消除了設(shè)備之間的連線,用無(wú)線連接取代 傳統(tǒng)的電線。藍(lán)牙主要有藍(lán)牙硬件和藍(lán)牙協(xié)議組成,藍(lán)牙硬件由模擬部分和數(shù)字部分組成。模擬部分指藍(lán) 牙射頻發(fā)射臺(tái),數(shù)字部分指主控制器。藍(lán)牙協(xié)議采用電路及信息包兩種交換方式,主要有射頻(RF)、基帶 (BB)、鏈路管理器(LM)、主接控制接口(HCI,Host CONTROL Interface)底層嵌入式驅(qū)動(dòng)程序、HCI 高層軟 件驅(qū)動(dòng)程序、邏輯鏈路控制適配協(xié)議(L2CAP)、串口仿真協(xié)議(RFCOMM)、業(yè)務(wù)發(fā)現(xiàn)協(xié)議(SDP)、電話控制協(xié) 議(TCS)構(gòu)成[2]。
目前,藍(lán)牙技術(shù)應(yīng)用開(kāi)發(fā)有兩種方式:1)單微控制器方式,所有的藍(lán)牙傳輸協(xié)議及用戶應(yīng)用程序都 集成到一個(gè)模塊中,由一個(gè)處理器完成。它不一定需要HCI 層,但其涉及到射頻、基帶等硬件協(xié)議層,開(kāi) 發(fā)方式復(fù)雜,開(kāi)發(fā)周期加長(zhǎng),成本代價(jià)也高;2)雙微控制器方式,底層傳輸協(xié)議一般通過(guò)藍(lán)牙硬件模塊 實(shí)現(xiàn),模塊內(nèi)部嵌入式的微處理器成為主機(jī)控制器,高層傳輸協(xié)議和用戶應(yīng)用程序分別由主機(jī)和主控制器 來(lái)實(shí)現(xiàn),主機(jī)和主機(jī)控制器之間通過(guò)標(biāo)準(zhǔn)的物理總線接口來(lái)連接[3]。由于主機(jī)與主控制層在硬件上完全分 離,需通過(guò)HCI 層把藍(lán)牙模塊和藍(lán)牙主機(jī)連接起來(lái)。在實(shí)際應(yīng)用中,由于高層協(xié)議的復(fù)雜性和多樣性,采 用這種方式,用戶不需要考慮底層就可以實(shí)現(xiàn)對(duì)通信流程的控制,符合用戶實(shí)際需求,且開(kāi)發(fā)周期短,可 移植性好,本文的設(shè)計(jì)也是采用這種方式。
2 ?系統(tǒng)基本原理
2.1 UART 基本原理
UART(Universal Asynchronous Receive Transmitter)又稱通用型異步接收及發(fā)送接口[4],是一種異 步通信傳輸方式。其通信協(xié)議幀格式包括五個(gè)部分:空閑狀態(tài)(idle,高電平)、起始位(start,低電平)、 5~8 位數(shù)據(jù)位、奇偶校驗(yàn)位(parity,可選)和停止位(Stop,位數(shù)可為1,1.5 和2 位)。這種格式是由起 始位和停止位來(lái)實(shí)現(xiàn)字符的同步,其中奇偶校驗(yàn)位的有無(wú)和數(shù)據(jù)位的長(zhǎng)度由通信雙方約定。一幀數(shù)據(jù)傳輸完畢后可以繼續(xù)傳輸下一幀數(shù)據(jù),也可以繼續(xù)保持為高電平,兩幀之間保持高電平,持續(xù)時(shí)間可以任意長(zhǎng)。 本設(shè)計(jì)規(guī)定的通信協(xié)議幀格式為:1 位起始位(start,低電平)、8 位數(shù)據(jù)位(d0~d7)、1 位奇偶校驗(yàn)位(parity) 和1 位停止位(stop,高電平),如圖1 所示。
2.2 HCI 基本原理
2.2.1 HCI 傳輸層的比較
HCI 層位于藍(lán)牙高層協(xié)議和低層協(xié)議之間,其目的是實(shí)現(xiàn)主機(jī)設(shè)備與藍(lán)牙模塊之間的互操作,即HCI 是藍(lán)牙主機(jī)與主機(jī)控制器間軟硬件接口。HCI 為藍(lán)牙硬件中基帶控制器和鏈接管理器提供了命令接口,從 而實(shí)現(xiàn)對(duì)硬件狀態(tài)注冊(cè)器和控制寄存器的訪問(wèn),提供了對(duì)藍(lán)牙基帶的統(tǒng)一訪問(wèn)模式。 目前,HCI 的傳輸層主要有三種:USB,RS-232,UART。此外,還有一種PC 卡傳輸層,其沒(méi)有定義在 藍(lán)牙標(biāo)準(zhǔn)中,而是在藍(lán)牙SIG 于1999 年8 月發(fā)表的藍(lán)牙PC 卡傳輸層1.0 版白皮書(shū)中描述的。藍(lán)牙沒(méi)有規(guī) 定PC 卡傳輸層實(shí)現(xiàn)的具體細(xì)節(jié),而是要求制造商提供傳輸驅(qū)動(dòng)程序,以配合主機(jī)上的HCI 驅(qū)動(dòng)程序[5]。不 同傳輸層對(duì)HCI 事件處理沒(méi)有影響。
(1)USB 傳輸層在藍(lán)牙硬件上使用USB 硬件接口(該硬件接口有兩種嵌入方式:一種是作為USB 加/ 解密芯片,另一種是集成到PC 機(jī)主板上)[6]。這一種類(lèi)編碼要求不管使用哪一廠商生產(chǎn)的設(shè)備,都能加載 合適的驅(qū)動(dòng)程序棧;同時(shí)它還保證了通過(guò)控制終端的HCI 指令和USB 指令有所區(qū)別。其缺點(diǎn)是軟件協(xié)議復(fù) 雜,軟件開(kāi)銷(xiāo)巨大。
(2)RS-232 傳輸層:通過(guò)位于主機(jī)和主控制器之間的物理RS-232 接口實(shí)現(xiàn)。事件包和數(shù)據(jù)包通過(guò)該 層,但該層并不對(duì)它們進(jìn)行解碼。該傳輸層支持的是主機(jī)控制器和不同實(shí)體中的主機(jī)的通信情況,通信距 離較遠(yuǎn),傳輸層特別規(guī)定了電氣特性,并采用了更為精細(xì)的鏈路協(xié)議以應(yīng)對(duì)較高的線路誤碼率,但在硬件 上需要增加電平轉(zhuǎn)換電路。
(3)UART 傳輸層跟RS-232 傳輸層類(lèi)似,也是采用一個(gè)UART 的串行通信方式在主控制器與主機(jī)之間 進(jìn)行數(shù)據(jù)傳輸。應(yīng)用環(huán)境主要是針對(duì)主控制器和主機(jī)位于同一個(gè)電路板上,傳輸層假定UART 通信無(wú)線性 錯(cuò)誤。與其它的相比,UART 傳輸層方式比較靈活,其應(yīng)用環(huán)境決定其連接錯(cuò)誤相對(duì)較少,可以采用簡(jiǎn)單的 復(fù)位恢復(fù)機(jī)制實(shí)現(xiàn)失步時(shí)的復(fù)步。由于主機(jī)和主控制器都處于同一塊電路板上,因而傳輸層不需要規(guī)定電 氣信號(hào),可以直接采用TTL、LV-CMOS 等IC 端電壓,應(yīng)用較多。同時(shí),UART 傳輸層避開(kāi)了RS-232 傳輸層 所要求的較繁瑣的協(xié)商和同步機(jī)制。UART 性能和數(shù)據(jù)吞吐率水平與USB 接口相當(dāng),而傳輸協(xié)議卻較為簡(jiǎn)單, 減少了軟件開(kāi)銷(xiāo),是一種更為經(jīng)濟(jì)高效的全硬件解決方案。
2.2.2 HCI 分組
兩個(gè)藍(lán)牙設(shè)備間進(jìn)行數(shù)據(jù)通信是通過(guò)HCI 分組實(shí)現(xiàn)的,HCI 是通過(guò)分組的方式來(lái)進(jìn)行信息交換的。HCI 分組有三種類(lèi)型:指令分組(Command Packet)、事件分組(Event Packet)和數(shù)據(jù)分組(Data Packet)[7]。
(1)指令分組
只從主機(jī)發(fā)向主機(jī)控制器,分為鏈路控制指令、鏈路策略指令、主機(jī)控制指令與基帶指令、信息參數(shù) 指令、狀態(tài)參數(shù)指令和測(cè)試指令。HCI 指令分組由操作碼(OpCode)、參數(shù)總長(zhǎng)(Parameter Total Length) 和參數(shù)列表(Parameters)三部分組成[8]。
(2)事件分組
只從主機(jī)控制器發(fā)向主機(jī),用以說(shuō)明指令分組的執(zhí)行情況,是主機(jī)控制器向主機(jī)報(bào)告各種事件的分組。 包括通用事件(包括指令完成事件和指令狀態(tài)事件)、測(cè)試事件、出錯(cuò)事件三種。
(3)數(shù)據(jù)分組
它是在主機(jī)和主機(jī)控制器間雙向傳輸,一般分為ACL(Asynchronization Connectionless)數(shù)據(jù)分組和 SCO (Synchronization Connection Oriented)數(shù)據(jù)分組兩種[9]。二者之間的區(qū)別在于:ACL 鏈路支持對(duì)稱和非對(duì)稱傳輸,分組交換和多點(diǎn)連接,適用于傳送數(shù)據(jù);SCO 鏈路支持對(duì)稱傳輸,電路交換和點(diǎn)到點(diǎn)連接, 適用于傳輸語(yǔ)音。
3 ?HCI-UART 的FPGA 設(shè)計(jì)
主機(jī)與藍(lán)牙模塊之間使用指令——應(yīng)答的方式進(jìn)行通信,主機(jī)向主機(jī)控制器發(fā)送指令分組,主機(jī)控制 器執(zhí)行某一指令后,大多數(shù)情況下會(huì)返回給主機(jī)一個(gè)指令完成事件分組,該分組攜帶有指令完成的信息。 如果指令分組參數(shù)有誤,返回的指令狀態(tài)事件分組就會(huì)給出相應(yīng)的錯(cuò)誤代碼。主機(jī)與主機(jī)控制器間的數(shù)據(jù) 交換則通過(guò)數(shù)據(jù)分組實(shí)現(xiàn)。主控制器系統(tǒng)原理框圖如圖2 所示。
3.1 UART 的設(shè)計(jì)
UART 的設(shè)計(jì)主要包括三個(gè)部分:發(fā)送器、接收器和波特率發(fā)生器,設(shè)計(jì)采用分模塊完成[10]。
(1)波特率發(fā)生器:
UART 的數(shù)據(jù)接收和發(fā)送是通過(guò)對(duì)波特率的設(shè)置進(jìn)行實(shí)現(xiàn)的。波特率發(fā)生器采 用分頻器實(shí)現(xiàn),分頻得到一個(gè)頻率為波特率16 倍的波特率時(shí)鐘clk_baud,分頻數(shù)N 計(jì)算公式如(1)所示, 其中clk_sys 表示系統(tǒng)時(shí)鐘,baudrate 為UART 的波特率。
(2)發(fā)送器模塊:
檢測(cè)到發(fā)送信號(hào)時(shí),裝載數(shù)據(jù),根據(jù)數(shù)據(jù)產(chǎn)生奇偶校驗(yàn)位,按通信協(xié)議幀的格式 的要求依次發(fā)送起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位,并產(chǎn)生各種控制信號(hào)。整個(gè)發(fā)送過(guò)程采用有限狀 態(tài)機(jī)實(shí)現(xiàn),分成五個(gè)狀態(tài)(空閑idle,發(fā)送起始位send_start,發(fā)送數(shù)據(jù)send_data,發(fā)送奇偶校驗(yàn)位 send_parity,發(fā)送停止位send_stop),具體過(guò)程如圖3 所示。
(3)接收器模塊:
當(dāng)檢測(cè)到接收信號(hào)線rxd 上有電平變化時(shí)[10],即通過(guò)檢測(cè)協(xié)議幀的格式接收數(shù)據(jù), 如果格式正確則將數(shù)據(jù)存儲(chǔ)起來(lái),否則放棄本次數(shù)據(jù),同時(shí)產(chǎn)生錯(cuò)誤標(biāo)志信號(hào)。設(shè)計(jì)實(shí)現(xiàn)采用有限狀態(tài)機(jī), 為了保證數(shù)據(jù)接收的正確性,數(shù)據(jù)采集都在時(shí)鐘中間時(shí)刻完成。接收過(guò)程分為五個(gè)狀態(tài)(空閑idle,起始 位檢測(cè)start_check,接收數(shù)據(jù)rec_data,奇偶校驗(yàn)位檢測(cè)parity_check,停止位檢測(cè)stop_check),接 收過(guò)程如圖4 所示。
3.2 HCI 的設(shè)計(jì)
藍(lán)牙HCI 分組在串行連接傳輸層的成幀是簡(jiǎn)單地加一個(gè)標(biāo)識(shí)頭(用16 進(jìn)制表示):01H 表示指令分組, 02H 表示ACL 數(shù)據(jù)分組,03H 表示SCO 數(shù)據(jù)分組,04HH 表示事件分組。根據(jù)HCI 的基本工作原理與HCI 分組的特點(diǎn),HCI 的實(shí)現(xiàn)主要有四個(gè)功能模塊組成,包括HCI 命令處理模塊(command_handle),HCI 事 件處理模塊(event_handle),HCI 數(shù)據(jù)處理模塊(data_handle),收發(fā)控制模塊(rec_tra_CONTROLler)。其組成框圖 如圖5 所示:
HCI 接口通信過(guò)程包括如下幾個(gè)部分:
1)藍(lán)牙系統(tǒng)初始化(initial);
2)系統(tǒng)準(zhǔn)備好后,進(jìn)入查詢狀況(inquiry);
3)建立數(shù)據(jù)連接(creat_connection);
4)數(shù)據(jù)傳輸(transmit);
5)斷開(kāi)連接(disconnect);
首先,藍(lán)牙主從設(shè)備進(jìn)行初始化;接著藍(lán)牙的主設(shè)備在范圍內(nèi)用Inquiry 命令分組查找其他的藍(lán)牙設(shè) 備。然后,主設(shè)備會(huì)收到對(duì)應(yīng)的藍(lán)牙從設(shè)備的應(yīng)答信息,其包括有事件分組包和從機(jī)地址包。之后,藍(lán)牙 主設(shè)備向從設(shè)備發(fā)送Create_Connection 的命令分組,然后,主設(shè)備會(huì)收到一個(gè)連接完成的事件分組 Connection_Complete,表示兩機(jī)之間已經(jīng)建立了連接。這樣,兩個(gè)藍(lán)牙設(shè)備之間就可以進(jìn)行數(shù)據(jù)的通信, 即建立連接。當(dāng)數(shù)據(jù)傳輸完成后,斷開(kāi)主從設(shè)備之間的連接,系統(tǒng)重新復(fù)位,一個(gè)數(shù)據(jù)傳輸過(guò)程就結(jié)束了。
4 ?仿真與驗(yàn)證
本設(shè)計(jì)采用分模塊設(shè)計(jì),在 Quartus II 9.0 下完成設(shè)計(jì)和綜合,且經(jīng)過(guò)Modelsim*a 的仿真驗(yàn)證。 同時(shí)在搭建的硬件通信測(cè)試平臺(tái)下測(cè)試過(guò),證明該設(shè)計(jì)確實(shí)可行。 5 5 結(jié)束語(yǔ)
HCI 是實(shí)現(xiàn)藍(lán)牙協(xié)議棧時(shí)必須實(shí)現(xiàn)的一個(gè)部分。它是藍(lán)牙上層協(xié)議控制底層硬件的接口,首先要根據(jù) 具體應(yīng)用的需要選擇合適的傳輸層,并盡可能的為上層協(xié)議提供友好的API,在硬件實(shí)現(xiàn)中,UART 傳輸層具有其他傳輸層無(wú)法比擬的優(yōu)點(diǎn)。
本文創(chuàng)新在于從工程實(shí)際開(kāi)發(fā)角度出發(fā),提出了一種基于FPGA的藍(lán)牙HCI-UART 全硬件實(shí)現(xiàn)方式,縮 短了開(kāi)發(fā)周期,降低開(kāi)發(fā)成本,具有一定的工程參考價(jià)值。
?
評(píng)論
查看更多