首页>>科技 >>内容

蓝牙 ble的介绍,蓝牙BLE是什么

发布时间:2023-07-20 16:28:35编辑:温柔的背包来源:

很多朋友对蓝牙 ble的介绍,蓝牙BLE是什么不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

蓝牙 ble的介绍,蓝牙BLE是什么

什么是蓝牙?蓝牙是一种短距离无线通信技术,可以实现固定设备和移动设备之间的数据交换。一般蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,蓝牙4.0规范下的乐蓝牙称为低功耗蓝牙。

很多人对蓝牙的认识还局限在手机领域。其实蓝牙的应用远不止这些。在过去的几年里,蓝牙的增长达到了80%。当然,低功耗蓝牙的出现也起到了关键作用。我相信未来蓝牙会创造一个物物互动的世界。标准分类

蓝牙4.0标准包括传统蓝牙模块和低功耗蓝牙模块,是双模标准。低功耗蓝牙也是在传统蓝牙的基础上发展起来的,与传统模块有所不同。它最大的特点是成本和功耗降低,对应用实时性要求高。BLE(Bluetooth Low Energy)蓝牙低能耗技术是一种短距离、低成本和可互操作的无线技术,它使用许多智能手段来最大限度地降低功耗。

BLE技术的工作模式非常适合从微型无线传感器(每半秒交换一次数据)或其他外设(如使用完全异步通信的遥控器)传输数据。这些设备发送的数据很少(通常是几个字节),次数也很少(比如每秒几次到每分钟一次,甚至更少)。BLE协议栈的结构和配置1、协议由两部分组成:控制器和主机2、概要文件和应用程序始终基于GAP和GATT。

3、在单芯片方案中,控制器和主机、配置文件以及应用层都在同一个芯片中4、在网络控制器模式中,主机和控制器一起运行,但是应用程序和配置文件在另一个设备上,例如PC或其他微控制器,它们可以通过UART访问。USB操作5、双芯片模式下,控制器运行在一个控制器上,应用层、profiles、Host是运行在另一个控制器上的BLE设备连接状态的流程图。

具有BLE协议栈各层功能机制的低功耗蓝牙架构

如上图所示,要实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后需要提供一个与这个芯片匹配的BLE协议栈,最后在协议栈上开发自己的应用。可见,BLE协议栈是连接芯片和应用的桥梁,是实现整个BLE应用的关键。

BLE协议栈包含哪些功能?简单来说,BLE协议栈主要是把你的应用数据一层一层的封装起来,生成一个符合BLE协议的空中数据包,也就是把应用数据封装在一系列的帧头和帧尾中。具体来说,BLE协议栈主要由以下几部分组成:

PHY层(物理层)。PHY层用于指定BLE使用的无线频带、调制和解调方法。PHY层做得好不好直接决定了整个BLE芯片的功耗、灵敏度和选择性。

LL层(链路层)。LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordic这样的BLE协议栈可以同时支持20条链路,这是LL层的功劳。LL层有很多事情要做,比如选择哪个射频信道进行通信,如何识别空中数据包,何时发送数据包,如何保证数据的完整性,如何接收ACK,如何重传,如何管理和控制链路。

LL层只负责发送或检索数据,如何分析数据就交给上面的GAP或ATT了。

主机控制器接口.HCI是可选的。HCI主要用于两个芯片实现BLE协议栈时,用来规范它们之间的通信协议和通信命令。间隙层(通用访问配置文件)。GAP是分析LL层有效载荷的两种方法之一,也是最简单的一种。GAP简单定义了LL有效载荷,所以功能极其有限。GAP目前主要用于广播、扫描和发起连接。

L2CAP层(逻辑链路控制和适配协议)。L2CAP只是封装了LL,LL只关心传输的数据本身。L2CAP应区分加密信道和普通信道,同时管理连接间隔。安全管理协议.SMP用于管理BLE连接的加密和安全,如何在不影响用户体验的情况下保证连接的安全性,是SMP要考虑的所有工作。

ATT(属性协议).简单来说,ATT层用于定义用户命令和命令操作的数据,例如读取或写入某些数据。在BLE协议栈中,ATT是开发者接触最多的。BLE引入了属性的概念,用来描述一段数据。属性不仅定义了数据,还定义了数据可以使用的ATT命令,所以这一层称为ATT层。

通用属性配置文件.GATT用于规范属性中的数据内容,并使用组的概念对属性进行分类和管理。没有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需要不断地发送广播信号(此过程一般有一个时间间隔,在没发送广播数据时间内,芯片处于低功耗状态),每发送一次广播包,称之为一次广播事件。

广播帧格式

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

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

有效数据部分:包含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的软件。

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

数据帧格式

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

字段释义:LLID:表示此包数据是LL Date PDU 还是LL Control PDU00b: Reserved01b: 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 的包。这个标志可以用来判断数据包是否被正确接收还是需要重传。

以上知识分享希望能够帮助到大家!