目录
蓝牙的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时钟)
时钟决定了触发事件和关键周期,蓝牙系统中有四个重要周期
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
前两种用于特定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.
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
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
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
其格式如下
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: 蓝牙基带>
Bluetooth Baseband介绍的更多相关文章
-
Bluetooth GATT介绍
目录 1. 介绍 2 内容 2.1 Configured Broadcast 2.2 GATT Profile Hierarchy 3 Service Interoperability Require ...
-
Bluetooth LMP介绍
目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...
-
Bluetooth HCI介绍
目录 1. HCI功能 2. HCI Packet 1. HCI Command 2. HCI Event 3. HCI Data 3. HCI传输层 HCI, 主机控制接口(Host Control ...
-
Bluetooth GAP介绍
目录 1 GAP协议栈 2 Profile Role 3 用户接口 4 模式 5 安全 5.1 认证(Authentication) 5.2 安全模式 6 Idle Mode Procedures 7 ...
-
Bluetooth ATT介绍
目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...
-
Bluetooth HFP介绍
目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...
-
Bluetooth RFCOMM介绍
目录 1. 介绍 2. 服务概述 2.1 RS-232控制信号 2.2 Null Modem Emulation 2.3 多串口仿真 3. 服务接口描述 4. RFCOMM帧类型 5. RFCOMM帧 ...
-
Bluetooth L2CAP介绍
目录 1. 通用操作 1. L2CAP Channel 2. 设备间操作 3. 层间操作 4. 操作模式 2. 数据包格式(Data Packet Format) 1. B-Frame 2. G-Fr ...
-
Bluetooth SDP介绍
目录 1. 概念 2. 服务记录(Service Record) 3. 服务属性(Service Attribute) 4. 服务类(Service Class) 5. 服务查找 5.1 UUID 5 ...
随机推荐
-
WinForm任务栏最小化
在C#编写的WinForm里,在FormBorderStyle设为None的时候,任务栏点击程序图标,不会自动最小化.在主窗口WinForm.cs里加入如下代码后,即可恢复该功能. protected ...
-
阻止js冒泡
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
-
spring-boot资料
spring-boot-admin的相关资料 This application provides a simple UI to administrate Spring Boot application ...
-
微信小程序开发官方文档解读
创建页面 在这个教程里,我们有两个页面,index 页面和 logs 页面,即欢迎页和小程序启动日志的展示页,他们都在 pages 目录下.微信小程序中的每一个页面的[路径+页面名]都需要写在 app ...
-
capwap学习笔记——初识capwap(二)(转)
2.5.1 AC发现机制 WTP使用AC发现机制来得知哪些AC是可用的,决定最佳的AC来建立CAPWAP连接. WTP的发现过程是可选的.如果在WTP上静态配置了AC,那么WTP并不需要完成AC的发现 ...
-
CentOS 7.4 64位安装配置MySQL8.0
第一步:获取mysql YUM源 进入mysql官网获取RPM包下载地址 https://dev.mysql.com/downloads/repo/yum/ image.png 点击下载 im ...
-
ubuntu -- 系统目录结构
1./:目录属于根目录,是所有目录的绝对路径的起始点,Ubuntu 中的所有文件和目录都在跟目录下. 2./etc:此目录非常重要,绝大多数系统和相关服务的配置文件都保存在这里,这个目录的内容一般只能 ...
-
js-jquery-SweetAlert【二】配置方法
一.配置 Argument Default value 含义 Description title null (required) 模态对话框的标题.它可以在参数对象的title参数中设置,也可以在 ...
-
hdu2159FATE(二维背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到*装备,xhd在 ...
-
C#各种异常处理方式
.NET的异常处理机制用来发现.处理运行时错误.如果开发人员没有提供异常的处理机制,就默认采用.NET的机制. 通常使用try...catch...finally捕获异常. try { //有可能发生 ...