BLE协议学习总结-阿里云开发者社区

开发者社区> 平头哥芯片开放社区> 正文

BLE协议学习总结

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

1 提笔

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

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

2 蓝牙的演进史

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

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

版本演进史:

版本 主要功能
1.1 传输率约在748~810kb/s,因是早期设计,容易受到同频率之间的类似通信产品干扰,影响通讯质量;单工
1.2 同样是只有748~810kb/s的传输率,但增加了抗干扰跳频功能;单工
2.0 2.0是1.2的改良提升版,传输率约在1.8M/s~2.1M/s,可以有(双工)的工作方式
2.1 为了改善蓝牙技术存在的问题,蓝牙SIG组织(Special InterestGroup)推出了Bluetooth 2.1+EDR版本的蓝牙技术。改善装置配对流程:以往在连接过程中,需要利用个人识别码来确保连接的安全性,而改进过后的连接方式则是会自动使用数字密码来进行配对与连接
3.0+HS 2009年4月21日,蓝牙高速版,传输速率可达24Mbps
4.0 支持低功耗;AES-128加密 将传统蓝牙技术、高速蓝牙技术和低功耗蓝牙(Bluetooth Low Energy,简称BLE)技术集为一体
4.1 IoT相关的特性增强
4.2 2014年12月4日,支持:IPv6;隐私保护;加密算法升级;DLE支持
5.0 2016年6月16日在伦敦正式发布,为现阶段最高级的蓝牙协议标准; • 4 X Range • 2 X Speed • 800% Broadcast Capacity

表格 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。

BT4.0/4.1 BT4.2 BT5.0
1Mbps PHY 27Bytes PDU 305kbps 1Mbps PHY 27-255Byte with DLE 780kbps 2Mbps PHY 27-255Byte with DLE 1.4Mbps

图表 6 BLE各版本速率

物理层 调制方式 编码方案 (报头部分) 编码方案 (有效载荷) 比特率
1M PHY 1Msym/s 无编码 无编码 1Mb/s
2M PHY 2Msym/s 无编码 无编码 2Mb/s
LE Coded PHY 1Msym/s 编码S=8 编码S=8; 编码S=2 125kb/s; 500kb/s

图表 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 文中引用的示图出处

图表编号 图表描述 引用出处
图表 2 BLE OSI架构 蓝牙技术联盟 Core_v5.1.pdf
图表 3 跳频 无线技术联盟
图表 4 有跳频的效果图 无线技术联盟
图表 5 无跳频的效果图 无线技术联盟
图表 12 LL层控制报文 蓝牙技术联盟 Core_v5.1.pdf
图表 16 BLE广播连接通信 无线技术联盟
图表 20 BLE宏观通信过程 无线技术联盟
图表 22 SMP交互过程 蓝牙技术联盟 Core_v5.1.pdf
图表 23 BLE设备IO能力 蓝牙技术联盟 Core_v5.1.pdf

原文作者:LG
点击查看原文

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
平头哥芯片开放社区
使用钉钉扫一扫加入圈子
+ 订阅

芯片开放社区(Open Chip Community 简称OCC),是平头哥芯片基础设施的云端载体,提供开发中心、创芯空间、技术部落等互动版块,汇聚海量应用资源,助力芯片合作伙伴构建软硬融合的芯片生态。面向芯片企业,OCC以应用驱动芯片精准定义、以全栈技术支撑芯片敏捷开发;面向开发者,OCC以芯片生态降低IoT开发门槛、以1520体系加速IoT产品落地。

官方博客
官网链接