wahahahehehe

Tips:

1. 博客内容主要为博主的学习笔记,引用已表明出处,如有侵犯请联系我删除;

2. 如有错误请指出,万分感谢;

3. 博主邮箱:yukai_tao@163.com。

BLE的一些概念

BLE一些概念

1. 物理信道

低功耗蓝牙的工作频段为2.4GHz,这个唯一一个在所有国家都无需授权的频段。

BLE将2.4GHz频段分为40个RF射频信道,每个信道2M宽度,最低的中心频率为2402MHz,最高的中心频率为2480MHz。同一时刻,只能用一个信道进行数据的收发。

image

物理信道从0 ~ 39进行编号。index却是,PHY CH0对应37,PHY CH12对应38,PHY CH39对应39。BLE4.2规定,Advertising、Scanning、Initiating 状态只允许在 37、38、39信道上执行数据的收发,这样做的目的是与WIFI的频段隔离,起到抗干扰的作用。在Connection连接状态下可以使用其余37个信道传输数据,并通过跳频技术(Hopping),减少信道干扰增强系统的鲁棒性。

image

2. 设备地址

同一时刻,在2.4GHz频段下,蓝牙设备是如何辨别各种需要通信的对象呢?此时就需要给每个BLE设备分配一个ID,及设备地址Device Address,共48 bits。

低功耗蓝牙设备地址分配如下:

image

2.1 公共地址

public device address的地址由company assigned [24 bits] 和 company id [24 bits] 构成,需向蓝牙组织申请。

2.2 随机地址

随机地址用的更广泛,有细分为两类:

  • 静态地址

  • 私有地址

    • 不可解析的私有地址

    • 可解析的私有地址

2.2.1 静态地址

规则如下:

  • 最高两bit恒定为 11

  • 上电的时候随机生成,并且在一个上电周期内保持不变

  • 除开最高两位,剩余的46bits是一个随机数,不能全部为0,也不能全部为1

  • 下一次上电的时候可以改变。但不是强制的,因此也可以保持不变。

2.2.2 私有地址

(1)不可解析的私有地址

Non-resolvable private address会定时更新。更新的周期称是由GAP规定的,称作T_GAP(private_addr_int) ,建议值是15分钟。要求如下:

  • 最高两bit恒定为 00
  • 除开最高两位,剩余的46bits是一个随机数,不能全部为0,也不能全部为1
  • 以T_GAP为周期,定时更新
  • 此地址不能和 public device address 冲突。

(2)可解析的私有地址

这种地址也称 RPA 加密地址,只能被拥有相同 Identity Resolving Key (IRK) 的设备扫描到,可以防止被未知设备扫描和追踪。规则如下:

  • 最高两bit恒定为 10
  • 至少在 random part of prand 有一个 1和一个0
  • prand 除了最高两位以外,是一个随机数
  • hash 部分是通过公式 hash = ah(IRK, prand) 计算出来的 hash 值

3. BLE角色

BLE的角色有以下几种:

  • 广播者(Advertiser):周期性的向周围设备广播数据

  • 扫描者(Scanner):可以监听广播数据或者搜索周围设备

  • 从设备/从机(Slave):负责广播的并接收连接请求的设备在建立连接后称为slave

  • 主设备/主机(Master):负责扫描设备并发起建立请求,在建立连接后变成master

    这些角色是链路层定义的,是根据设备是否建立连接来划分分的,可以将这四个类型的设备逻辑的划分为两组:

  • advertiser 和 scanner

  • master 和 slave

advertiser 和 scanner属于广播阶段的概念,即在建立连接之前设备角色。master 和 slave 属于建立连接之后的概念,一旦建立连接,scanner角色变为master,advertiser变为slave。

4. Client/Server(C/S)架构

在蓝牙核心规范中,有个重要的概念:Client/Server(C/S)客户端/服务器架构

C/S架构在我们身边随处可见,如用谷歌搜索时,PC浏览器端输入内容点击搜索,谷歌服务器在其数据库中查找信息,组成网页返回给PC浏览器,此过程中,PC浏览器为客户端,谷歌服务器为服务器端。

BLE与之类似,如蓝牙温度计,提供温度数据,手机连接后可以获得温度数据,此时蓝牙温度计是Server,手机是Client。

在C/S架构中,发出请求(request)的一方称为客户端Client,响应请求(response)的一方称为服务器Server。

image

5. 空口包格式

BLE的数据都是在空中进行传输的,在协议中定义为 Air Interface Packets,俗称空口包,BLE链路层(Link Layer)定义其格式为:

image

5.1 Preamble

Preamble,前导帧,长度为一个字节,只有0x55和0xAA两种取值,根据Access Address的第一个bit,由PHY层自动调整。

image

由于BLE信号功率强度可以从-90dBm ~ 10dBm,即80dB,接收机需要通过前到帧这样一串0、1交替序列调整增益参数,以适配不同功率的射频信号,优化数据包的鲁棒性。

5.2 Access Address

Access Address,接入地址,用来表示接收者ID或者空中包身份,根据Access Address的不同,可以将空口包分为:广播包数据包

  • 广播包的Access Address固定为0x8E89BED6,在37/38/39广播信道上传输。
  • 数据包的Access Address为一个32 bits的随机值,由Initiator生成,用于设备一对一通信时使用,即用于连接时的master和slave之间通信的。在剩下的37个数据信道传输。每建立一次连接,重新生成一次Access address。

5.3 PDU

PDU,Protocol Data Unit,协议数据单元。是BLE数据传输的基本单元,BLE在不同状态下的PDU组成也不同。

5.4 CRC

24 bits的PDU的CRC校验数据,初始向量为:
image

6. BLE设备典型交互过程

6.1 广播与扫描

一个设备要让其他设备能发现,则必须向外广播,而一个设备如果对广播者感兴趣,想进一步了解,则可以通过扫描该设备来进一步获取该设备提供的信息,通过这个阶段,扫描的设备已经基本清楚了广播设备信息,以及提供的能力,从而可以判断是否连接该设备。

6.2 建立连接

当扫描者想与广播者可以建立连接,那么设备之间就会有一个建立连接请求。

  • 在建立连接后,如果设备之间要设置一些连接信息或者获取版本信息等等,这可以提供链路层定义的数据格式来发送数据实现,例如master更改连接参数,slave发起更新连接参数请求等等。
  • 为了无线安全,例如数据加密,对数据完整性验证,以及数据在传送过程中有没有被修改等,设备之间可以发起配对流程,该过程是可选实现的。
  • 建立连接请求后,为了能获取设备提供的服务,让客户端能操作设备,那么就需要经历一个设备服务发现过程,只有在这一步后,才能知道设备提供服务的具体操作方法以及操作handle。
  • 知道了设备的具体操作方法,就可以操作设备。
  • 最后,设备任意一方可以发起断开连接请求。

image

posted on 2021-08-03 14:51  Wahahahehehe  阅读(1159)  评论(0编辑  收藏  举报

导航