蓝牙baseband概述
從藍牙specispecification中看,基帶協議主要分為8個部分來介紹的,分別是概述、物理信道、物理連接、邏輯傳輸、邏輯連接、封包、比特流的處理、組網行為。這里面會涉及到很多的概念,主要是在概述中解釋這些概念,下面分別來介紹上面的幾個部分:
概述
首先,我們先看一下基帶處于藍牙的那一層:
其實現在藍牙controller中,下面對接的直接是物理層的Radio,上面是controller端的和主機端的接口,以及鏈路管理模塊。
我們這里注意到,上面涉及到了不少概念,我們來解釋一下:
Device Manager:顧名思義,其是設備管理模塊,我們想想作為一個藍牙設備它有哪些方面需要管理?答案是該模塊負責管理藍牙設備的名字、link key ,以及一些行為比如掃描、配對、連接等行為。
Baseband resource manager:從名字上,他是負責協調基帶資源的,這個也很好理解,藍牙基帶承載很多藍牙鏈路,那么這些鏈路需要分時復用基帶資源,Baseband resource manager就是來協調基帶資源的。
Link controller:我們看到這個模塊直接對接了底層的Radio了,其作用就是對于藍牙原始封包的編碼和解碼。
1.1 藍牙網絡
藍牙的網絡結構如上,一般情況下,我們用的最多的是上面的a圖所示情況,比如一個手機連接一個耳機進行聽音樂。b圖的情況雖然不是很多,但是隨著藍牙的普及,還是有很多場景的,比如一臺電腦,通過藍牙連接鍵盤和鼠標,甚至還可以連接一個藍牙耳機聽音樂。c圖的情況目前使用的確不多,這里是組成了一個scatternet,一個master 同時是另外一個網絡的slave。
1.2 藍牙地址
藍牙地址由兩部分組成,高24bit是 company id,低24bit是 公司內部分配的,其中0X9E8B00~0X9E8B3F 是保留的,0X9E8B33是general inquiry 的access code,0X9E8B00 是Limited Dedicated inquiry access code。
我們看看空氣包中 inquiry的access code 的確是0x9E8B33:
1.3 access code
那么這個access code 到底是什么呢?其實他就是為了識別某個特定的物理channel 而存在,我們可以把他翻譯成接入碼,相當于接入信道的通行證,這個物理上面的概念,并非邏輯上面的。
那么這個接入碼是由什么組成的呢?它來自于設備的地址的LAP部分,或者是專有的inquiry 地址,這里專有的inquiry地址就是上面講到的0x9E8B33 ,這個很好理解,因為inquiry 信道的接入碼必須是固定的,不能隨著設備而改變的,否則他就無法搜索到別的設備。接入碼也分為幾類:Device access code(DAC)、Channel access code(CAC)、Inquiry access code(IAC),
剛剛已經講過,IAC不應該是隨著設備而改變的,DAC是設備的接入碼,他主要使用在page 、page scan 以及page response 的子流程中,它來自于被paged的設備的地址。CAC也很好理解,當兩個設備配對之后,那么就會使用CAC 作為信道的接入碼來通信,他來自于主設備(master)
1.4 bluetooth clock
設備之前的通信都會有時鐘進行同步,藍牙的時鐘是一個28bit的計數器,時鐘頻率是3.2kHZ,也就是計數器每變化一下就是312.5us,
時鐘這里還有幾個概念,CLKN、CLKE、CLK
CLKN是本地時鐘,它沒有指明是master 還是slave,他只是指 設備的本地時鐘。
CLKE是預計的對方的時鐘,我們看上圖,是pager 的本地時鐘加上一個預估的offset ,得到了一個對于對方的時鐘的一個預估。
CLK:一般就是指master的時鐘。主設備的本地時鐘就是CLK,從設備的時鐘會和主設備的時鐘有個offset的差距。
1.5 工作頻段
藍牙工作的頻段是2400 – 2483.5 MHz.
物理信道
物理信道是藍牙通信架構的最底層,當兩個設備進行的通信的時候,共享一個物理信道。我們上面講過了接入碼的概念,他是和信道是對應的。總共有五種物理信道:
Basic piconet channel
Adapted piconet channel
Inquiry scan channel
Page scan channel
Synchronization scan physical channel
1.2 都是用于兩個設備之前的通信,他們之間的區別是,第二個信道中從設備使用的頻點和主設備是一樣的,并且他并不會使用全部的79個頻點,如果他檢測到一些頻點受到的干擾比較重,就不會去使用,那么其抗干擾能力肯定會更強一點。
目前市面上藍牙設備基本都支持Adapted piconet channel,3,4,5用途也很明顯,分別是inquiry scan的信道,page scan的信道,以及同步的信道。設備在某個信道上通信的時候,是會不斷地跳變頻點的,在1、2、5信道上跳變頻率是1600hops/s,在3,4 上面是3200hops/s ,這里我們發現3,4 信道上明顯跳變很快,這個很好理解,因為他們處于未連接狀態,需要一個快速跳變的頻率以完成掃描 配對等動作。
我們簡單看下在page scan 信道上面的通信時序:
我們可以看出:
經過312.5us 之后其page頻點變化,也就是3200hops/s
當slave 收到mster的page信息之后,會過固定時間625us 去 回復這個封包。
slave 在回復了master 的page 封包之后,過312.5us 之后去監聽 master 發過來的FHS 包。
inquiry scan的時序圖如下:
經過312.5us 之后其inquiry頻點變化,也就是3200hops/s
slave 在收到inquiry消息之后625us之后發送FHS 給對方
如果還有EIR data 需求傳輸,那么將在 1250us 之后。
相應的air log 如下:
上面兩個例子,我截圖的圖片都是在一個slot中的靠近開始的地方成功接收到對方的封包的情況,另外一種情況也是類似的,這里不作具體分析。
Physical link
他代表兩個設備之間基帶層建立的連接,他是基于物理信道之上的概念,兩個設備建立連接往往只有一條物理鏈路,因而每個物理信道上往往只有一條物理link。
Logical Transports
邏輯傳輸層是基于物理鏈路層的。specification總共定義了5種(core_v5.0)邏輯鏈路:
Synchronous Connection-Oriented (SCO) logical transport
Extended Synchronous Connection-Oriented (eSCO) logical transport
Asynchronous Connection-Oriented (ACL) logical transport
Active Slave Broadcast (ASB) logical transport
Connectionless Slave Broadcast (CSB) logical transport.
1、2 是用于傳輸同步數據的點對點通道,他們對于時間有嚴格的限制,并且master會通過預留slot的方法來達到同步傳輸的效果。其中1和2的區別在于2有重傳的機制
3也是用于兩個設備的點對點的傳輸,但是其一般傳輸對時間沒有嚴格要求的數據,屬于異步傳輸。
4和5 是mater 通過廣播的方式和各個slave 進行通信。
Logical Links
邏輯鏈路分為6種:
Link Control (LC)
ACL Control (ACL-C )
User Asynchronous/Isochronous (ACL-U)
User Synchronous (SCO-S)
User Extended Synchronous (eSCO-S)
Profile Broadcast Data (PBD)
LC和ACL-C用于鏈路控制層(Link Control Level )和鏈路管理層(Link Manager Level) ,其中LC 存在于packet的header里面,而其他存在payload里面。
ACL-U用于傳輸用戶異步信息
SCO-S/eSCO-S用于承載用戶同步信息
PBD用于承載Profile廣播數據
ACL-C/ACL-U通過Payload Header的Logical Link ID(LLID)來指示
SCO-S/eSCO-s只由Synchronous Logical Transports承載
ACL-U通常由ACL Logical Transport承載,也可由SCO Logical Transport的DV Packet的Data承載
ACL-C可由SCO/ACL Logical Transport承載
PBD由CSB Logical Transport承載
packet
關于packet 部分,我們分為Basic Rate和Enhanced Data Rate
其格式分別如下:
其中access code 我們之前提到過這個概念,他來源于藍牙設備地址的LAP或者是專門的inquiry address。其由68或者72bit組成,enchanced rate 比Basic 格式的數據多了 SYNC以及TRAILER
6.1access code
access code 的格式如下:
其尾部的4個bit根據access code 是否接有header 來決定,其后面有header 的時候,才會有尾部的4個bit 存在。
6.2 header
其格式如下:
包含LC的Header有6個字段,18 bits
? LT_ADDR: 3-bit logical transport address
? TYPE: 4-bit type code
? FLOW: 1-bit flow control
? ARQN: 1-bit acknowledge indication
? SEQN: 1-bit sequence number
? HEC: 8-bit header error check
6.2.1 LT_ADDR
Logical Transport Address(LT_ADDR)
用來標識在Master-to-Slave中的目的Slave或Slave-to-Master中的源Slave
每個Active Slave都有一個主要的3-bit LT_ADDR
全零的LT_ADDR用于ASB/PSB廣播消息, CSB使用單個非零LT_ADDR
Master沒有LT_ADDR,使用Timing Relative來區分Slaves
對于eSCO傳輸方式,每個Slave都有一個次要的LT_ADDR
Slave只接收匹配主要/次要的LT_ADDR的數據包和廣播數據包
6.2.2 Type
區分六種不同的Packet
主要有三種功能
- 決定使用的Logical Transport(SCO/eSCO,ACL,CSB)
- 是否使能Enhanced Data Rate
- 標識Packet類型(SCO/eSCO,ACL)
6.2.3 Flow
在ACL Logical Transport中用來進行流控
其對應值含義為
- 0: STOP indication
- 1: GO indication
6.2.4 ARQN
Automatic Repeat reQuest Number
確認指示位,指示數據源是否成功地傳輸了帶有CRC的Payload數據
6.2.5 SEQN
Sequence Number
用來保證數據流有序的傳輸
6.2.6 HEC
Header Error Check
用于檢測Header的完整性
這里需要注意的一點是,流控針對的數據包,不會對POLL以及NULL包產生影響。
6.3Payload format
其格式區分了basic和enchanced 兩種模式,分別如下:
其主要區別是 EDR 模式的數據包的length 用了10個bit來表示數據從長度。
LLID 的字段的定義如下:
這里需要注意的一點是,這里也有一個流控的標志,這里是針對l2cap的流控。
Link Controller Operation
最近的specification 規范已經拿掉了park state,那么現在只有兩個主要的狀態是 standby和connection狀態,
另外其還有9個子狀態:page, page scan, inquiry, inquiry scan,synchronization train, synchronization scan, master response, slaveresponse, and inquiry response
這里主要提一下 關于page scan的兩種模式
standard和interlaced,首先看一下相關的概念:
Page Scan Window: amount of time for the duration of the page scan.
Page Scan interval: amount of time between consecutive page scans.
standard: Page Scan interval > Page Scan Window > 11.25ms(18(16)slots)
interlaced: Page Scan interval > 2 * Page Scan Window
Every 1.28s a different freq is selected.
標志模式 page scan 如下:
在每個interval 里面只有一個scan window,并且每個interval期間,其scan 的頻點是不變的。
interlaced模式如下圖:
他在每個interval里面有兩個scan window,所處的頻點分別是trainA 和trainB,其條件就是interval要比兩個 scan window 要大。
那么關于baseband的介紹就先到這里
總結
以上是生活随笔為你收集整理的蓝牙baseband概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多尺度理论及图像特征(一)
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?