1. 介紹
藍牙的radio工作在2.4GHz的ISM Band(2400-2483.5 MHz),信道間隔1MHz,采用跳頻技術
2. 概述
在連接(CONNECTION)狀態, synchronization train和synchronization scan子狀態每秒至少1600次
在inquiry和page子狀態時為每秒至少3200次/s
藍牙有如下的連接方式
藍牙通過空氣來傳播數據,定義了兩種模式
- Basic Rate(強制模式): 1 Mbps - Enhanced Basic Rate(可選模式): 2 Mbps和3 Mbps
2.1 時鍾
在藍牙中有四種時鍾(Clock)
- CLKR: reference clock (由運行系統時鍾驅動)
- CLKN: native clock (CLKR的偏移量)
- CLKE: estimated clock (CLKN的偏移量,page scan中使用)
- CLK: master clock (Piconet的Master時鍾)
時鍾決定了觸發事件和關鍵周期,藍牙系統中有四個重要周期: 312.5 μs, 625 μs, 1.25 ms, and 1.28 s
這些周期分別對應時間的比特位0,1,2,12
2.2 尋址方式
每個藍牙設備都應該有唯一的48-bit設備地址(BD_ADDR),結構如下圖
- LAP: Lower Address Part - UAP: Upper Address Part - NAP: Non-significant Address Part
LAP有64個保留地址(0x9E8B00-0x9E8B3F);其中0x9E8B33是一般用於查詢
3. 物理信道
物理信道(Physical Channels)是藍牙系統的最底層;兩個互相通信的設備通過將收發器(transceivers)調諧到同一RF頻率來共享物理信道;藍牙設備通過時分復用來支持多個操作的同時進行
藍牙定義了五種物理信道
- basic piconet physical channel: 用於特定piconet中兩個已經連接的設備之間的通信
- adapted piconet physical channel: 用於特定piconet中兩個已經連接的設備之間的通信
- page scan physical channel: 用來連接設備
- inquiry scan physical channel: 用來發現遠端設備
- synchronization scan physical channel: 以獲取無連接從屬廣播物理鏈路的時間和頻率信息
4. 物理鏈路
物理鏈路(Physical Links)表示兩個設備間的基帶(Baseband)連接,總是與某個特定的物理信道相關聯
5. 邏輯傳輸層
在Master和Slave之間,可能建立不同類型的邏輯傳輸層(Logical Transports)
有六種邏輯傳輸層
- SCO: Synchronous Connection-Oriented logical transport - eSCO: Extended Synchronous Connection-Oriented logical transport - ACL: Asynchronous Connection-Oriented logical transport - ASB: Active Slave Broadcast logical transport - PSB: Parked Slave Broadcast logical transport - CSB: Connectionless Slave Broadcast logical transport
SCO用於Master和Slave間的點對點傳輸,通常用於有時間限制的數據(如語音和同步數據);Master通過定期預留時縫(Reserved Slots)來維護SCO
eSCO在SCO基礎上多了一個重傳窗口
ACL同樣用於Master和Slave間的點對點傳輸,但沒有預留時縫;Master可以在任意slot上建立和Slave的連接
ASB用於Master和Active Slaves通信
PSB用於Master和Parked Slaves通信
CSB用於Master發送Profile廣播
6. 邏輯鏈路
邏輯鏈路(Logical Links)有六種
- LC: Link Control, 用於鏈路控制層(Link Control Level )和鏈路管理層(Link Manager Level) - ACL-C: ACL Control, 用於鏈路控制層(Link Control Level )和鏈路管理層(Link Manager Level) - ACL-U: User Asynchronous/Isochronous, 用於承載用戶異步信息 - SCO-S: User Synchronous, 用於承載用戶同步信息 - eSCO-S: User Extended Synchronous, 用於承載用戶同步信息 - PBD: Profile Broadcast Data, 用於承載Profile廣播數據
注意: LC在Packet的Header部分; 其他都在Payload部分
6.1 LC
LC攜帶底層的控制信息,如ARQ,Flow Control,Payload Characterization
除了沒有header的ID Packet,每個Packet都含有LC信息
6.2 ACL-C
ACL-C攜帶Link Manger層交換的控制信息,使用DM1/DV packets
可由SCO/ACL Logical Transport承載;通過Payload Header的Logical Link ID(LLID)來指示
6.3 ACL-U
ACL-U攜帶L2CAP層用戶數據,可能由一個或者多個baseband包來進行傳輸
通常由ACL Logical Transport承載,也可由SCO Logical Transport的DV Packet的Data承載
通過Payload Header的Logical Link ID(LLID)來指示
6.4 SCO-S/eSCO-S
SCO-S/eSCO-S攜帶同步用戶數據,只由Synchronous Logical Transports承載
6.5 PDB
PBD由CSB Logical Transport承載;PBD攜帶Profile廣播數據,並且數據應該完整,不可分片傳輸
6.6 優先級
ALC-C較之其他Logical Link具有最高優先級;PBD優先級最低
7. 數據包
7.1 General Format
對於Basic Rate,一般格式如下
對於Enhanced Data Rate,一般格式如下
General Packet包含三個部分
- Access Code: 72/68 bits - Header: 54 bits - Payload: 0~2790 bits
7.2 Bit Ordering
Baseband在傳輸時采用Little Endian格式,並有如下規則
- LSB(Least Significant Bit)對應於B0 - LSB先傳輸 - LSB在左邊顯示
如3-bit參數X=3 (b0b1b2 = 110),其中1最先傳輸,0最后傳輸
7.3 Access Code
每個報文以Access Code開始;Access Code標識了一個物理信道,在同一個物理信道中的報文有相同的Access Code
Access Code有72和68 bits兩種
68 bits的Access Code(The shortened access code)不包含Trailer;也沒有Header,用於同步(paging, inquiry, and park)
Access Code格式如下
有三種不同的Access Code
- DAC: device access code - CAC: channel access code - IAC: inquiry access code
Access Code都是由BD_ADDR的LAP派生
DAC用於Page、Page Scan、Page Respponse子狀態
CAC用於CONNECTION狀態,Synchronization Train子狀態,Synchronization Scan子狀態
IAC用於Inquiry子狀態,包括一個GIAC(General IAC)和63個DIAC(Dedicated IAC)
Premble有兩種1010/0101,由Sync Word的LSB決定
Sync Word由LAP計算得到
CAC的Sync Word使用Master的LAP來計算;IAC則使用Reserved/Dedicated LAPs;DAC使用Slave的LAP
Trailer也是兩種1010/0101,由Sync Word的MSB決定
7.4 Packet 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
其格式如下
7.4.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的數據包和廣播數據包
7.4.2 Type
區分六種不同的Packet,主要有三種功能
- 決定使用的Logical Transport(SCO/eSCO,ACL,CSB) - 是否使能Enhanced Data Rate - 標識Packet類型(SCO/eSCO,ACL)
7.4.3 Flow
在ACL Logical Transport中用來進行流控,其對應值含義為
- 0: STOP indication - 1: GO indication
在SCO/eSCO(設為1)和CSB(設為0) Logical Transport中Flow位被忽略
7.4.4 ARQN
Automatic Repeat reQuest Number
確認指示位,指示數據源是否成功地傳輸了帶有CRC的Payload數據
在CSB Logical Transport(設為0)中被忽略
7.4.5 SEQN
Sequence Number,用來保證數據流有序的傳輸
在CSB Logical Transport(設為0)中被忽略
7.4.6 HEC
Header Error Check,用於檢測Header的完整性
7.5 Packet Types
Packet類型與所使用的邏輯傳輸層(主要針對SCO/eSCO, ACL, CSB)相關聯
由Type字段來指定,可分為4 Segment(如下圖)
- 1th Segment: Control Packet - 2th Segment: Occupying a single time slot - 3th Segment: Occupying three time slots - 4th Segment: Occupying five time slots
7.5.1 Common Packet Types
有五種通用報文類型
- ID Packet: 68 bits, 只有Access Code(DAC或IAC), 用於尋呼、探詢、響應 - NULL Packet: 沒有Payload, 只有Access Code(CAC)和Header, 固定長度126 bits, 用於通過ARQN、FLOW等字段將鏈路信息返回給發送端; NULL Packet無需確認 - POLL Packet: 與NULL Packet類似, 也沒有Payload, 但是需要接收端的確認 - FHS Packet: Frequency Hopping Synchronization, 是一種特殊的控制分組, 它宣告發送方的設備地址和時鍾信息, 以實現跳頻同步, Payload包含144個信息bits和16 bits的CRC校驗碼, 然后用速率為2/3的FEC保護, 最終長度為240 bit, 詳細見規范 [6.5.1.4 FHS Packet] - DM1 Packet: DM代表Data Medium rate, 1th Segment的一種,可在任意邏輯傳輸層上傳輸,用來支持控制信息, 也可用來攜帶用戶數據
7.5.2 SCO Packets
有HV1、HV2、HV3和DV Packet這四種
其中DV Packet包含Data和Voice兩種數據,格式如下
7.5.3 eSCO Packets
主要是EV Packets
Basic Rate: EV3、EV4和EV5
Enhanced Data Rate: 2-EV3、3-EV3、2-EV5和3-EV5
7.5.4 ACL Packets
在Asynchronous/CSB Logical Transport上傳輸
Basic Rate: DM1、DH1、DM3、DH3、DM5、DH5和AUX1
Enhanced Data Rate: 2-DH1、3-DH1、2-DH3、3-DH3、2-DH5和3-DH5
7.6 Payload Format
Payload中有區分兩種字段: 同步數據字段(Synchronous Data Field)和異步數據字段(Asynchronous Data Field)
ACL Packet只含有異步數據字段; SCO/eSCO只含有同步數據字段(例外: DV Packet兩者都含有)
7.6.1 Synchronous Data Field
SCO只支持Basic Rate模式,其同步數據字段長度固定,只包含同步數據主體部分
對於eSCO
Basic Rate: 由同步數據主體部分和CRC兩個部分組成
Enhanced Data Rate: 由五個部分組成, Guard time、Synchronization sequence、Synchronous data body、CRC code和Trailer
7.6.2 Asynchronous Data Field
Basic Rate: 有2、3或4部分, Payload header、Payload body、possibly a MIC, and possibly a CRC code
Enhanced Data Rate: 有6或7個部分, Guard time、Synchronization sequence、Payload header、Payload body、possibly a MIC, a CRC and a trailer
其中Payload Header的格式如下
LLID字段定義如下
8. 鏈路控制
鏈路控制器(Link Controller)中定義了幾種狀態
主狀態 - STANDBY(默認狀態) - CONNECTION - PARK 子狀態(建立連接和使設備發現的臨時狀態) - page - page scan - inquiry - inquiry scan - synchronous train - synchronous scan - master response - slave response - inquiry respnse
在CONNECTION狀態下,藍牙設備有四種模式(除活動模式外,其他三種均是節能模式)
- 保持模式(Hold Mode)
- 呼吸模式(Sniff Mode)
- 休眠模式(Park Mode)
- 活動模式(ActiveMode)
下圖顯示了這些狀態的轉換圖(三種Response子狀態未顯示)
參考:
<BlueTooth: 藍牙基帶>