BLE协议学习总结

简介: (作者:LG)

1 提笔

最近因工作需要,投入到BLE项目中,故而花了不少时间翻看标准,钻研原理,以求知其所以然。结合平头哥BLE产品,实践验证理论,还是有了不少心得。一直想记录下来,奈何一直忙(给自己找了个理由),哈哈,今天终于下笔,来个小结。当然,如有不准确之处,还望各位同学批评指正。

先声明下,为了配合理解,文中很多图片资料来自SIG/IEEE标准组织或者互联网,如有版权问题,还请联系我,我会立刻纠正。不胜感激!

2 蓝牙的演进史

蓝牙(BlueTooth),是一种支持设备短距离通信的无线电技术,诞生于1994年,最初由电信巨头爱立信公司创制,当时是作为RS232数据线的替代方案。作为有线的无线替代方案,其理念是使用无线电传输来交换数据。名字取自于丹麦的一个国王Harold Bluetooth,此国王据说统一了四分五裂的国家,有点类似于我大秦帝国秦始皇。哈。

如今,蓝牙由蓝牙技术联盟(Bluetooth Special Interest Group,简称SIG)管理。IEEE将蓝牙技术列为IEEE 802.15.1。

版本演进史:

image.png
表格 1 蓝牙版本演进

从上表演进史可以得出,4.0之前的版本演进主要在追求通信速度,3.0高速蓝牙达到了24Mbps;4.0及其之后的版本演进主要在追求低功耗/低成本等物联网IoT特性。一般将蓝牙3.0之前的BR/EDR蓝牙称为经典蓝牙,而将4.0开始后的蓝牙称为低功耗蓝牙。本文重点介绍的是BLE。
image.png
图表 1 蓝牙分类

3 BLE协议详解

我的经验是,要学习掌握某一数据通信协议,先找出其OSI模型,然后从底层(物理层)向上层层剥离。闲话少说,上图。
image.png
图表 2 BLE OSI架构
那我们就从物理层开始,逐层向上讲解。

BLE物理层主要的技术有4:

l 频谱

BLE使用2.4GHz工业,科学及医疗ISM频段,从2400MHz到2483.5MHz。信道带宽2M, 共计40个信道。F=2402+k*2MHz,k=0,。。。39。37/38/39固定为广播信道。

l GFSK调制解调

BLE采用的GFSK调制方式(高斯频移键控),中心频率容限是+/-150kHz

l AFH跳频解决拥堵问题

l 1M/2M无编码物理层,1M编码物理层(S=2,S=8)

频谱,哈,就不解释了,省的大家说我啰嗦。

GFSK,我通俗的理解就是,以(中心频率-150kHz)为频点的频率代表0,以(中心频率+150kHz)为频点的频率代表1

AFH,adaptive frequency hopping自适应跳频,大家都知道2.4G频段是开放频段,诸如WiFi,微波都在此频段,那就会产生很多干扰,BLE是通过此功能来尽量避开干扰。具体做法就是,在Master请求连接的时候,需要告知后续和Slave通信时的可用Channel以及跳频的步伐;当连接建立后,也可以动态更新可用channel和跳频步伐。可用channel用ChannelMask字段表明,跳频步伐用Hop字段表明。一图胜千言:
image.png
图表 3 跳频
再看看有跳频和无跳频的对比:
image.png
图表 4 有跳频的效果图
image.png
图表 5 无跳频的效果图
无编码物理层,顾名思义,一个物理symbol代表一个0或者1. 1M无编码,也就是物理层1M symbol/s,对应的数据传输速率为1Mbps,2M无编码同理。

编码物理层,举个栗子,11代表1,00代表0,在物理层symbol速率不变的情况下,有编码意味着实际数据速率的降低,这个例子里实际数据速率降低了1/2,但带来的好处是纠错能力的提高,破坏掉一位,仍可用还原,这样也就变相地提高了接收灵敏度,进而提高了覆盖距离。其实这个栗子就是S=2编码。

BLE支持1M symbol/s下的S=2和S=8,对应的数据速率也就是500kbps和125kbps。
image.png
图表 6 BLE各版本速率
image.png
图表 8 BLE支持的无编码/编码物理层

==========================稍歇会儿,画个线,下面为LL层============================

BLE LL层,发展到这层,那就要从帧格式说起。

BLE帧主要分为两种:广播包和数据包。上图。
image.png
图表 9 BLE帧格式

两种报文的区别主要靠Access Address来定义。广播包的Access Address固定为0x8E89BED6. 广播包和数据包从access address字段后就分道扬镳了,有不同的定义。
image.png
图表 10 广播包帧格式

顾名思义,广播包就是所谓的灯塔包,主要目的是告知别人:我在这里,我有哪些服务和能力。以方便Scan设备扫描到,从而建立连接通信。广播分为4种类型:(上图PDU Type里的4种)

再加Scan_Req和Scan_Rsp,用来发送扫描请求以获得比广播里带的信息更多的Scan_Rsp。

再加Connect_Req,用来发送连接请求。

以上就构成了广播包的所有类型。

========================画个杠杠,下面讲数据包帧格式===========================

二话不说,上图:
image.png
图表 11 数据包帧格式

很清晰吧,多强调一点,LL层报文主要分为两类:LL Data PDU和LL Control PDU。LL Control PDU有以下内容:
image.png
图表 12 LL层控制报文

继续吧,后面该payload length字段了,也就是上图绿色那个。
image.png
图表 13 数据包帧格式续

========================LL层over,下面是L2CAP============================

L2CAP存在的价值就是可以适配不同的上层协议,诸如:ATT/SMP。继续上图:
image.png
图表 14 L2CAP帧格式

继续分解上图黄色三条:
image.png

图表 15 L2CAP帧格式续

讲到这里,BLE的帧结构基本就完了。那这些帧是以怎么个序列交互的呢?协议其实就是一种语言,让彼此能听懂意思。

对于BLE的通信过程,我总结如下:

1. BLE广播者广播自己,广而告之,告诉大家:我是谁?我有什么服务?

2. BLE 扫描者扫描广播者

a) 主动扫描,发送scan req报文,广播者回应scan response报文

b) 被动扫描,默默扫。

3. BLE 扫描者发起连接请求。角色为Master,广播者是Slave。请求里告知后续通信的参数,诸如:Slave该什么时候醒来打开Rx,跳频怎么跳等

4. 然后就是正常步调一致的通信,同时醒来,Master Tx一包,Slave Tx回应一包,再睡,如此循环。
image.png
图表 16 BLE广播/连接/通信
image.png
图表 17 Connect Req报文里带的连接参数
image.png
图表 18 连接参数详解
image.png
图表 19 连接参数详解续
image.png
图表 20 BLE宏观通信过程

==============================BLE基本通信过程over==============================

蓝牙通信通道有了,那用来干什么呢?这就要谈起ATT和GATT了。有了它们,才能完整地提供象运动手环检测心率这样的应用服务。哈哈,是不是很激动呀,终于从下蹿到顶了 :)

那我们就先说应用服务,GATT的规定,应用对应profile,profile里包含若干service,service由characteristic组成,characteristic又由attribute组成,attribute是数据细胞单位。
image.png
举个栗子,如图就是一个心率profile。
image.png
图表 21 心率应用

应用定义是有了,但如何通过报文交互发现服务以及读写操作服务内容呢?这就是GATT/ATT干的事。如下:
image.png
=============================BLE从下到上的通信过程over==========================

最后再讲下BLE的安全,这就要提起SMP,还记得吗?上面图14和图15 L2CAP其中支持的协议之一就是SMP。

SMP协议主要做2件事:鉴权和加密

为了这2件事,需要的过程分为3个阶段:
image.png
具体报文交互过程:
image.png
图表 22 SMP过程交互

每个BLE的设备IO能力不一样,合作起来就要双方协商出一种鉴权方式,具体方法:
image.png
图表 23 BLE设备IO能力

设备IO能力有表示方法了,那就双方碰一碰下呗
image.png
这样就决定好了鉴权方式,然后按照上面通信流程生成LTK密钥,SKD为随机数,再合起来生成

Session Key,进行数据加解密。如下图:
image.png

4 End

​ 基本就写到这里吧,后续再会补充点抓包报文,以供参考学习。欢迎同学们批评指正,随时拍砖...

5 文中引用的示图出处

image.png

添加班级群

阅读完今日份的文章分享后,别忘了打开钉钉APP,扫描下方训练营班群二维码👇,参与今日课程直播或观看直播回放,群内不定时配备讲师答疑~
学习完课程视频后,我们今天的学习才算正式结束哦~
image.png

目录
相关文章
|
11天前
|
传感器 安全 Java
如何使用 CoAP 协议进行设备通信
CoAP(Constrained Application Protocol)是一种适用于资源受限设备的轻量级协议,常用于物联网(IoT)设备之间的通信。本文介绍如何使用 CoAP 协议进行设备通信,包括协议的基本概念、消息格式、请求与响应流程以及实际应用示例。
|
4月前
|
开发框架 网络协议 前端开发
Modbus协议和应用开发介绍
Modbus协议和应用开发介绍
|
6月前
|
网络协议 程序员 API
LabVIEWCompactRIO 开发指南19 原始以太网(TCP/UDP)
LabVIEWCompactRIO 开发指南19 原始以太网(TCP/UDP)
47 0
|
6月前
|
存储 JSON 编解码
IM通讯协议专题学习(十):初识 Thrift 序列化协议
本文将带你一起初步认识Thrift的序列化协议,包括Binary协议、Compact协议(类似于Protobuf)、JSON协议,希望能为你的通信协议格式选型带来参考。
154 1
|
物联网 UED
【BLE】蓝牙BLE传输到底有多快?
我们在开发蓝牙产品的时候,经常会被问到,这个文件传输用蓝牙可以做吗?多长时间可以传完?蓝牙的传输速率是多大?很多人对蓝牙的传输速率可能只有一个大概的概念几KB?几十KB?下面就来看一下蓝牙的传输速率到底有多快?众所周知,对于无线连接,链路维护和数据包冗余会产生一定的传输成本,以保持蓝牙连接的健壮和高效。因此,连接的低功耗蓝牙数据吞吐量的公式为:使用这个公式,我们将在建立连接时计算从 4.0 到 5 的数据吞吐量。
902 0
【BLE】蓝牙BLE传输到底有多快?
|
算法 安全 物联网
【BLE】 BLE安全管理 - SM层剖析(2)
上一章介绍了配对流程的第一阶段,剖析了配对第一阶段的配对请求包和配对响应包的各个字段的含义和使用。接下来就进入了ble配对的阶段二,在该阶段双方会根据阶段一中的配对信息选择合适的配对和认证方式,并且生成会后续链接加密的密钥。
347 1
【BLE】 BLE安全管理 - SM层剖析(2)
|
物联网
BLE基础知识(三)
经过前面两篇《BLE基础知识(一)》《BLE基础知识(二)》之后,我们对BLE有了基本的了解。我们平时用到比较多的GATT了。接着上篇来继续看看!!
|
安全 物联网
BLE基础知识(一)
前面通过《蓝牙基础知识(一)》和《蓝牙基础知识(二)》两篇,我们了解了一些蓝牙的基本概念。之前说过蓝牙分为BR/EDR和BLE,接下来,我们先来看看BLE的内容。
|
存储 物联网 数据格式
BLE基础知识(二)
上一篇《BLE基础知识(一)》聊到GAP,接下来继续来聊聊ATT, GATT等内容,这些在BLE中应用还是比较多的。
|
编解码 物联网
【BLE】蓝牙5.2新特性 LEPC简介
LEPC是LE Power Control的简称,是蓝牙5.2引入的用来优化功耗的一个普惠性的新特性,它既可以优化LE Audio的功耗,还可以优化现有ble的功耗。虽然在BLE中,LEPC是一个全新的概念,但经典蓝牙BR/EDR中却很早就引入了该特性。LEPC是什么?一句话概括,LEPC是一个让蓝牙设备在建立连接后可以协商双方发射功率的机制。
539 0
【BLE】蓝牙5.2新特性 LEPC简介