导图社区 蓝牙基本知识及Mesh组网的知识
蓝牙的一些基本知识,包括蓝牙的体系架构、协议栈等;以及蓝牙的Mesh的基本知识,包括节点特性、元素、模型等概念。
编辑于2021-12-22 18:50:05蓝牙
版本
经典蓝牙
传统蓝牙(BT v1.0/2.0)
高速蓝牙(BT v3.0及以后)
低功耗蓝牙(BLE v4.0及以后)
特点
传输最大距离:100m
低功耗
1对1通讯
体系结构
物理层(PHY: Physical Layer)
调制方式
GFSK,高斯频移键控
频段
2.4GHz ISM频段,频率范围:2.400-2.4835GHz
40个RF信道
f=2402+k*2MHz,k=0,……,39
信道间隔2MHz
广播信道:3个,固定
数据信道:37个,自适应跳频
链路层(LL: Link Layer)
数据的发送、接收
定义数据包格式
Preamble(1 octet) Access Address(4 octets) PDU(2 to 257 octets) CRC(3 octets)
是负责数据的发送和接收,不做解析
定义不同类型的PDU及其格式
Advertising channel中Advertising有关的PDU
Advertising channel中Scanning有关的PDU
Advertising channel中Initialing有关的PDU
Data channel中LL data有关的PDU
Data channel中LL control有关的PDU
确定设备的连接数
负责广播、扫描、建立和维护连接,以及确保数据包按照正确的方式组织、正确的校验和加密序列等
选择哪个射频通道进行通信
怎么识别空中数据包
数据包发送的时间点
怎么保证数据的完整性
ACK如何接收
如何进行重发
如何对链路进行管理和控制
定义连接建立的方式及过之后的应答、流控等机制
抽象出来一个链路控制协议(Link Layer Control),用于管理、控制两个Link Layer实体之间所建立的这个Connection
更新Connection相关的参数
transmitWindowSize
transmitWindowOffset
connInterval
更新该连接所使用的跳频图谱
使用哪些Physical Channels
执行链路加密(Encryption)有关的过程
对广播信道数据处理
规定广播信道号
37
中心频率:2402MHz
38
中心频率:2426MHz
39
中心频率:2426MHz
广播信道之间至少相差24MHz。每次广播,都会在3个信道上将广播数据发送一次,这样就能有效的避免干扰,因为三个信道同时被干扰的情况极少
针对广播通道以白名单(White List)的形式定义Link Layer的数据过滤机制
执行广播通道上实际的packet收发操作
数据信道
0~36
连接不会长期使用固定的信道,会通过跳频技术随机有规律的切换
可能同时存在多个链路,同时拥有多个独立的状态机,但是链路层永远不能同时成为主从机
状态机
Standby状态(初始状态)
切换前的状态
任意状态
可切换到的状态
除Connection状态外的任意一种状态
不发送数据,也不接收数据
Advertising状态
切换前的状态
Standby状态
可切换到的状态
Standby状态
Connection状态(连接成功后)
可以通过广播通道发送数据的状态
它广播的数据可以由处于Scanning或者Initiating状态的实体接收
Scanning状态
切换前的状态
Standby状态
可切换到的状态
Standby状态
以通过广播通道接收数据的状态
Initiating状态
切换前的状态
Standby状态
可切换到的状态
Connection状态(连接成功后)
和Scanning状态类似,不过是一种特殊的接收状态
只能接收Advertiser广播的connectable的数据
在接收到数据后,发送连接请求,以便和Advertiser建立连接
连接成功后,Initiater和对应的Advertiser都会切换到Connection状态
发送连接的Initialing作为master
接收连接请求Advertising作为slave
Connection状态
切换前的状态
Initiating
Advertising
可切换到的状态
Standby状态
和某个实体建立了单独通道的状态,在通道建立之后,由Initiating或者Advertising自动切换而来
通道断开后,会重新回到Standby状态
实现最基本的数据发送和接收
对外接口是天线
对内接口是HCI
主机控制器接口(HCI: Host controller interface)
在主机(Host)和控制器(Controller)之间提供一个标准化的接口
定义Host和Controller(通常是两颗IC)之间的通信协议,向上为主机提供软件应用程序接口(API)。
UART,SDIO,USB,SPI等物理接口
逻辑链路控制和适配协议(L2CAP: Logic link control and adaptation protocol)
提供数据封装服务
将LL提供的Logical Channel换分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用
对连接间隔进行管理
向上提供数据封装服务,从而使逻辑上允许端到端的数据通信
提供可复用,分割和重组的面向连接或者无连接的数据服务
生成符合Link Layer传输要求的数据片(长度不超过251
提供:协议/通道的多路复用,重传、流传机制、流式传输功能
L2CAP数据包可以达到64k
L2CAP允许每个L2CAP通道流控和重传
安全管路层(SMP: Secure manager protocol)
管理BLE连接的加密和安全
提供配对和秘钥的分发
属性协议(ATT: Attribute protocol)
规定了怎么样去访问对端设备的数据
定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据
数据存储在属性服务器的“属性”里,供属性客户端进行读写操作。
定义了一套机制,允许client和server通过Attribute的形式共享信息
通用属性配置文件(GATT: Generic attribute profile)
建立在ATT的基础上,规范Attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理
用于提供通用的、信息的存储和共享等功能
通过使用ATT协议层定义了如何发现与使用服务、特征和描述符的标准方法
主要负责连接后的数据传输
一个GATT服务器通过一个称为属性表的表格组织数据,这些数据就是用于真正发送的数据
属性
句柄
UUID
值
特性
描述符
服务
定义两种角色
服务器
客户端提供数据服务,就是数据中心
客户端
从服务器读写应用数据,就是访问数据者
通用访问配置文件(GAP:Generic access profile)
负责处理设备的接入方式和过程,包括设备发现,链路建立,链路终止以及实现绑定
主要负责连接前的数据广播
对上级,提供应用程序接口
对下级,管理各级职能部门,尤其是指示LL层控制室五种状态切换
定义GAP层的蓝牙设备角色
Broadcaster Role,设备正在发送advertising events
Observer Role,设备正在接收advertising events
Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色)
Central Role,设备发起Link Layer连接(对应Link Layer的master角色)
定义GAP层的、用于实现各种通信的操作模式和过程
实现单向的、无连接的通信方式
实现蓝牙设备的发现操作
实现蓝牙设备的连接操作
实现蓝牙设备的配对操
定义User Interface有关的蓝牙参数
蓝牙地址(Bluetooth Device Address)
蓝牙名称(Bluetooth Device Name)
蓝牙的pincode(Bluetooth Passkey)
蓝牙的class(Class of Device,和发射功率有关)
应用层
定义三种类型
特征(characteristic)
采用已知格式,以通用唯一标识码(UUID)作为的一个小块数据
能够重复使用
被定义为计算机的可读格式
当计算机遇到一个从未接触过的特征时,计算机可以去更新这个特征的读取规则,从而正确读取特征,并向用户展示读取的特征
服务(service)
是人类可读取的一组特征以及其相关的行为规范
定义了位于服务器上相关的特性和行为,而不定义客户端行为
两种类型
首要服务
表征一个给定的设备主要做什么,正是通过这些服务,用户才了解到该设备是干什么的
次要服务
是那些协助主要业务或其他次要服务的服务
配置文件(profile)
是用例或应用的最终体现
配置文件是描述一个或多个设备的说明,每一个设备提供一个或多个服务,配置文件描述了如何发现和连接设备,从而为每台设备确定了拓展结构,配置文件还描述的客户端行为,用于发现服务和服务特性
定义出各种各样的策略
FTP
文件传输
......
协议栈
Controller
Host
基于BLE的衍生物
BLE mesh
建立在BLE的物理层和链路层之上
BLE物理层和链路层
采用"Advertising"方式
蓝牙广播设备在3个广播信道里以特定的时间间隔发送消息, 同时蓝牙扫描设备以特定时间长度的的扫描窗口和间隔, 依次扫描3个广播信道来接收广播设备发送过来的信息. 图中三个不同颜色的柱状图表示37,38,39三个广播信道. 广播设备连续在三个信道里发送消息, 间隔为20ms. 而扫描设备的扫描窗口时间为30ms, 扫描间隔为40ms, 一次扫描一个信道. 蓝牙Mesh设备在网络内部通信时, 以尽可能接近100%的占空比来扫描广播信道. 也就是说扫描窗口时间等于扫描间隔, 以确保信息不会丢失. 蓝牙Mesh设备在发送特定信息的时候并不会像普通BLE广播要等一个广播间隔, 而是延迟一小段随机时间就立即发送出去
Bearer 层(承载层)
定义了network message在各个Mesh 网络nodes之间的传输方式
两种承载
advertising bearer
对应BLE的Advertising
GATT bearer
对应BLE的Connection方式
Network 层
将传输层的数据包传输给一个或者多个其它节点
对本层消息进行加解密和鉴权
lower transport层
对upper transportlayer的数据包进行分段和重组
Uppper transport层
负责对应用数据进行加解密以及鉴权
Access 层
定义了高层应用如何访问upper transport 层
定义了应用数据包的格式
高层应用数据的加密
解密来自upper transport数据
Foundation Model层
定义了用于配置和管理mesh网络的状态states、消息messages以及models,实现mesh网络的配置
Model 层
定义了各种常用的标准化典型用户场景models
models的Spec(Bluetooth Mesh Model specification)
lighting model(灯模型)
传感器模型......
发布/订阅系统
普通直连
灯需要记住它对应的开关
开关需要记住它控制的灯
如果把“灯4”用“灯6”来替换,则“灯6”要重新设置哪些开关能控制它。同时,“开关1”和“开关2”,也要更新它们的控制灯的信息,把“灯4”换成“灯6”
发布/订阅
引入组(Group)的概念来实现松耦合
Group1
开关1
灯1
灯2
灯3
灯4
Group2
开关2
灯4
灯5
开关向组地址发布消息,灯订阅来自组地址的消息
如果要更换灯泡, 只需要重新设置新灯泡里的订阅列表即可, 不用修改开关那边发布列表的设置
开关只需要发布消息到组地址, 无需关心订阅者的情况
管理型网络泛洪
概念
消息可以在在无线覆盖范围之内的设备之间直接通信
可以通过中继设备和无线覆盖范围之外的设备通信
消息可以被多次中继, 从而实现非常广阔的消息传输
网络中所有具备中继功能的设备都会转发收到的消息
优点
无需特定的路由设备, 确保消息多路径传输无障碍的到达目的设备;不需要创建和管理复杂的路由表
缺点
可能会对网络消息泛滥造成通信延迟
改进措施
Message cache
设备都会缓存收到消息的关键信息, 以确定是否已经转发过此消息, 如果是就忽略此消息. Message cache需要至少能缓存两条消息
Time to Live(TTL)
每个消息都会包含一个Time to Live(TTL)的值, 来限制中继的次数, 最大可以中继126次. 消息每转发一次TTL的值就减1, TTL值为1就不再转发.
节点特性
具有收发消息的功能
选配的特性
中继(relay)
使能了此特性的节点可以通过Advertising Bearer接收并转发消息给mesh网络其他设备
Bearer是指蓝牙Mesh协议中的承载层, 它主要是把BLE数据抽象并供上层使用
只转发不在消息缓存和TTL的值大于1的消息, 转发前会把TTL的值减1
代理(Proxy)
使能这个特性的节点能够采用BLE GATT Bearer的方式在数据信道和BLE设备通信
作用:能够兼容市场上数十亿台不支持蓝牙Mesh的BLE设备如手机, 平板电脑等
代理节点会把来自手机和平板电脑的消息通过Advertising的方式转发给mesh网络其他设备
好友(Friend)
可以帮助与之组合的低功耗设备缓存消息, 低功耗设备从休眠中醒来后向它的好友设备查询消息并作出相应的处理
低功耗(Low Power)
对于功耗敏感比如纽扣电池供电设备使能低功耗特性, 在大部分时间处于休眠状态, 在较长的时间间隔醒来一次
在睡眠期间的传递给它的消息就有很大可能错失掉
一个节点可以同时具备中继、代理、好友的特性。低功耗特性是唯一的。
网络拓扑
节点之间的连线表示无线信号覆盖范围内的直接连接, 对无线信号覆盖范围外的节点之间的通信需要经过中继节点
消息传递路径
Q,R,S进行消息转发到达目的节点
好友节点P和O分别有3个和2个低功耗节点组合;好友节点N没有低功耗节点组合
节点T是BLE设备, 通过GATT Bearer方式和代理中继节点S进行通信, 节点S必须转发所有和节点T的消息传输
LE节点T要发送消息给低功耗节点L. 首先节点T通过GATT Bearer在数据信道发消息给节点S, 然后节点S通过Advertising Bearer方式在广播信道转发消息
节点H,R,O,N都在其无线信号覆盖范围并接收到消息
节点O作为低功耗节点L的好友会储存收到的消息,在节点L从睡眠中醒来后会查询好友节点O来取得这个发送给它的消息并做相应的处理
元素和地址
一个节点可以包含1个或多个元素(Elements), 比如一个双孔插座板, 每个插孔就是一个元素
单播地址(Unicast Address)
每个元素在加网的过程会被分配唯一的单播地址(Unicast Address), 地址范围是0x0001-0x7FFF
组播地址(Group Address)
发布/订阅机制里,订阅特定的组播地址, 就会收到发布者发送到此地址的消息. 组播地址范围0xC000-0xFEFF
虚拟地址(Virtual Address)
每一个虚拟地址逻辑上对应一个128-bit的Label UUID. 通过对该Label UUID作哈希运算得出虚拟地址的低14位数值. 虚拟地址的范围为0x8000-0xBFFF
模型
定义了基本功能的最小单位模型,比如设备的开关 灯光亮度调节等
状态(State)
表明一个元素的当前状态
比如灯泡中包含开关和亮度的状态值
不同状态可以设置为绑定关系(Bound State). 比如灯泡亮度为非零值时, 开关状态应该是开. 而灯泡亮度调整到0的时候, 其开关状态也应该被设置为关闭
消息(Message)
SET类型
GET类型
STATUS类型
用来设置请求发送状态值
行为(Behavior)
定义了模型在接收到消息后所作的动作行为
比如开关模型定义的行为就是在收到了SET的消息后, On/Off的状态就要变为SET消息里给定的值
如果收到了GET消息那么就把On/Off的状态通过STATUS消息传给询问方
消息通信架构
服务器/客户端的架构
对外提供状态访问接口的叫做服务器(server)
来访问服务器端状态的叫做客户端(client)
模型种类
服务器模型(Server model)
定义了一个包括状态,绑定状态和消息的集合
比如灯包含有通用开关服务器模型(Generic OnOff Server) 和灯亮度服务器模型(Light Lightness Server)
客户端模型(Client model)
定义了一群消息用来请求改变服务器端的状态
比如开关中含有通用开关客户端模型(Generic OnOff Client)以及灯亮度客户端模型(Light Lightness Client)
客户端模型不含有状态(State)
控制模型(Control model)
可以包含上述两种模型的功能
左边灯的元素中含有通用开关(Generic OnOff)和灯的亮度(Light Lightness)服务器模型
分别包含通用开关(Generic OnOff)和灯亮度(Light Lightness Actual)状态. 两个状态是绑定状态关系
右边开关设备元素中包含了通用开关(Generic OnOff)和灯亮度(Light Lightness)客户端模型
通过消息来获知设置服务器端元素的状态. 客户端模型不含有状态.
安全机制
蓝牙mesh的安全是强制性的
设备加网的过程是采用了256 bit椭圆曲线加密和带外数据认证的方式
所有mesh的消息都经过128 bit AES-CCM加密和认证
加密和认证在网络层和应用层都得以实现
重发攻击被消息里包含强制更新序列号的方式所阻止
在mesh网络中通过刷新密钥来防止垃圾桶攻击
蓝牙硬件架构
host+controller双芯片标准架构
单芯片整体方案
自定义双芯片架构