蓝牙协议栈

无线射频

  • 负责数据的发射和接收
  • 采用全向天线,支持点到多点通信,使得多台蓝牙设备可以分享网络资源;
  • 调制方式:高斯滤波二进制频移键控(GFSK)三种可用功率级别:

功率等级

最大输出功率

正常输出功率

最小输出功率

1

100 mW

-

1 mW

2

2.5 mW

1 mW

0.25 mW

3

1 mW

-

-

频带:2400-2483.5MHz,分为79个跳频信道,每个信道带宽为1MHz,上保护带宽3.51MHz,下保护带宽2MHz。

蓝牙2.0 EDR模式对分组调制方式的修改:

  • 分组头和接入码使用GFSK调制,速率为1 Mb/s
  • 同步序列、载荷与尾序列使用增强数据传输速率下的PSK调制,支持的射频数据传输速率为2 Mb/s与3 Mb/s

基带

  • 与射频一起构成蓝牙协议栈的物理层
  • 发送数据时负责把高层协议的数据编码。接收数据时负责将来自射频的数据解码。
  • 组网(微微网,散射网)
  • 组合了电路交换和分组交换的功能

蓝牙地址 (BD_ADDR)

全世界所有蓝牙设备地址唯一

公司分配号

公司ID

公司ID

低位地址LAP(24bit)

高位地址UAP(8bit)

无意义地址NAP(16bit)

链路管理

LM(link manager)将上层的命令转化为基带层的操作。

基本功能:

  • 处理和协商基带分组的大小,满足特定的服务质量;
  • 链路管理和安全性管理,包括ACL和SCO链路的建立和关闭等。
  • 管理设备功率。

LMP协议数据单元

  • LMP消息称为LMP_PDU,主要用于链路管理、安全和控制。优先级高,可以优于SCO分组传输。
  • LMP_PDU是ACL分组的净荷,作为单时隙分组在链路管理逻辑信道上传输信息。

L2CAP

逻辑链路控制和适配。

  • 将高层使用的大分组拆分成基带可以传输的小分组,并在接收阶段完成组装
  • 支持对不同的高层协议进行多路复用,允许高层协议共享底层链路。
  • L2CAP只支持ACL,最大速率64KBytes。只传输数据分组,不传输蓝牙音频

RFCOMM

电缆替代协议

  • 蓝牙最早开发的目的是取消电器之间的连线,替代电缆是最基本、最主要的应用方式
  • 在蓝牙基带上仿真RS232的控制和数据信号,为串行电缆作为传输机制的高级业务提供传输能力
  • 作用类似于TCP/IP中的TCP,为各种高层应用提供接口,实现端到端通信
  • 依靠基带提供可靠、有序的比特流,本身没有纠错能力,流量控制也依赖基带

服务发现协议

蓝牙场景具有ad-hoc特征,动态性强

帮助网络中的设备和服务之间容易彼此发现、相互协商和配置

SDP是客户机-服务器结构的协议

  • 服务器是为其他蓝牙设备提供服务的设备
  • 客户机是在一个有效通信范围内想要查找服务的设备

服务查询过程

  1. 建立L2CAP远程连接
  2. 搜索SDP服务器上指定的服务类型,或浏览服务列表
  3. 获得连接到指定服务所需要的属性值
  4. 建立一个单独的连接使用该服务

SDP数据库

属性标志符ID 属性值(类型和长度可变)

服务属性1

服务属性2


服务属性n

强制属性
  • 服务类型,属性标志符为0x0001
  • 服务句柄,32bit无符号证书,是服务记录的指针,唯一地标志了一个SDP服务记录
通用唯一标志符 UUID
  • 标志服务类型
  • 为开发者自己开发的服务类别分配独特的UUID避免命名冲突。
  • 分布式生成,不重复
  • 传统的UUID是128bit,可以缩减为16bit或32bit。
  • 128_bit_value = 16_bit_value * 296 + Base_UUID
  • 128_bit_value = 32_bit_value * 296 + Base_UUID

SDP消息

设计目标:简单易实现,与L2CAP良好兼容

消息浏览模式

  • 浏览服务器中所有可用服务来查找需要的服务(查找服务列表,返回列表中所有的UUID)
  • 根据查找特定的服务(根据UUID)

协议子集

GAP

  • 描述了两个蓝牙设备建立通信时必要的基本操作,包括设备发现、链路建立和配置,以及安全方面的内容。
  • 设备角色
  • 广播者(Broadcaster):周期性发送广播信息
  • 观察者(Observer):侦听信道,接收广播信息
  • 中心设备(Central):发起连接的一方
  • 外设(Peripheral):接收连接的一方

主设备和从设备之间的链路

SCO链路(电路交换)

  • 主设备与从设备之间对称、点对点同步链路;
  • 主要用于传送实时性需求较高的语音分组
  • 通过预先保留的时隙连续的传输信息,可以看做电路交换
  • 不允许分组重传(无校验位),保证实时性
  • SCO包使用前向纠错FEC(Forward Error Correction)
  • 分组头:1/3 FEC (每一位重复三次)
  • 负载:2:3 FEC (2:3简要海明码)
  • 不管有无数据发送,系统都会预留固定间隔的时限给主设备与从设备,其他从设备就不能利用此连接上的时隙来发送数据

ACL链路(异步分组交换)

  • 分组交换只传输数据分组。
  • 主设备在为SCO传输预留时隙后,把异步ACL传输分配在剩下的时隙中
  • ACL比SCO优先级低,一旦系统要SCO传输,ACL必须自动让出预留时隙
  • 支持广播,主设备可以向微微网中所有从设备发送消息。
  • ACL采用CRC校验,接收错误会重传

蓝牙组网

蓝牙个域网的ad hoc 特性

  • 独立组网:很短的时间里自动组成一个独立的网络
  • 多跳路由:相互通信范围之外的节点需要经过多跳
  • 拓扑动态变化:某些节点移动、关闭和开启电源,引起节点和链路数量及分布的变化
  • 特殊的信道特征:受无线信道冲突等影响,链路的实际带宽远小于理论带宽,且动态变化
  • 节点能耗受限
  • 安全性:易受到窃听、主动入侵、拒绝服务等攻击

微微网

  • 首先提出通信要求的为主设备,被动进行通信的设备是从设备(仅在基带有此区分)
  • 一个微微网中有1个主设备,最多有7个从设备
  • 主设备的时钟传送给从设备,从设备加上偏移量

微微网内部调度

  • 如果主设备没有数据给从设备,就发送POLL分组
  • 如果从设备没有数据给主设备,发送NULL
  • 降低POLL和NULL分组的比例,是提高调度效率的根本

时钟

  • 每个蓝牙设备有一个独立运行的28bit内部系统时钟,频率为3.2kHz
  • 决定收发器的定时和跳频
  • 与提他设备同步时,在本地时钟上增加一个偏移量

散射网

同一个区域中可以同时存在多个微微网,如果有蓝牙设备进入这样的网络,并作为桥接设备,将在空间上重叠的微微网相互连接起来,组成散射网

循环轮询的改进方法

  • 彻底循环轮询
  • 直到主设备和从设备发完信息后才轮询至下一个设备;(有什么问题?)
  • 公平性问题,一些节点可能一直有数据发送,使得其他设备没法发数据
  • 限制的循环轮询
  • 限制每次连接后的数据传输数量
  • 依赖主设备和从设备状态的轮询
  • 给每一对M-S安排优先级
  • 1代表有数据发送,0代表无数据发送。
  • 1-1优先级最高,其次是1-0和0-1,最低是0-0
    环轮询
  • 直到主设备和从设备发完信息后才轮询至下一个设备;(有什么问题?)
  • 公平性问题,一些节点可能一直有数据发送,使得其他设备没法发数据
  • 限制的循环轮询
  • 限制每次连接后的数据传输数量
  • 依赖主设备和从设备状态的轮询
  • 给每一对M-S安排优先级
  • 1代表有数据发送,0代表无数据发送。
  • 1-1优先级最高,其次是1-0和0-1,最低是0-0