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: 蓝牙基带>