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