藍牙Controller框架梳理


Controller基本概念

Controller構成

藍牙協議分host和controller兩個部分,Host是正真意義的藍牙協議,Controller為藍牙底層,或者說是基帶芯片。基帶芯片又可以分為三個部分,Radio,Link Layer和HCI。

Radio

Radio可以理解為一個獨立的協處理器,負責調制解調2.4G裸數據,完整的Radio功能應該包括,數據組包拆包,CRC校驗,白話,調制解調等功能。

根據Controller的設計需要,Radio協處理器被設計為一個小型狀態機,下圖為Nordic 52810 Radio內核狀態機狀態,該狀態機分為9種狀態,Radio會輸出下圖9種狀態給SOC芯片,SOC芯片根據相應狀態機狀態,進行處理,協處理器和SOC之間共用數據總線。

Link layer架構

Link Layer決定藍牙所處的狀態,藍牙可以分為idel(standby),adv,scan,init以及connection狀態,connection又可分為master或者slave。狀態之間可以相互轉換。

Link Layer允許多種狀態同時並存,一個piconet可以支持多種狀態,即Combination States。Combination States並不是任意若干種狀態的結合,其中有限制存在,比如一個piconet不可能同時支持master和slave狀態,比如兩個scan不能同時存在,下圖多多狀態的二維組合分布圖。

HCI架構

藍牙和藍牙WIFI二合一芯片HOST和Controller早期都是兩類芯片廠家分開提供,兩顆芯片交互需要采用統一標准,HCI層由此而來。Host藍牙協議只需要按照藍牙聯盟規范的HCI指令即可控制藍牙controller。

Controller宏觀認知

ADV廣播

SCAN掃描

INIT初始化

Connection連接

Controller核心框架

核心架構

Link Layer和芯片Radio設計相關度較大,根據與PYH(radio)傳輸接口的不一樣,可以分為:

  • Radio負責packet,即硬件只提供收或者發一個包的接口。

  • Radio負責frame,即硬件提供包含一個IFS的一組收發的接口。

  • Radio硬件負責event,即硬件提供控制整個event內,若干組收發的接口(CEVA BLE IP的實現采用的就是這種)。

三種方案數字設計的復雜度是遞增的,靈活性是遞減的,對CPU的處理能力需求是遞減的。

LL調度機制-Radio負責packet

以Radio負責packet的方案介紹LL的整體設計思路:

根據Radio狀態機的9種狀態,設計Link Layer中的adv,scan,init,master,slave 事件,事件之間的存在如下相互轉換關系:

每個事件結束后,調用任務調度機,決定ll下一個狀態,下一個ll狀態可能是當前狀態的延續,可能是新的狀態,也可能是當前狀態和新的狀態的Combination,所以ll調度機不光決定一個狀態,還需要考慮多狀態能否共存,Scheduler確定是否能執行下一個狀態后,啟動該任務,執行該任務。

談到狀態共存,adv,scan,init必須給connection事件讓步,在這個時間內,哪些事可以提前做,哪些事需要推遲做,這是Scheduler需要考慮的。

總結

LL事件,Scheduler任務調度,HCI組包解包是構成Radio的三大模塊, 弄清楚整個控制框架,配合時間戳要求,才能把controller玩轉起來,controller時間戳同步也是一個非常頭疼的話題,特別是攪合在任務調度一起,到此了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM