0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

蓝牙BLE是什么

电子森林 来源:FPGA入门到精通 作者:FPGA入门到精通 2020-12-16 11:10 次阅读

什么是蓝牙

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙。

很多人对蓝牙的认识还很局限于手机领域,其实蓝牙的应用已经远远不止于此。过去几年里,蓝牙的增长量就达到了80%,当然,低功耗蓝牙的出现也起到关键的作用,相信未来蓝牙会开创一个可交互的物联世界。

5c4c91ba-35a7-11eb-a64d-12bb97331649.png

标准分类

蓝牙4.0标准包括传统蓝牙模块部分和低功耗蓝牙模块部分,是一个双模标准。低功耗蓝牙也是建立在传统蓝牙基础之上发展起来的,并区别于传统模块,最大的特点就是成本和功耗降低,应用于实时性要求比较高。

5cc42748-35a7-11eb-a64d-12bb97331649.png

BLE(Bluetooh Low Energy)蓝牙低能耗技术是短距离、低成本、可互操作性的无线技术,它利用许多智能手段最大限度地降低功耗。

BLE技术的工作模式非常适合用于从微型无线传感器(每半秒交换一次数据)或使用完全异步通信的遥控器等其它外设传送数据。这些设备发送的数据量非常少(通常几个字节),而且发送次数也很少(例如每秒几次到每分钟一次,甚至更少)。

BLE协议栈的结构和配置

1、协议有两个部分组成:Controller和Host

2、Profiles和应用总是基于GAP和GATT之上

3、在单芯片方案中,Controller和Host,profiles,和应用层都在同一片芯片中

4、在网络控制器模式中,Host和Controller是在一起运行的,但是应用和profiles在另外一个器件上,比如PC或者其他微控制器,可以通过UARTUSB进行操作

5、在双芯片模式中,Controller运行在一个控制器,而应用层,profiles和Host是运行在另外一个控制器上

BLE设备连接状态流程图

5d184fe4-35a7-11eb-a64d-12bb97331649.png

BLE协议栈各层功能机制

低功耗蓝牙体系结构

如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己的应用。可以看出BLE协议栈是连接芯片和应用的桥梁,是实现整个BLE应用的关键。那BLE协议栈具体包含哪些功能呢?简单来说,BLE协议栈主要用来对你的应用数据进行层层封包,以生成一个满足BLE协议的空中数据包,也就是说,把应用数据包裹在一系列的帧头(header)和帧尾(tail)中。具体来说,BLE协议栈主要由如下几部分组成:

PHY层(Physical layer物理层)。PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。

LL层(Link Layer链路层)。LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordic的BLE协议栈能同时支持20个link(连接),就是LL层的功劳。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者ATT。

HCI(Host controller interface)。HCI是可选的,HCI主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等。

GAP层(Generic access profile)。GAP是对LL层payload(有效数据包)如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接等。

L2CAP层(Logic link control and adaptation protocol)。L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。

SMP(Secure manager protocol)。SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。

ATT(Attribute protocol)。简单来说,ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。

GATT(Generic attribute profile )。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,BLE摆脱了ZigBee等无线协议的兼容性困境,成了出货量最大的2.4G无线通信产品

BLE蓝牙模块主要应用领域

1、移动扩展设备

2、汽车电子设备

3、健康医疗用品:心跳带、血压计等

4、定位应用:室内定位、井下定位等

5、近距离数据采集:无线抄表、无线遥测等

6、数据传输:智能家居室内控制、蓝牙调光、打印机等

BLE协议栈详解

协议概述

所谓协议,即将指定的字节按照一定的顺序排列起来,以便他人使用自己的设备时,能通过该协议同其他设备进行通信。协议一特点,就是有固定的帧格式,通过该格式发送,接收者通过解读帧格式,进而得到新息内容;

BLE连接过程

一般通信协议,一类通信是直接发生数据,当设备接送到数据时,直接对数据进行解析,当接受到的数据合法时,即为有效数据,该类型的通信协议,主要用在有线通信协议中,比如Modbus,Can通常采用的即为该类型的通信方式。
另一类通信协议,则需要新建立连接,当双方连接建立成功了方可通信,例如TCP、BLE;BLE协议在需要进行通信时,即需要向外发送广播信号,告诉接收者,即将和它进行通信,接受者接收到广播内容后,确认是与自己通信,于是向广播者发送一响应信息,这样当广播者和接受者都有了对方的身份信息时,即表示双方连接成功。
因此,在连接过程中,必定有相应的广播帧格式。在BLE通信过程中,假设设备A需要连其他设备假设为B,则A需要不断地发送广播信号(此过程一般有一个时间间隔,在没发送广播数据时间内,芯片处于低功耗状态),每发送一次广播包,称之为一次广播事件。

广播帧格式

611d7538-35a7-11eb-a64d-12bb97331649.png


前导:
是一个8比特的交替序列
接入地址的第一个比特为0:01010101
接入地址的第一个比特为1:10101010
接入地址:广播帧为固定地址:0x8E89BED6(低字节在前)
广播报文的报头:
包含4bit广播报文类型、2bit保留位、1bit发送地址类型和1bit接收地址类型。
广播报文类型:

61a0f1ce-35a7-11eb-a64d-12bb97331649.png


发送地址类型:
0:公共地址
1:随机地址
长度:广播报文的长度域包含8个比特,有效值的范围是6~37
数据:广播者地址(6个字节)+广播数据(31个字节)
校验:3个字节,为CRC校验。
广播数据:分为有效数据和无效数据

623e8628-35a7-11eb-a64d-12bb97331649.png


有效数据部分:
包含N个AD Structure,每个AD Structure由Length,AD Type和AD Data组成。其中:
Length:AD Type和AD Data的长度。
ADType:指示AD Data数据的含义。详见https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile/

BLE连接建立过程

1. BLE广播与扫描

设备B不断发送广播信号给手机(Observer),如果手机不开启扫描窗口,手机是收不到设备B的广播的,如下图所示,不仅手机要开启射频接收窗口,而且只有手机的射频接收窗口跟广播发送的发射窗口匹配成功,而且广播射频通道和手机扫描射频通道是同一个通道,手机才能收到设备B的广播信号。也就是说,如果设备B在37通道发送广播包,而手机在扫描38通道,那么即使他们俩的射频窗口匹配,两者也是无法进行通信的。由于这种匹配成功是一个概率事件,因此手机扫到设备B也是一个概率事件,也就是说,手机有时会很快扫到设备B,比如只需要一个广播事件,手机有时又会很慢才能扫到设备B,比如需要10个广播事件甚至更多。

2. 建立连接(connection establishment)

根据蓝牙spec规定,advertiser发送完一个广播包之后150us(T_IFS),advertiser必须开启一段时间的射频Rx窗口,以接收来自observer的数据包。Observer就可以在这段时间里给advertiser发送连接请求。如下图所示,手机在第三个广播事件的时候扫到了设备B,并发出了连接请求CONN_REQ(CONN_REQ又称为CONNECT_IND)。


注:图中M代表手机,S代表设备B,M->S表示手机将数据包发给设备B,即手机开启Tx窗口,设备B开启Rx窗口;S->M正好相反,表示设备B将数据包发给手机,即设备B开启Tx窗口,手机开启Rx窗口。

如图所示,手机在收到A1广播包ADV_IND后,以此为初始锚点(这个锚点不是连接的锚点),T_IFS时间后给Advertiser发送一个connection request命令,即A2数据包,告诉advertiser我将要过来连你,请做好准备。Advertiser根据connect_req命令信息做好接收准备,connect_req包含如下关键信息:

Transmit window offset,定义如上图示

Transmit window size,定义如上图所示

connect_req数据包完整定义如下所示


connect_req其实是在告诉advertiser,手机将在Transmit Window期间发送第一个同步包(P1)给你,请在这段时间里把你的射频接收窗口打开。设备B收到P1后,T_IFS时间后将给手机回复数据包P2(ACK包)。一旦手机收到数据包P2,连接即可认为建立成功。当然,实际情况会比较复杂,手机有可能收不到P2,这个时候手机将持续发送同步包直到超时时间(supervision timeout)到,在此期间只要设备B回过一次ACK包,连接即算成功。所以一旦P1包发出,主机(手机)即认为连接成功,而不管有没有收到设备的ACK包。这也是为什么在Android或者iOS系统中,应用经常收到连接成功的回调事件(该回调事件就是基于P1包有没有发出,只要P1包发出,手机即认为连接成功,而不管有没有收到设备的ACK包),但实际上手机和设备并没有成功建立连接。后续手机将以P1为锚点(原点),Connection Interval为周期,周期性地给设备B发送数据包(Packet),Packet除了充当数据传送功能,它还有如下两个非常重要的功能:

同步手机和设备的时钟,也就是说,设备每收到手机发来的一个包,都会把自己的时序原点重新设置,以跟手机同步。

告诉设备你现在可以传数据给我了。连接成功后,BLE通信将变成主从模式,因此把连接发起者(手机)称为Master或者Central,把被连接者(之前的Advertiser)称为Slave或者Peripheral。BLE通信之所以为主从模式,是因为Slave不能“随性”给Master发信息,它只有等到Master给它发了一个packet后,然后才能在规定的时间把自己的数据回传给Master。

3. 连接失败

有如下几种典型的连接失败情况:

如步骤2图所示,如果slave在transmit window期间没有收到master发过来的P1,那么连接将会失败。此时应该排查master那边的问题,看看master为什么没有在约定的时间把P1发出来。

如果master在transmit window期间把P1发出来了,也就是说master按照connect_req约定的时序把P1发出来了,但slave没有把P2回过去或者没有在超时时间内把P2回过去,那么连接也会失败。此时应该排查slave这边的问题,看一看slave为什么没有把P2回过去

如果master把P1发出来了,slave也把P2回过去了,此时主机或者从机还是报连接失败,这种情况有可能是软件有问题,需要仔细排查master或者slave的软件。

还有一种比较常见的连接失败情况:空中射频干扰太大。此时应该找一个干净的环境,比如屏蔽室,排除干扰后再去测试连接是否正常。

数据帧格式


连接成功后,双方将可以互相发送数据,那么将涉及到其数据帧格式:

64359e12-35a7-11eb-a64d-12bb97331649.png


字段释义:
LLID:表示此包数据是 LL Date PDU 还是 LL Control PDU
00b: Reserved
01b: LL Date PDU:Continuation fragment of L2CAP message, or an Empty PDU.
10b: LL Date PDU:Start of an L2CAP message or a complete L2CAP message with no fragmentation.
11b: LL Control PDU

MIC( Message Integrity Check):信息完整性检测。涉及到加密操作,上图中是用虚线表示的,并不是一定要有此项。
MD:这个标志位是用来通知对方设备自己还有其他数据准备发送。0 表示没有更多数据发送, 1 表示有更多数据准备发送。这样,只要还有数据需要发送,连接事件会自动扩展。一旦不再有数据发送,连接事件立即关闭。

Note:如何区分是确定包、新包还是重发包?
SN:只有一个 bit 位,所以值是在 0 和 1 之间进行切换。如果序列号与之前的一样,则为重传报文,如果序列号和之间的不同,则为新报文。
NESN:预期序列号,它是接收方希望接到的下一包的序列号,也就是数据包的确认标志。当设备接收到序列(SN)为 0 的报文后,在发送给对方的数据包中,应将 NESN 设为 1,这样对方接收到这个包后,会发送一个新的数据包过来,否则就会重发上一次序列号为 0 的包。这个标志可以用来判断数据包是否被正确接收还是需要重传。

责任编辑:xj

原文标题:“蓝牙”技术专题周2 - 蓝牙BLE详解

文章出处:【微信公众号:FPGA入门到精通】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 蓝牙
    +关注

    关注

    114

    文章

    5767

    浏览量

    169811
  • BLE
    BLE
    +关注

    关注

    12

    文章

    652

    浏览量

    59337

原文标题:“蓝牙”技术专题周2 - 蓝牙BLE详解

文章出处:【微信号:xiaojiaoyafpga,微信公众号:电子森林】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    BLE、UWB和RFID,“定位技术”哪家强?

    它们的工作原理。BLE低功耗蓝牙BLE是低功耗蓝牙的缩写,是一种专为短距离交互而设计的无线通信技术。它于2011年作为蓝牙4.0的一部分推出
    的头像 发表于 10-11 08:03 804次阅读
    <b class='flag-5'>BLE</b>、UWB和RFID,“定位技术”哪家强?

    【BearPi-Pico H3863星闪开发板体验连载】蓝牙 BLE 透传测试

    蓝牙 BLE 透传测试 小熊派 Pico-H3863 开发板支持 BLE 1MHz/2MHz 频宽、BLE4.0/4.1/4.2/5.0/5.1/5.2 协议、
    发表于 10-04 11:57

    ESP32-D0WDQ6芯片可以不接外置flash吗?

    在学习开发一个项目,仅仅用到了蓝牙BLE UART ,请问这个情况下不外接FLASH,芯片可以工作吗
    发表于 07-02 07:54

    BK7238 高度集成的单芯片Wi-Fi802.11n和低功耗蓝牙(BLE)5.2 MATTER认证,适用于iot产品

    Wi-Fi802.11n和低功耗蓝牙(BLE)5.2组合解决方案,专为低功耗和小空间应用设计的,BK7238集成了功能强大的32位MCU和全套外设和接口,是高级物联网(IoT)应用的理想选择,BK7238
    发表于 07-01 10:05

    mesh与蓝牙ble一起使用时会出现错误,为什么?

    mesh与蓝牙ble一起使用时会周期出现打印 wifi:Error! Should use default passive scan time parameter for WiFi scan when Bluetooth is enabled!!!!!! wifi:sca
    发表于 06-28 07:26

    请问esp32如何修改spp蓝牙的密码在ardunio环境下?

    大家好,我是esp32的小白。刚刚入手三天,原本是用8266外借一个spp蓝牙完成我自己做的小项目,然后发现esp32带有spp蓝牙ble蓝牙,不过
    发表于 06-25 07:10

    mesh与蓝牙ble一起使用时会出现错误的原因?

    mesh与蓝牙ble一起使用时会周期出现 E (537372) wifi:Error! Should use default passive scan time parameter for WiFi scan when Bluetooth is enabled!!!!!!
    发表于 06-25 06:59

    ESP32-D0WD-V3蓝牙BLE连接失败的原因?

    问题描述:项目使用BLUFI进行配网,IDF v.4.4.1,之前采购的模块是ESP32-D0WDQ6,所有功能正常。最近一次采购的模块使用了ESP32-D0WD-V3芯片,出现了经常扫描不到蓝牙
    发表于 06-13 06:12

    BK7238 高度集成的单芯片Wi-Fi802.11n和低功耗蓝牙(BLE)5.2 MATTER认证

    Wi-Fi802.11n和低功耗蓝牙(BLE)5.2组合解决方案,专为低功耗和小空间应用设计的,BK7238集成了功能强大的32位MCU和全套外设和接口,是高级物联网(IoT)应用的理想选择,BK7238
    发表于 06-04 15:51

    蓝牙网关是什么?具有哪些功能?

    的数据,并将其发送给服务器。 数据传输功能:通过蓝牙 BLE 和 WiFi 之间的串口,将蓝牙 BLE 设备的数据通过WiFi 或者以太网传送到服务器,并且将服务器端的数据传送到
    发表于 01-19 15:05

    蓝牙双模的优势有哪些?

    蓝牙双模是针对蓝牙在数据传输应用领域,集合了经典蓝牙BLE低功耗蓝牙,支持蓝牙BR/EDR(S
    的头像 发表于 01-16 16:22 1061次阅读
    <b class='flag-5'>蓝牙</b>双模的优势有哪些?

    4G(CAT1)蓝牙工牌G208产品概述和工作模式

    G208是一款基于蓝牙BLE技术和4G(CAT1)通讯技术的4G(CAT1)蓝牙工牌,可以配合深圳市极光通信科技有限公司的蓝牙信标使用,用于人员定位、巡更考勤。
    的头像 发表于 12-22 11:18 1091次阅读
    4G(CAT1)<b class='flag-5'>蓝牙</b>工牌G208产品概述和工作模式

    蓝牙mesh互传及蓝牙单向穿透的功能测试

    相较于WiFi技术,低功耗蓝牙BLE技术具有搜索连接速度快、超低功耗等特点,BLE搭配mesh技术所延伸的蓝牙mesh技术因其支持多点对多点连接、物理覆盖区域广阔,也被广泛用于智能家居
    的头像 发表于 12-11 11:34 1836次阅读
    <b class='flag-5'>蓝牙</b>mesh互传及<b class='flag-5'>蓝牙</b>单向穿透的功能测试

    低功耗蓝牙(BLE)PHY无线通信协议的关键技术

    所有蓝牙 LE 无线电都是半双工设备,这意味着它们可以传输或接收数据,但不能同时传输或接收数据。根据 PHY 层,LE 无线电应使用时分双工 (TDD) 方案来模拟全双工系统的行为。
    发表于 11-30 15:31 920次阅读
    低功耗<b class='flag-5'>蓝牙</b>(<b class='flag-5'>BLE</b>)PHY无线通信协议的关键技术

    BLE5.0蓝牙网关的工作原理以及优势

    蓝牙网关是将基于蓝牙的产品连接到其他设备或硬件的设备,通俗的说一个集成蓝牙BLE、WiFi 和以太网的网关设备,蓝牙
    的头像 发表于 11-27 15:36 943次阅读