BLE基础概念
ble 架构
- 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占用的频段为 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
参数 | 数值 | 说明 |
---|---|---|
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) |
上图:
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点对点连接的数据交换示意图, 也同时说明了频道的变化:
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)的方式开放给上层应用. 它相当于提供一套数据打包框架/规则.
看框架图:
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
参考资料
- UG103.14: Application Development Fundamentals: Bluetooth® Smart Technology
- 蓝牙协议分析(1)_基本概念,
简单介绍了标准蓝牙和低功耗蓝牙. 正如作者所说, 蓝牙的架构设计很不”美”, 给人一种拆拆补补, 各自为政的感觉. 但不可否认, 商业上, 蓝牙是成功的! - 蓝牙协议分析(2)_协议架构
从全局概念介绍了蓝牙架构的设计, 并对各个分层进行了简单的介绍. - 蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍
对快速理解低功耗蓝牙(BLE) 非常有帮助! 也是从架构说起, 逐步深入细节的叙事风格 - 蓝牙协议分析(4)_IPv6 Over BLE介绍
说明了加入IPv6协议的重大意义. 物联网大势所趋, 而IPv6必将成为数据传输的最终标准! (Zigbee也支持了IPv6, Thread天生就采用6LowPAN协议) - 蓝牙协议分析(5)_BLE广播通信相关的技术分析
- 蓝牙协议分析(6)_BLE地址类型
- 蓝牙协议分析(7)_BLE连接有关的技术分析
- 蓝牙协议分析(8)_BLE安全机制之白名单
- 蓝牙协议分析(9)_BLE安全机制之LL Privacy
- 蓝牙协议分析(10)_BLE安全机制之LE Encryption
渐渐就由浅入深, 探讨技术细节了.
原创于 DRA&PHO