蓝牙的radio工作在2.4GHz的ISM Band(2400-2483.5 MHz),信道间隔1MHz
采用跳频技术
在连接(CONNECTION)状态, synchronization train和synchronization scan子状态每秒至少1600次
在inquiry和page子状态时为每秒至少3200次/s
1. 概述
蓝牙有如下的连接方式
蓝牙通过空气来传播数据,定义了两种模式
~ Basic Rate(强制模式): 1 Mbps
~ Enhanced Basic Rate(可选模式): 2 Mbps和3 Mbps
1.1 Clock(时钟)
在蓝牙中有四种时钟
? CLKR reference clock(由运行系统时钟驱动) ? CLKN native clock (CLKR的偏移量) ? CLKE estimated clock(CLKN的偏移量,page scan中使用) ? CLK master clock (Piconet的Master时钟)
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
时钟决定了触发事件和关键周期,蓝牙系统中有四个重要周期
312.5 μs, 625 μs, 1.25 ms, and 1.28 s
这些周期分别对应时间的比特位0,1,2,12
1.2 寻址方式
每个蓝牙设备都应该有唯一的48-bit设备地址(BD_ADDR),结构如下图
LAP: Lower Address Part
UAP: Upper Address Part
NAP: Non-significant Address Part
LAP有64个保留地址(0x9E8B00-0x9E8B3F)
其中0x9E8B33是一般用于查询
2. 物理信道(Physical Channels)
物理信道是蓝牙系统的最底层
两个互相通信的设备通过将收发器(transceivers)调谐到同一RF频率来共享物理信道
蓝牙设备通过时分复用来支持多个操作的同时进行
蓝牙定义了五种物理信道
? basic piconet physical channel ? adapted piconet physical channel ? page scan physical channel ? inquiry scan physical channel ? synchronization scan physical channel
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
前两种用于特定piconet中两个已经连接的设备之间的通信
inquiry scan channel用来发现远端设备
the page scan channel用来连接设备
synchronization scan channel用以获取无连接从属广播物理链路的时间和频率信息
3. 物理链路(Physical Links)
物理链路表示两个设备间的基带(Baseband)连接,总是与某个特定的物理信道相关联
4. 逻辑传输层(Logical Transports)
在Master和Slave之间,可能建立不同类型的逻辑传输层
有六种逻辑传输层
? 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.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
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广播
5. 逻辑链路(Logical Links)
逻辑链路有六种
? LC: Link Control ? ACL-C: ACL Control ? ACL-U: User Asynchronous/Isochronous ? SCO-S: User Synchronous ? eSCO-S: User Extended Synchronous ? PBD: Profile Broadcast Data
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }LC和ACL-C用于链路控制层(Link Control Level )和链路管理层(Link Manager Level)
ACL-U用于承载用户异步信息
SCO-S/eSCO-S用于承载用户同步信息
PBD用于承载Profile广播数据
LC在Packet的Header部分; 其他都在Payload部分
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承载
5.1 LC
LC携带底层的控制信息,如ARQ,Flow Control,Payload Characterization
除了没有header的ID Packet,每个Packet都含有LC信息
5.2 ACL-C
ACL-C携带Link Manger层交换的控制信息,使用DM1/DV packets
5.3 ACL-U
ACL-U携带L2CAP层用户数据,可能由一个或者多个baseband包来进行传输
5.4 SCO-S/eSCO-S
SCO-S/eSCO-S携带同步用户数据
5.5 PDB
PBD携带Profile广播数据,并且数据应该完整,不可分片传输
5.6 Priorities
ALC-C较之其他Logical Link具有最高优先级
PBD优先级最低
6. 数据包(Packets)
6.1 General Format
对于Basic Rate, 一般格式如下
对于Enhanced Data Rate,一般格式如下
通常Packet包含三个部分
- Access Code: 72/68 bits
- Header: 54 bits
- Payload: 0~2790 bits
6.2 Bit Ordering
Baseband在传输时采用Little Endian格式
并有如下规则
- Least Significant Bit(LSB)对应于B0
- LSB先传输
- LSB在左边显示
如3-bit参数X=3 (b0b1b2 = 110),其中1最先传输,0最后传输
6.3 Access Code
每个Packet以Access Code开始
Access Code标识了一个物理信道,在同一个物理信道中的Packet有相同的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
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
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决定
6.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
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
其格式如下
6.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的数据包和广播数据包
6.4.2 Type
区分六种不同的Packet
主要有三种功能
- 决定使用的Logical Transport(SCO/eSCO,ACL,CSB)
- 是否使能Enhanced Data Rate
- 标识Packet类型(SCO/eSCO,ACL)
6.4.3 Flow
在ACL Logical Transport中用来进行流控
其对应值含义为
- 0: STOP indication
- 1: GO indication
在SCO/eSCO(设为1)和CSB(设为0) Logical Transport中Flow位被忽略
6.4.4 ARQN
Automatic Repeat reQuest Number
确认指示位,指示数据源是否成功地传输了带有CRC的Payload数据
在CSB Logical Transport(设为0)中被忽略
6.4.5 SEQN
Sequence Number
用来保证数据流有序的传输
在CSB Logical Transport(设为0)中被忽略
6.4.6 HEC
Header Error Check
用于检测Header的完整性
6.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
6.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的一种,可在任意逻辑传输层上传输,用来支持控制信息
也可用来携带用户数据
6.5.2 SCO Packets
有HV1、HV2、HV3和DV Packet这四种
其中DV Packet包含Data和Voice两种数据,格式如下
6.5.3 eSCO Packets
主要是EV Packets
Basic Rate: EV3、EV4和EV5
Enhanced Data Rate: 2-EV3、3-EV3、2-EV5和3-EV5
6.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
6.6 Payload Format
Payload中有区分两种字段: 同步数据字段(Synchronous Data Field)和异步数据字段(Asynchronous Data Field)
ACL Packet只含有异步数据字段; SCO/eSCO只含有同步数据字段(例外: DV Packet两者都含有)
6.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
6.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字段定义如下
7. 链路控制操作(Link Controller Operation)
Link Controller中定义了几种状态
3个主要状态: STANDBY, CONNECTION and PARK
9个子状态: page, page scan, inquiry, inquiry sacn, synchronous train, synchronous scan
master response, slave response and inquiry respnse
子状态是建立连接和使设备发现的临时状态
STANDBY是设备的默认状态
在CONNECTION状态下,蓝牙设备有四种模式
保持模式(Hold Mode)、呼吸模式(Sniff Mode)和休眠模式(Park Mode)3种节能模式, 及正常的活动模式(ActiveMode)
下图显示了这些状态的转换图(三种Response子状态未显示)
Bluetooth Baseband介绍