低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)

文章目录

  • 第5章 物理层
  • 第6章 直接测试模式
  • 第7章 链路层
    • 7.1 链路层状态机
    • 7.2 报文
    • 7.3 报文结构
    • 7.4 信道
    • 7.5 设备发现
    • 7.6 广播
    • 7.7 建立连接
    • 7.8 发送数据
    • 7.9 加密
    • 7.10 管理连接
    • 7.11 鲁棒性
    • 7.12 为低功耗优化
  • 第8章 主机/控制器接口
    • 8.1 介绍
    • 8.2 物理接口
    • 8.3 逻辑接口
    • 8.4 控制器的配置
    • 8.5 广播与观察
    • 8.6 发起连接
    • 8.7 连接管理

第5章 物理层

讲述设备间如何实现无线通信
5.1 背景
5.2 模拟调制
5.3 数字调制
5.4 频段
5.5 调制
最小频偏约为180kHz

5.6 射频信道
低功耗蓝牙使用40个无线信道传输信息。
低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第1张图片
5.7 发射功率
规范规定最大发射功率为+10dBm,最小发射功率不应低于-20dBm

5.8 容限
对于低功耗蓝牙,整个报文的中心频率的容限是+/-150kHz,在报文发送过程中,中心频率的漂移不允许超过50kHz

5.9 接收机灵敏度
低功耗蓝牙的接口机灵敏度要高于-70dBm。低功耗蓝牙选择的误比特率为0.1%

5.10 通信距离
path loss = 40+25log(d)
如果发射功率是-20dBm,接收机灵敏度为-70dBm,允许路径损耗为50dB,相当于2.5m的距离。这是最短通信距离
如果发射功率是0dBm,接收机灵敏度是-80dBm,允许路径损耗为80dB,相当于40m的距离。这是低功耗蓝牙在常见的发射功率和接收灵敏度情况下所达到的通信距离。

第6章 直接测试模式

强调直接测试模式及其在执行低成本、高效的无线电测试时所起的作用
6.1 背景
直接测试模式需要三个设备

  • 待测设备DUT
  • 上位测试设备UT
  • 下位测试设备LT
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第2张图片
    6.2 收发机测试
  • 测试报文格式
  • 发射机测试,发射机测试主要为了获知待测设备发射机的性能。
  • 接收机测试,接收机测试主要是为了确定不同发射功率条件下接收机的误比特率。

6.3 硬件接口

  • 串口,待测设备和上位测试设备间的硬件接口是一个简单的双线串口,一根线从待测设备向上位测试设备传输信号,另一根相反。
  • 命令与事件。上位测试设备向待测设备发送四种命令:复位、发射机测试、接收机测试、测试结束。待测设备向上位测试设备上报两种事件:测试状态、报文报告。

6.4 使用HCI的直接测试模式
直接测试模式可以复用已有的HCI传输层和逻辑接口访问控制器。

第7章 链路层

介绍有关报文格式、广播和连接建立等的底层协议

7.1 链路层状态机

链路层状态机定义了5种状态

  • 就绪态
  • 广播态
  • 扫描态
  • 发起态
  • 连接态

扫描态有两个子状态:主动扫描和被动扫描。
连接态也有两个子状态:主、从
低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第3张图片

  • 上电后,链路层进入并保持就绪态,知道借到主机的命令
  • 处于广播态的链路层可以发送广播报文,也可以发送扫描响应,用以回应主动扫描的设备
  • 处于扫描态的设备能够接收广播信道的报文。被动扫描态中设备只能被动地扫描,补鞥发送任何报文。主动扫描中,链路层一旦发现了新的广播台设备,就会发送扫描请求,并等待该请求的响应。
  • 为了发起连接,链路层需要处于发起态。处于发起态的发起者,其接收器用于侦听自己试图连接的设备。
  • 从广播态或发起态均可以进入连接态。主连接态只能从发起态进入。从连接态只能从广播态进入。

7.2 报文

低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第4张图片
低功耗蓝牙有两类报文:广播报文和数据报文。设备利用广播报文来发现、连接其他设备。一旦连接建立之后,则开始使用数据报文,两者的区别在于,数据报文只能被连接中的两个主从设备所理解,而广播报文则可以广播给多个侦听设备或者只发送给某个特定设备。

FSK在接收连续相同的比特的能力比较差,白化就是用来随机化发送的数据的。
白化随机化序列通过线性反馈移位寄存器生成,生成多项式是
W h i t e n e r = x 7 + x 4 + x 0 Whitener = x^7+x^4+x^0 Whitener=x7+x4+x0

7.3 报文结构

  • 比特序与字节,数据发送总是按照最低位开始。
  • 前导,报文最开始的8bit是01010101或者10101010.
  • 接入地址, 对于广播报文,接入地址固定是0x8E89 BED6,对于数据信道,接入地址是一个随机值,不同的连接具有不同的值。
  • 报头,报头内容取决于该报文是广播报文还是数据报文。

广播报文类型有7种。每种类型都具有不同的净荷格式和行为。

名字 id 说明
ADV_IND 0x0 通用广播指示
ADV_DIRECT_IND 0x1 定向连接指示
ADB_NONCONN_IND 0x2 不可连接指示
ADB_SACN_IND 0x6 可扫描指示
SCAN_REQ 0x3 主动扫描请求
SCAN_RSP 0x4 主动扫描响应
CONNECT_REQ 0x5 连接请求

广播报文
低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第5张图片
低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第6张图片

  • 长度,对于广播报文,长度域包含6个bit,对于数据报文,长度域包含5个bit
  • 净荷,其长度是由长度域指示出来的字节数。
  • 循环冗余校验,采用24位的CRC生成多项式

C R C = x 24 + x 10 + x 9 + x 6 + x 4 + x 3 + x 1 + x 0 CRC= x^{24}+x^{10}+x^9+x^6+x^4+x^3+x^1+x^0 CRC=x24+x10+x9+x6+x4+x3+x1+x0

7.4 信道

低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第7张图片
广播信道频点的选择原则上是为了远离wifi等接入点的严重干扰。
低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第8张图片

  • 跳频

f n + 1 = ( f n + h o p ) m o d 37 f_{n+1}= (f_n+hop)mod37 fn+1=(fn+hop)mod37
低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第9张图片

  • 自适应跳频
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第10张图片

7.5 设备发现

低功耗蓝牙通过广播信道发现其他设备。一个设备进行广播,而另一个设备进行扫描。共有四种类型的广播:通用的、定向的、不连续的、可发现的。
设备每次广播时,会在3个广播信道上发送相同的报文。这些报文被称为一个广播事件。除了定向报文以外,其他广播事件均可以选择20ms-10.28s不等的间隔。通常一个广播中的设备会每一秒广播一次。

扫描是低功耗蓝牙广播的重要组成部分。扫描用于接收广播事件。扫描事件取决于有多少时间用于扫描以及需要多快发现其他设备。

  • 通用广播,进行通用广播的设备能够被其他扫描设备扫描到,或者接收到连接请求时作为从设备进入一个连接。
  • 定向广播,定向广播是为了尽可能快的建立连接。这种报文中包含两个地址:广播者的地址和发起者的地址。发起设备收到发给自己的定向广播报文后,可以立即发送连接请求作为回应。
  • 不可连接广播。不想被连接的设备使用不可连接广播事件。这种广播的典型应用包括设备只想广播数据,而不像被扫描或者被连接。
  • 可发现广播。这种广播不能用于发起连接,但是允许其他设备扫描该广播设备,这意味着该设备可以被发现,既可以广播数据,又可以响应扫描,但是不能建立连接。

7.6 广播

通过四种广播事件的三种可以进行广播:通用广播、不可连接广播、可发现广播。
进行广播时,需要在广播报文中给数据打上标签。L(length)T(type)V(value)

7.7 建立连接

发起者收到正确的广播报文时,将向广播者发送一个连接请求,其中包括了连接开始时需要的所有信息,包括下面:

  • 连接中使用的接入地址。连接使用的接入地址总是由主设备提供。地址通过随机生成的,但是需要遵循一些规则。
  • CRC初始值。这个是另外一个主设备提供的随机数。
  • 发送窗口大小
  • 发送窗口偏移
  • 连接间隔
  • 从设备延迟
  • 监控超时
  • 自适应跳频信道图
  • 跳频算法增量
  • 休眠时钟精度

7.8 发送数据

7.8.1 数据报头
7.8.2 逻辑链路标识符 LLID,用于判断数据报文属于哪种类型。

LLID 描述
11 链路层控制报文,用于管理连接
10 高层报文开始,也可用于一个完整报文
01 高层报文延续

7.8.3 序列号SN
7.8.4 确认 NESN
7.8.5 更多数据 MD
7.8.6 例子
低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第11张图片

7.9 加密

n o n c e = P a c k e t C o u n t e r ∣ ∣ D i r e c t i o n ∣ I V C M I C = E k e y ( 0 x 01 ∣ ∣ n o n c e ∣ ∣ 0 x 0000 ) C B l o c k 1 = E k e y ( 0 x 01 ∣ ∣ n o n c e ∣ ∣ 0 x 0001 ) C B l o c k 2 = E k e y ( 0 x 01 ∣ ∣ n o n c e ∣ ∣ 0 x 0002 ) B 0 = 0 x 49 ∣ ∣ n o n c e ∣ ∣ l e n g t h B 1 = 0 x 0001 ∣ ∣ h e a d e r m a s k e d ∣ ∣ 0 x 00000000000000000000000000 X 0 = E k e y ( B 0 ) X 1 = E k e y ( X 0 ⨁ B 1 ) X 2 = E k e y ( X 1 ⨁ B 2 ) w h e r e B 2 = P a y l o a d [ 0..127 ] M I C = E k e y ( x 2 ⨁ B 3 ) [ 128..96 ] w h e r e B 2 = P a y l o a d [ 128..215 ] e n c r y p t e d = C B l o c k 1 ⨁ B l o c k 1 ∣ ∣ C B l o c k 1 ⨁ B l o c k 2 ⨁ M I C nonce = Packet Counter||Direction|IV \\ C_{MIC} = E_{key}(0x01||nonce||0x0000) \\ C_{Block1} = E_{key}(0x01||nonce||0x0001) \\ C_{Block2} = E_{key}(0x01||nonce||0x0002) \\ B_0 = 0x49||nonce||length \\ B_1 = 0x0001||header_{masked}||0x00 0000 0000 0000 0000 0000 0000 \\ X_0 = E_{key}(B_0) \\ X_1 = E_{key}(X_0 \bigoplus B_1) \\ X_2 = E_{key}(X_1 \bigoplus B_2) where B_2=Payload_{[0..127]} \\ MIC = E_{key}(x_2 \bigoplus B_3)_{[128..96]} where B_2=Payload_{[128..215]} \\ encrypted = C_{Block1} \bigoplus Block1 || C_{Block1} \bigoplus Block2 \bigoplus MIC nonce=PacketCounterDirectionIVCMIC=Ekey(0x01nonce0x0000)CBlock1=Ekey(0x01nonce0x0001)CBlock2=Ekey(0x01nonce0x0002)B0=0x49noncelengthB1=0x0001headermasked0x00000000000000000000000000X0=Ekey(B0)X1=Ekey(X0B1)X2=Ekey(X1B2)whereB2=Payload[0..127]MIC=Ekey(x2B3)[128..96]whereB2=Payload[128..215]encrypted=CBlock1Block1CBlock1Block2MIC
其中Packet Counter表示包计数器,Direction表示方向位,IV表示初始化向量。Block1表示加密块1,是加密净荷的前16个字节。Block2表示加密块2,是加密净荷的后11个字节。length是验证数据的原始长度。

7.10 管理连接

  • 更新连接参数, LL_CONNECTION_UPDATE_REQ
  • 改变自适应跳频信道图, LL_CHANNEL_MAP_REQ
  • 加密链路,LL_ENC_REQ/LL_ENC_RSP/LL_START_ENC_REQ
  • 重加密链路,LL_PAUSE_ENC_REQ/LL_PAUSE_ENC_RSP
  • 交换功能位,LL_FEATURE_REQ/LL_FEATURE_RSP
  • 交换版本信息
  • 终止链路,LL_TERMINATE_IND

7.11 鲁棒性

  • 自适应跳频
  • 强CRC

7.12 为低功耗优化

如何实现低功耗的

  • 使用短报文
  • 物理层使用高比特率
  • 提供低开销
  • 优化响应机制
  • 单信道连接事件
  • 亚速率连接事件
  • 使用离线加密

低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第12张图片

第8章 主机/控制器接口

描述主机与控制器进行交互的接口,以及如何用其执行一些有用的操作

8.1 介绍

主机控制器接口HCI是主机和控制器之间的接口,主要完成两个任务:

  • 一个是发送命令给控制器和接收来自控制器的事件
  • 另一个是发送和接收来自对端设备的数据。
    一般来说,主机接口既是两个设备之间的物理上的接口,也是逻辑上的接口。逻辑接口定了命令、事件和数据的封包格式。而物理接口则规定了主机和控制器之间如何传输这些数据包。

8.2 物理接口

蓝牙规范中定义了4种物理接口

  • 通用异步收发器UART提供了最简单的传输方式
  • 3线UART则提供可靠的UART传输方式
  • USB为电脑和类似的设备提供高速的、通用的传输方式
  • 安全数字输入输出SDIO为消费电子设备提供中等速度的传输方式。

8.3 逻辑接口

8.3.1 HCI信道
一旦控制器与其他设备建立了连接,控制器的底层HCI接口就创建一个HCI信道,我们使用一个连接句柄来标识这个信道。

8.3.2 命令数据包
在低功耗蓝牙中一共有三种基本命令类型:

  • 配置控制器的状态
  • 请求执行特定的操作
  • 管理连接

低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第13张图片

8.3.3 事件数据包
低功耗蓝牙主要有下面三种基本事件类型:

  • 通用命令完成事件,当主机发送给控制器的命令执行完毕时,控制器立即返回一个通用命令完成事件。
  • 通用命令状态事件,如果主机给控制器的命令需要执行无线传输操作,则控制器返回的是通用命令状态事件。
  • 特定命令完成事件,有些命令需要一段时间才能完成,他们都有对应的、并且唯一的特定命令完成事件。
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第14张图片
    8.3.5 命令流控
    HCI接口有两种类型流控:命令流控和数据流控。

8.3.6 数据流控
一般 主机到控制器的数据流控是必须的,而控制器到主机的流控可以忽略。

8.4 控制器的配置

  • 重置控制器为已知状态
  • 读取设备地址
  • 设置事件掩码
  • 读取缓冲器大小
  • 读取控制器支持的功能
  • 读取控制器支持的状态
  • 随机数
  • 加密数据
  • 设置随机地址
  • 白名单

8.5 广播与观察

低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第15张图片
低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第16张图片
低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第17张图片

8.6 发起连接

  • 与白名单中的设备发起连接
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第18张图片
  • 与单一设备进行连接
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第19张图片
  • 取消连接
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第20张图片

8.7 连接管理

  • 更新连接
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第21张图片
  • 更新信道映射图
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第22张图片
  • 交换功能列表
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第23张图片
  • 交换版本信息
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第24张图片
  • 加密连接
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第25张图片
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第26张图片
  • 重启加密
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第27张图片
  • 终止连接
    低功耗蓝牙开发权威指南--第二部分控制器(第5-8章)_第28张图片

你可能感兴趣的:(蓝牙,蓝牙)