BLE基础概念

ble 架构

ble architecture

  • PHY, Physical Layer:
    物理层, 控制无线电信号的收发
  • LL, Link Layer:
    链路层, 定义数据包结构, 包括状态信息和收发控制, 以及链路层的加密
  • HCI, Host-Controller Interface:
    通过此标准接口, Host层和Controller层进行通讯
  • L2CAP, Logical Link Control and Adaptation Protocol. 可以理解为一个协议多路复用和分配器(功能上类似于TCPIP的端口).
    一般而言, BLE应用层开发者无需了解L2CAP层的细节
  • ATT, Attribute Protocol:
    该协议将单一的数值(信息)以Attribute(属性)的形式抽象出来,并提供一些方法,供远端设备读取和修改
  • GATT, Generic Attribute Protocol:
    基于ATT提供的数值, 将有用的数值组打包好, 已服务(service)的方式开放给上层应用. 它相当于提供一套数据打包框架/规则.
  • GAP, Generic Access Profile:
    通用访问服务, 是对LL层的广播,监听,建立连接功能的抽象, 便于开发人员来理解和开发
  • SM, Security Manager
    负责BLE通信中有关安全的内容.

Physical Layer

物理层, 控制无线电信号的收发

ble channel
一图胜千言. 如图所示:

  • BLE占用的频段为 2402Mhz-2480Mhz, 划分为40个Channel(频道), 每个频段2Mhz
  • 3个广播频段被放在了干扰冲突最少的频段, 并被命名为 37,38,39 频道
  • 其余的频段用作数据通讯, 并会采用调频技术来避免干扰和冲突.
  • BLE和wifi的重合频段还是比较严重的! 和 wifi 的 1,6,11 三个频道完全重合.

Link Layer

链路层, 定义数据包结构, 包括状态信息和收发控制, 以及链路层的加密

Link Layer 链路层有5个基本状态:

  • Standby: 睡觉省电.
  • Advertising: 广播模式, 周期性地发送数据, 使用的是 37-39的广播频道
  • Scanning: 扫描模式, 扫描/接收广播数据;
  • Initiating: 连接发起方,扫描带有“可连接”标志的广播数据,一旦发现,则发起连接请求.
  • Connection: 建立点对点的通讯模式, 此后就开始使用 0-36频道开始通讯了!

设备的几种角色

  • Advertiser: 广播者, 处于 Advertising 模式即广播者
  • Scanner: 扫描者, 处于 Scanning 模式即扫描者
  • Initiator: 扫描者, 处于 Initiating 模式的扫描, 用于准备建立连接
  • Slave: 建立通讯后 (Connection 模式), 之前的广播者就变成了Slave从机
  • Master: 建立通讯后 (Connection 模式), 之前的扫描者/发起者就变成了Master主机
  • 混合模式: 一个设备可以同时是 Advertiser & Scanner 或者 Advertiser & Master 等等. 但需要供应商的软件支持!

关于蓝牙设备的角色名称问题, 无力吐槽, 各个分层都有一套自己的术语, 看的时候注意其对应的架构层次再来理解

参数 数值 说明
Advertisement interval 20 ms to 10240 ms 定义广播时间间隔
Advertisement channels CH37-CH39 默认值, 不可修改. BLE5新增了第二广播频道
Discoverability mode ADV_IND 可被连接的广播
            | ADV_DIRECT_IND | 可被连接的定向广播
            | ADV_NONCONN_IND | 不可连接的广播
            | ADV_SCAN_IND | 可接受SCAN_REQ请求的广播数据

Scanning

参数 数值 说明
Scan interval 2.5 ms to 10240 ms 定义扫描时间间隔
Scan window 2.5 ms to 10240 ms 定义扫描时间窗口
Scan mode Active / Passive 主动扫描(会发送Scan Request)

上图:
ble scan

Connections

  • 建立通讯后, 设备的角色被分为 Master 和 Slave
  • 发起建立通讯的设备, 即 Initiating 状态的扫描者, 为 Master
  • 之前在广播状态的设备, 即 Advertising 状态的广播者, 为 Slave
参数 数值 说明
Minimum Connection Interval 7.5 ms 允许的最小连接间隔
Maximum Connection Interval 4000 ms 允许的最大连接间隔
Connection (slave) latency 0 to 500 Slaver允许的延迟次数
Supervision timeout 100 ms to 32000 ms 设置一个失败超时时间

对于 Connection latency, 就是Master会持续发送多个数据包来等待Slaver的回应.

BLE点对点连接的数据交换示意图, 也同时说明了频道的变化:
ble connect.png

GAP

通用访问服务, 是对LL层的广播,监听,建立连接功能的抽象, 便于开发人员来理解和开发

GAP的主要作用:

  • Broadcast mode and observation procedure,实现单向的、无连接的通信方式;
  • Discovery modes and procedures,实现蓝牙设备的发现操作;
  • Connection modes and procedures,实现蓝牙设备的连接操作;
  • Bonding modes and procedures,实现蓝牙设备的配对操作.

GAP层的蓝牙设备角色:

  • Broadcaster Role,设备正在发送广播;
  • Observer Role,设备正在扫描广播;
  • Peripheral Role, 对应Link Layer的slave角色, 可广播和被连接
  • Central Role,对应Link Layer的master角色, 扫描和发起连接的一方

关于蓝牙设备的角色名称问题, 无力吐槽, 各个分层都有一套自己的术语, 看的时候注意其对应的架构层次再来理解

ATT

该协议将单一的数值(信息)以Attribute(属性)的形式抽象出来,并提供一些方法,供远端设备读取和修改

一个Attribute由Attribute Type、Attribute Handle和Attribute Value组成

  • Attribute Type用于标示Attribute的类型, 譬如温度/湿度等.
    Attribute Type使用 UUID (Universally Unique IDentifier)区分, 有 16-bit, 32-bit, 128-bit
  • Attribute Handle是一个16-bit的数值, 简称 Handle. 用作唯一识别Attribute server上的所有Attribute
    Attribute Handle可理解为Attribute的地址, 有如下意义:
    • 一个server上可能存在多个相同类型的Attribute, 显然, client有区分这些Attribute的需要
    • 同一类型的多个Attribute, 可以组成一个Group, client可以通过这个Group中的起, 始handle访问所有的Attributes
  • Attribute Value代表Attribute的值,可以是任何固定长度或者可变长度的octet array (理解为字节类型的数组即可)。
  • Attribute Permission代表Attribute的权限. 是否可读写, 是否加密等等.

ATT设备角色, 采用client-server的形式.

  • Server: 提供信息(即Attribute)的一方为服务方, 一般是传感器节点 (大多数情况是Advertiser / Slaver / Peripheral)
  • Client: 访问信息(即Attribute)的一方为客户端, 一般是手机等终端 (大多数情况是Scanner / Master / Central)

关于蓝牙设备的角色名称问题, 无力吐槽, 各个分层都有一套自己的术语, 看的时候注意其对应的架构层次再来理解

GATT

基于ATT提供的数值, 将有用的数值组打包好, 已服务(service)的方式开放给上层应用. 它相当于提供一套数据打包框架/规则.

看框架图:
ble gatt.png
ble gatt.gif

GATT profile的层次结构依次是: Profile—>Service—>characteristic

  • Profile 是基于GATT所派生出的真正的Profile, 由一个或者多个和某一应用场景有关的 Service 组成
  • Service 包含一个或者多个 Characteristic, 也可以通过Include的方式, 包含其它 Service
  • Characteristic 则是GATT profile中最基本的数据单位, 由一个 Properties / Declaration, 一个 Value, 一个或者多个Descriptor组成
  • Characteristic Properties / Declaration 定义了characteristic的Value如何被使用,以及characteristic的Descriptor如何被访问。
  • Characteristic Value 是特征的实际值,例如一个温度特征,其Characteristic Value就是温度值就。
  • Characteristic Descriptor 则保存了一些和Characteristic Value相关的信息

UUID 的分配

Security

负责BLE通信中有关安全的内容.

主要技术有:

  • 配对, pairing
  • 认证, authentication
  • 加密, encryption

参考资料


原创于 DRA&PHO