1藍牙技術的背景
藍牙是一種短距離的射頻通信連接,最初設計的目標是代替用來連接固定或便攜電子設備的電纜。藍牙設備工作在不需要許可證2.4GHz的工業、科學和醫療(ISM)頻帶。藍牙基帶協議同時支持電路交換和分組交換通信,并采用跳頻擴展頻譜(FHSS)技術進行傳輸。在北美和歐洲的大部分地區,藍牙設備工作于2.402~2.480GHz的頻帶,整個頻帶被分成 79.1MHz帶寬的子信道。
藍牙協議的體系結構分底層硬件模塊、中間協議層和高層應用三大部分。底層硬件部分包括無線跳頻(RF)、基帶(BB)和鏈路管理(LM)部分。它們分別定義了藍牙收發器在2.4GHz頻段上,以跳頻的方式傳輸信息幀和傳輸鏈路連接的建立或拆除以及鏈路的安全和控制所必須滿足的要求。中間協議層包括邏輯鏈路控制和適應協議(L2CAP)、服務發現協議(SDP)、串口仿真RFCOMM和電話通信協議(TCS)。它們分別完成數據的拆裝、服務質量控制、協議復用、發現網絡中可用的服務及服務特性、仿真R-232串口、提供藍牙設備間話音和數據的呼叫控制信令等功能。在這兩層之間規定了一個主控制器接口(HCI)。這是協議中軟硬件之間的接口,該層以上的協議軟件實體運行在主機上,而HCI以下的功能由藍牙設備來完成。在協議體系結構的最上部是高層應用的框架(Profiles)。目前僅規定了撥號網絡、耳機、局域網訪問、文件傳輸等常規應用,將來還會不斷增加。各種應用程序可以通過各自對應的Profi1e實現無線通信。
在這個標準的支持下,藍牙系統支持點對點和點對多點的連接,每個藍牙系統可以連接200個以上藍牙裝置。藍牙系統的傳輸特性是在供工業、科學和醫學領域自由使用的ISM 2.4GHz頻段內用單工或全雙工的方式進行信息傳輸。每個藍牙信道的帶寬是1MHz,它支持三個同步數據信道或同時支持 一個同步數據信道和一個異步數據信道。每個同步數據信道的數據傳輸率是64kb/s,用于語音數據的傳輸;異步數據信道的傳輸率是下行721 kb/s和上行57.6 kb/s,用于數字數據的傳輸。若設置為上下行對稱的傳輸方式,傳輸率上下行各是432.6 kb/s。一般情況下的傳輸距離是10m(30FEET),最大可達100m,自動調整。
2 HCI概述
主控制器接口(HCI)是藍牙協議中軟硬件之間的接口,它提供了一個調用基帶、鏈路管理、狀態和控制寄存器等硬件的統一命令接口。藍牙設備之間進行通信時,HCI以上的協議軟件實體在主機上運行,而HCI以下的功能由藍牙設備來完成,兩者之間通過一個對兩端透明的傳輸層進行交互。
如圖1所示,藍牙標準對機控制器接口(HCI)的定義如下:HCI提供了一個調用和訪問基帶控制器和鏈路控制器以及硬件狀態和控制寄存器的命令接口。這一接口提供了一個訪問藍牙基帶功能的統一方法。在主機端的HCI軟件和藍牙硬件的HCI固件之間存在著與藍牙協議關系并不密切的幾層中間層,我們稱之為機控制器傳輸層,它們提供數據的透明傳輸。
HCI由兩部分組成,實現命令接口的軟件和用來連接藍牙子系統和主機的物理硬件。HCI軟件的目的是使構成接口的硬件對系統高層軟件來說看起來是透明的。
藍牙軟件結構包括兩種類型的部件。數據相關部件負責數據通過鏈路的傳輸。控制相關部件則負責鏈路的控制和管理。圖2 示出了HCI軟件結構以及與藍牙主機接口硬件的關系。
3 HCI流控制
流控制在主機到主控制器之間,用于防止將傳送到未應答遠程設備的ACL數據溢出主控制器的數據緩沖區,由主機來管理主控制器的數據緩沖區。
主機通過發出Read_Buffer_Size命令進行初始化,這個命令的返回參數可以確定主機發向主控制器的HCI ACL和SCO數據包(不包括包頭)的最大長度。另有兩個返回參數表示主控制器為等待傳輸可以緩存的HCI ACL和SCO數據分組的數量。當只有一個與其他設備的連接或者設備處于回環模式時,主控制器利用已完成數據分組事件來控制從主機發來的數據流。事件分組包括一個鏈接句柄列表以及對應連接上自上一個此事件以來完成的HCI包的數目;完成指的是發送、清空或回環回主機。根據這一事件的返回參數以及讀緩沖區大小命令的返回參數,主控制器可以進行流量控制。每當主機發送一個ACL或SCO數據包,主機應該記錄主控制器的相應鏈路緩沖區中的剩余空間減少了一個包,當主機收到完成包數目事件,主機知道了又有多少緩沖區空間得到釋放,主機可以算出現在主控制器可以接收的包數目。當主控制器中有數據時,它必 須周期性的向主機發送完成包數目事件,直到向主機報告所有包都發送或清空,而發送的間隔由各廠家自行定義。注意,如果SCO流量控制失效,則已完成數據分組事件號就不能在SCO鏈接句柄中進行報告。
對應于每一個鏈接句柄,數據必須依照他們在主機生成時的順序依此在HCI數據包中發往主控制器,主控制器也同樣按順序將這些數據發往空中,另一設備的主控制器收到后也必須按序發向它的主機,這意味著同一連接句柄上數據的順序自生成起不再改變。
在某些情況下,主控制器到主機方向的流量控制是必須的,一般采用Set_Host_Controller To_Host_Flow_Control命令來開關這個方向的流量控制。這個方向的流量控制方法類似于上述的方法。起初,主機發出Host_Buffer_Size命令,告知主控制器發向主機的ACL和SCO數據包的最大長度以及主機緩沖區可存放ACL和SCO數據包的數目。主機利用主機Host_Number_Of_Completed_ Packets命令類似于主控制器的完成包數目事件,主機完成包數目命令是不需要命令流量控制的特殊命令,在有連接或處于本地回環模式時可以隨時發送,這使得兩個方向的流量控制同樣的工作,正常的命令流也不被打斷。
當主機收到拆鏈完成事件后,可以認定該連接句柄上的所有發往主控制器的數據被清空,相應數據緩沖區被釋放,主控制器不需要用完成包數目事件將這些告訴主機。如果也采用了主控制器到主機方向的流量控制,主控制器在發送了拆鏈完成事件后假設主機在收到這一事件后也清空了這一連接句柄上的所有數據,主機也不需要用主機完成包數目命令將這些告訴主控制器。
4 HCI命令與事件
主機通過HCI驅動程序提供的一系列命令來控制藍牙網絡接口。除這些命令外,藍牙標準還定義了一級由藍牙網絡接口中的HCI固件產生的事件,用來指示接口的狀態變化。
HCI命令和事件與來自無連接和同步連接的數據一起通過HCI傳輸接口硬件進行傳輸。這些數據的復用方式對接口來說是確定的。圖3 示出了其工作情況。
HCI提供一種統一的方法訪問藍牙硬件。HCI 鏈路命令提供主機控制與其他藍牙設備鏈路層連接的能力,一般這些命令導致鏈路管理器與遠端設備交換鏈路管理器協議命令。HCI策略命令用來影響本地或遠端鏈路管理器的行為,這些命令提供主機影響鏈路管理器如何管理微微網的方法。主控制器和基帶命令、信息命令及狀態命令用于主機訪問主控制器上的不同的寄存器。
HCI命令需要一定的時間完成,因此這些命令的處理結果將以事件的形式返回主機。如對于大部分的HCI命令主控制器完成后生成一個命令完成事件,這個事件包含了完成命令的返回參數。為了使主機具備發現HCI傳輸層差錯的能力,在主機發出命令和收到主控制器響應之間我們判斷是否超時,由于不同HCI傳輸層的差異,建議采用一秒作為此定時器的默認值。
HCI是通過包的方式來傳送數據、命令和事件的,所有在主機和主控制器之間的通信都以包的形式進行。包括每個命令的返回參數都通過特定的事件包來傳輸。HCI有數據、命令和事件三種包,其中數據包是雙向的,命令包只能從主機發往主控制器,而事件包始終是主控制器發向主機的。主機發出的大多數命令包都會觸發主控制器產生相應的事件包作為響應。包的格式如圖4所示。
(1)命令包分為六種類型:
● 鏈路控制命令;
● 鏈路政策和模式命令;
● 主機控制和基帶命令;
● 信息命令;
● 狀態命令;
● 測試命令。
(2)事件包可分為三種類型:
● 通用事件,包括命令完成包(Command Complete)和命令狀態包(Command Status);
● 測試事件;
● 出錯時發生的事件,如產生丟失(Flush Occured)和數據緩沖區溢出(Data Buffer Overflow)。
(3)數據包則可分為ACL和SCO的數據包。
5 HCI模塊結構
HCI模塊根據協議規定,完成協議功能、封裝 HCI命令以及上層協議的數據,處理下層事件。
HCI命令事件處理模塊完成命令的封裝和事件的解析,在收到上層協議或應用的調用命令請求后,模塊完成命令包的封裝,而后調用發送函數將數據傳到數據收發模塊。當接收函數收到HCI事件時,調用HCI命令事件處理模塊的事件處理函數,處理完畢后依據事件的性質,將響應傳到上層協議或應用。
HCI數據處理模塊完成ACL和SCO數據的封裝處理,但對凈荷不作任何解析和處理。收發函數主要完成與數據收發模塊的通信,對收到的數據根據數據的類型,分別調用命令事件處理模塊或數據處理模塊予以處理。
6 HCI傳輸層
HCI的傳輸層定義了三類數據如何在藍牙網絡接口和藍牙主機間進行傳輸。HCI傳輸層定義了每一類數據如何封裝和通過接口硬件進行復用。目前藍牙規范定義了三個HCI傳輸層:UART傳輸層;RS232傳輸層;USB傳輸層。下面以RS232傳輸層為例對HCI傳輸層作具體的說明。
HCI RS232傳輸層的目標是在藍牙主機和藍牙主控制器之間的物理RS232接口上使用藍牙HCI。通過RS232傳輸層可以發出四種HCI分組,但主控制器接口不能區分四種HCI類型。在分組之前必須加上8位的分組指示器以區分分組類型。0x01表示指令分組,0x02表示ACL數據分組,0x03表示SCO 數據分組,0x04表示事件分組,另外還有0x05表示錯誤消息分組,0x06表示協商分組。錯誤消息分組用于將錯誤報告給發送端;而協商分組用于協商通信設置和協議。在RS232鏈路上發送任何字節之前,都應當在主控制器和主機之間對波特率、奇偶校驗值類型、終止位和協議模式進行協商。每發送一個以上HCI分組時,一個8位序列號將加1,除非是重發一個錯誤的分組。
同步機制可以選擇RTS/CTS或分界符。在不能使用RTS/CTS時,將采用含16位CRC的幀和含COBS的分界符0x7e作為檢錯和重新同步的手段。 16位CRC應附在分組末尾,結束分界符0x7e之前。起始分界符0x7e后緊跟著分組類型指示段。COBS 是PPP的改進,不考慮數據模式,它將產生低于5%的開銷。在此采用一種簡單糾錯方案,發送端將僅重發含有錯誤的分組。
責任編輯:gt
-
控制器
+關注
關注
112文章
16203瀏覽量
177414 -
接口
+關注
關注
33文章
8497瀏覽量
150835 -
藍牙
+關注
關注
114文章
5767瀏覽量
169821
發布評論請先 登錄
相關推薦
評論