藍牙協議框架體系基本上就是這個圖了,有點亂。安全
而後,咱們先從底層開始分析,主要是由基帶層和鏈路管理層組成。服務器
無線鏈接(RF)經過2.4GHZ無需申請的ISM頻段,實現數據的過濾與傳輸。app
基帶層提供兩種不一樣的物理鏈路(同步面向鏈接鏈路SCO,異步無鏈接鏈路ACL)主要負責跳頻和藍牙數據幀的傳輸。框架
LMP負責兩個或多個設備鏈路的創建和拆除及鏈路的安全和控制,同時他爲上層軟件模塊提供了不一樣的訪問入口。異步
藍牙主機控制器HCI:是由基帶控制器,鏈接管理器,控制和時間寄存器等組成。他是藍牙中軟硬之間的接口。上下兩層的數據和消息必須經過HCI的解釋才能進行。函數
中間協議層:spa
中間協議層主要是由邏輯鏈路控制與適配協議L2CAP(logical link control and adaptation protocol),服務發現協議SDP,線纜替換協議和二進制電話控制協議TCS等功能組成。接口
L2CAP是核心部分,他是其餘協議實現的基礎。位於基帶之上,向上層提供面向鏈接和無鏈接服務。他主要完成數據的拆裝,服務質量控制,協議複用,分組的分割與複用。隊列
SDP是一個基於客戶/服務器結構的協議。工做於L2CAP層之上,爲上層應用程序提供一種機制來發現可用的服務與屬性。事件
RFCOMM是一個仿真有線鏈路的無限數據仿真協議。他在藍牙基帶上仿真RS-232控制和數據信號,爲上層業務提供傳送。
TCS定義了用於藍牙設備之間創建語音和數據呼叫的控制信令。
高端應用層:
高端協議層主要是包括了PPP,TCP UDP,WAP等協議,這裏很少介紹。
藍牙很重要的一個特性就是全部的藍牙產品無需實現全部的藍牙規範。爲了更加容易保持藍牙設備之間的兼容,因此採用了profile(不懂!!!)。profile定義了設備如何實現一種鏈接或應用。有四種基本的profile他們包括GAP/SDAP/SPP/GOEP
屬性協議(AP),通用屬性規範(GATT) 通常訪問應用規範(GAP)。屬性協議定義了客戶端與服務器端如何發送符合標準的消息。由6種基本操做構成:請求,響應,命令,指示,通知,確認。通用屬性規範:定義瞭如何發現與使用服務,特性與描述符的標準方法。主要有服務,特性的發現,客戶端的讀寫等。通常訪問規範:定義了藍牙設備如何發現和創建與其餘設備的鏈接。他處理一些通常模式的業務和一些安全性問題,同時還處理一些有關鏈接的業務。
藍牙協議棧經過軟中斷將底層事件(收到藍牙數據,連接成功,收到廣播)拋給app,app再捕獲本身感興趣的時間作相應的處理。至於怎麼捕獲,就是根據switch case語句(你懂的)來的。如圖:
應用程序經過_SVC 指令觸發異常進入協議棧SVC異常處理函數,而後根據number調用協議棧中預先實現的底層協議處理函數。
而中斷其實是根據中斷向量表中中斷號進入協議棧相應中斷,而後經過中斷號的「中斷偏移」返回到應用程序的中斷處理函數。
協議棧收到底層數據作相應處理後,處理器進入協議棧將evt_id放入事件隊列,後執行SWI中斷處理函數。而後程序進入應用程序再取出事件並交給事件派發程序(即ble_evt_dispatch()函數)處理。事件派發程序將事件傳給相關服務和事件處理任務。
更具體的代碼分析,等到二更了,由於我也是菜鳥。。。