Bluetooth Baseband介绍

时间:2020-12-05 00:25:51

蓝牙的radio工作在2.4GHz的ISM Band(2400-2483.5 MHz),信道间隔1MHz

采用跳频技术 
在连接(CONNECTION)状态, synchronization train和synchronization scan子状态每秒至少1600次 
在inquiry和page子状态时为每秒至少3200次/s

1. 概述

蓝牙有如下的连接方式

Bluetooth Baseband介绍

蓝牙通过空气来传播数据,定义了两种模式 
~ 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 
Bluetooth Baseband介绍

1.2 寻址方式

每个蓝牙设备都应该有唯一的48-bit设备地址(BD_ADDR),结构如下图

Bluetooth Baseband介绍

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, 一般格式如下

Bluetooth Baseband介绍

对于Enhanced Data Rate,一般格式如下

Bluetooth Baseband介绍

通常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格式如下

Bluetooth Baseband介绍

有三种不同的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)

Bluetooth Baseband介绍

Premble有两种1010/0101,由Sync Word的LSB决定

Bluetooth Baseband介绍  
Sync Word由LAP计算得到 
CAC的Sync Word使用Master的LAP来计算 
IAC则使用Reserved/Dedicated LAPs 
DAC使用Slave的LAP

Trailer也是两种1010/0101,由Sync Word的MSB决定

Bluetooth Baseband介绍

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 

其格式如下

Bluetooth Baseband介绍

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

Bluetooth Baseband介绍

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两种数据,格式如下

Bluetooth Baseband介绍

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的格式如下

Bluetooth Baseband介绍

关于LLID字段定义如下

Bluetooth Baseband介绍

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介绍

参考
<BlueTooth: 蓝牙基带>

Bluetooth Baseband介绍的更多相关文章

  1. Bluetooth GATT介绍

    目录 1. 介绍 2 内容 2.1 Configured Broadcast 2.2 GATT Profile Hierarchy 3 Service Interoperability Require ...

  2. Bluetooth LMP介绍

    目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...

  3. Bluetooth HCI介绍

    目录 1. HCI功能 2. HCI Packet 1. HCI Command 2. HCI Event 3. HCI Data 3. HCI传输层 HCI, 主机控制接口(Host Control ...

  4. Bluetooth GAP介绍

    目录 1 GAP协议栈 2 Profile Role 3 用户接口 4 模式 5 安全 5.1 认证(Authentication) 5.2 安全模式 6 Idle Mode Procedures 7 ...

  5. Bluetooth ATT介绍

    目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...

  6. Bluetooth HFP介绍

    目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...

  7. Bluetooth RFCOMM介绍

    目录 1. 介绍 2. 服务概述 2.1 RS-232控制信号 2.2 Null Modem Emulation 2.3 多串口仿真 3. 服务接口描述 4. RFCOMM帧类型 5. RFCOMM帧 ...

  8. Bluetooth L2CAP介绍

    目录 1. 通用操作 1. L2CAP Channel 2. 设备间操作 3. 层间操作 4. 操作模式 2. 数据包格式(Data Packet Format) 1. B-Frame 2. G-Fr ...

  9. Bluetooth SDP介绍

    目录 1. 概念 2. 服务记录(Service Record) 3. 服务属性(Service Attribute) 4. 服务类(Service Class) 5. 服务查找 5.1 UUID 5 ...

随机推荐

  1. WinForm任务栏最小化

    在C#编写的WinForm里,在FormBorderStyle设为None的时候,任务栏点击程序图标,不会自动最小化.在主窗口WinForm.cs里加入如下代码后,即可恢复该功能. protected ...

  2. 阻止js冒泡

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. spring-boot资料

    spring-boot-admin的相关资料 This application provides a simple UI to administrate Spring Boot application ...

  4. 微信小程序开发官方文档解读

    创建页面 在这个教程里,我们有两个页面,index 页面和 logs 页面,即欢迎页和小程序启动日志的展示页,他们都在 pages 目录下.微信小程序中的每一个页面的[路径+页面名]都需要写在 app ...

  5. capwap学习笔记——初识capwap(二)(转)

    2.5.1 AC发现机制 WTP使用AC发现机制来得知哪些AC是可用的,决定最佳的AC来建立CAPWAP连接. WTP的发现过程是可选的.如果在WTP上静态配置了AC,那么WTP并不需要完成AC的发现 ...

  6. CentOS 7&period;4 64位安装配置MySQL8&period;0

    第一步:获取mysql YUM源 进入mysql官网获取RPM包下载地址 https://dev.mysql.com/downloads/repo/yum/   image.png 点击下载   im ...

  7. ubuntu -- 系统目录结构

    1./:目录属于根目录,是所有目录的绝对路径的起始点,Ubuntu 中的所有文件和目录都在跟目录下. 2./etc:此目录非常重要,绝大多数系统和相关服务的配置文件都保存在这里,这个目录的内容一般只能 ...

  8. js-jquery-SweetAlert【二】配置方法

    一.配置 Argument Default value 含义   Description title null (required) 模态对话框的标题.它可以在参数对象的title参数中设置,也可以在 ...

  9. hdu2159FATE&lpar;二维背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到*装备,xhd在 ...

  10. C&num;各种异常处理方式

    .NET的异常处理机制用来发现.处理运行时错误.如果开发人员没有提供异常的处理机制,就默认采用.NET的机制. 通常使用try...catch...finally捕获异常. try { //有可能发生 ...