蓝牙ble,蓝牙BLE,什么是蓝牙BLE

2023-03-17 13:25:16 最新游戏资讯 坑剧哥

BLE技术和蓝牙4.0是什么关系?小米2S支持BLE技术吗?

mi 2S不支持BLE技术。蓝牙低能耗(BLE)技术是低成本、短距离、可互操作的强大无线技术,在自由2.4ghz ISM无线电频段工作。此外,因为祝福技术使用快速连接,因此通常可以在“未连接”(节能)的两端此时才知道彼此之间的联系,仅在必要时打开链接,然后在最短的时间内关闭链接。

BLE的工作模式非常适合其他外围设备,如微型无线传感器(每半秒交换数据)或使用完全异步通信的远程控制。这些设备发送的数据很少(通常是几个字节),发送的数据非常少(例如,每秒几次,甚至更少)。蓝牙低能技术的三大特点是实现了ULP性能,是最大的待机时间、快速连接和低峰值传输/接收功率消耗。

蓝牙BLE,什么是蓝牙BLE

蓝牙模块是指集成蓝牙功能的芯片基本电路集合,用于无线网络通讯。蓝牙模块一般是由芯片、PCB板、外围器件构成。

简单的说,蓝牙模块的作用就是以无线连接取代有线连接,将固定和移动信息设备组成个人局域网, 实现设备之间低成本的无线互联通信。

蓝牙模块按照标准分有1.2,2.0,3.0,4.0,4.1,4.2,5.0;通常后者兼容前者产品;

蓝牙模块根据应用和支持协议划分主要分为经典蓝牙模块(BT)和低功耗蓝牙模块(BLE);

经典蓝牙模块(BT):泛指支持蓝牙协议在4.0以下的模块,一般用于数据量比较大的传输,如:语音、音乐、较高数据量传输等。

低功耗蓝牙模块(BLE):是指支持蓝牙协议4.0或更高的模块,也称为BLE模块(Bluetooh Low Energy Module),最大的特点是成本和功耗的降低,应用于实时性要求比较高,但是数据速率比较低的产品,如:遥控类的(鼠标、键盘)、传感设备的数据发送(心跳带、血压计、温度传感器)等。

BLE蓝牙模块

低功耗蓝牙技术使用与传统蓝牙技术相同的自适应跳频 (AFH) 技术,因而能确保低功耗蓝牙能够在住宅、工业与医疗应用中的“嘈杂”射频环境中维持稳定的传输。为了最大程度地减少使用AFH的成本与功耗,低功耗蓝牙技术已将通道数量从传统蓝牙技术的79个1兆赫兹宽通道减少至40个2兆赫兹的宽通道。相比传统蓝牙技术,低功耗蓝牙技术所增加的一项新功能就是“广播”功能。通过这项功能,从设备可以告知其需要向主设备发送数据。

蓝牙模块根据温度分为工业级和商业级。SKYLAB BLE蓝牙模块符合工业级标准,能够适应各种恶劣环境,工作温度范围达到:-40~85℃。

芯片按温度适应能力及可靠性分为四类:

商业级(0~70摄氏度)、工业级(-40~85摄氏度)、汽车级(-40~120摄氏度)军工级(-55~150摄氏度)一般区分都是按芯片型号的后缀字母来区分不过根据不同的厂家后缀字母也不一样。

工业级蓝牙模块

BLE蓝牙模块应用领域

1.医疗领域:心跳带、血压计等;

2.定位应用:室内定位、井下定位;

3.手持POS系统:手持机扫描信息、POS机刷卡信息、手机提交的信息无线传输给终端;

4.近距离数据采集:无线抄表、无线遥测、传感器无线状态采集;

5.数据传输:打印机、充电桩、鼠标、键盘、蓝牙调光、智能家居室内控制、工业上无线控制等。

【BLE】蓝牙配对绑定

蓝牙的配对(Pairing)和绑定(Bonding)其实是两个流程,这两个流程并不是一块的,只是我们Pairing后往往需要将一些信息(TK, LTK等)存下来,这个过程就是Bonding。

Bonding只是物理性的保存某些encrypted数据在芯片的Flash中。

Pairing主要有三个步骤:

• Phase 1: Pairing Feature Exchange

• Phase 2 (LE legacy pairing): Short Term Key (STK) Generation

• Phase 2 (LE Secure Connections): Long Term Key (LTK) Generation

• Phase 3: Transport Specific Key Distribution

Pairing流程的关键在于Phase 2。无论是蓝牙4.0还是4.2,Phase 1和Phase 3都是一样的。

Pairing有两种方式:一种是 LE legacy pairing ,另外一种是 LE Secure Connections 。其中Phase 1决定了Phase 2 需要使用何种Pairing methods以及Authentication的方式。

Pairing methods的选择:

Pairing Request PDU中的SC位决定了设备支持哪种Pairing 方式,当Initiator和Responder都支持LE Secure Connections的时候,则使用LE Secure Connections。否则,使用LE legacy pairing。

Authentication的选择:

总的来说归结为下面几句话:

• 如果双方都支持OOB Authentication,则选择该方式(优先级最高)。

• 如果双方都支持MITM Authentication,则根据双方的IO Capabilities(并结合具体的配对方法),选择合适的Authentication方式。

• 否则,使用Just Works的方式。

SPEC关于TK、STK、LTK的说明:

不同的Authentication获取TK的方式不同:

• OOB:get from OOB data.

• Passkey Entry: user input passkey.

• Just Works: zero.

LE key hierarchy流程图:

通过抓包工具观察整个配对流程大部分是在SMP(SECURITY MANAGER PROTOCOL)上进行的,这里注意一点,抓包工具需要事先配置好PIN码才能解释下面的数据。

当Initiator发起配对绑定后,协议栈主要有两个动作,从SMP上看,Initiatorr会发起一个Pairing Request PDU,Responder则会返回一个Pairing Response PDU。

从L2CAP层上也能找到对应的PDU,SPEC上也说明了SMP其实是在L2CAP层上的Protocol,所以这部分的解析跟SMP的是一样的,下面不再重复说明。

• Pairing Request PDU:

• Pairing Response PDU:

• Pairing Confirm PDU:

• Pairing Random PDU:

• Encryption Information:

• Master Identification:

• Identity Information:

• Identity Address Information:

蓝牙BLE协议栈基础知识

这次介绍一下蓝牙协议栈(BLE)的基础知识,蓝牙协议栈组成如下图所示,首先我们说说GAP和GATT

GAP层是负责连接的,其中包含广播、扫描、连接、断开的过程和参数

1.1 角色

蓝牙设备的角色主要有中心(Central)和外围设备(Peripheral)两种,中心设备向外围设备发起连接。链路层的主机(Master)和从机(Slave)的概念跟中心和外围的概念是对应的。

除了中心和外围之外,还有Observer和Broadcaster角色,Observer一直进行监听,Broadcaster一直进行发送,这两种角色都只广播,不能发起连接或者被连接,这里就不详细说了

1.2 广播

建立连接之前,外围设备每隔一段时间发送一个广播包,让正在扫描的设备知道这是一个可以连接的设备,扫描设备才能对外围设备开始连接,这个广播包的时间间隔叫advertising interval,这个间隔可以在10ms到10.24s之间,间隔的长短会影响建立连接所花时间。

中心要收到广播包之后才能发送连接请求,相应的,外围设备在发送广播包之后会等待连接请求。

蓝牙广播包最多可以包含31字节数据,包含设备名称和一些标志。中心收到广播包之后可以发送Scan Request以请求更多的广播信息,外围设备会回复一个同样是31个字节的Scan Response。

BLE有37个数据信道和3个广播信道,广播包,Scan Request,Scan Response使用广播信道

1.3 扫描

扫描是指中心监听广播包并且发送Scan request。扫描中有两个参数:Scan window(扫描窗口) 和Scan interval(扫描间隔)

1.4 发起连接

中心发起连接的过程类似于扫描的过程,中心收到广播包之后会发送一个连接请求给外围设备

1.5 连接

中心和外围设备连接上之后,中心会按照一定的连接间隔(Connection interval)向外围设备请求数据,这个间隔是由中心定的,在7.5ms到4s之间。

如果要提高吞吐量,可以在一个连接间隔中传输多个数据包,每个包最多可以包含20字节数据。如果要省电,并且外围设备并没有什么数据需要传输,可以跳过几个连接间隔,这称之为Slave latency。

如果外围设备没有在规定时间内响应中心的请求就会认为是连接中断,称之为Supervision Time-out(0.1s-32s),所以在使用Slave latency的时候要注意不要引起Supervision Time-out

这些参数是建立连接的时候中心确定的,如果建立连接之后外围设备想要更改,可以向中心发送Connection parameter update request。

整个数据交换的过程会在不同的频段中跳频(除了广播频段),跳频是自动完成的,不需要我们去管。

设备之间的数据传输是在GATT这层完成的

2.1 角色

除了GAP里面的角色,BLE在GATT里面也定义了两个角色,分别是GATT Server 和GATT Client,一般来说产生数据的设备是GATT Server,访问数据的设备是GATT Client,一个设备可以既是GATT Server也是GATT Client。这两个角色跟GAP中的角色并没有关系。

2.2 GATT结构

GATT Server通过属性表(Attribute table)来组织数据,

2.2.1 Attribute

上图中每一行就是一个属性Attribute。

每个属性具有一个handle,一个UUID,和一个Value。

Handle是Attribute的一个索引,每个Attribute的Handle都是唯一的。

UUID(universal unique identifier)表示的是Attribute中数据的类型信息。UUID在一个设备里面不是唯一的,可以有多个Attribute的UUID都一样

2.2.2 Characteristic

可以把Characteristic看作是上图中几行的集合(几个Attribute的集合)

每个Characteristic至少有两个Attribute,其中一个是声明,另一个包含数据。前面说过,蓝牙传输数据是通过GATT来传的,更具体的来说,是通过一个个Characteristic来传的。

2.2.3 Descriptors 描述符

Characteristic除了包含声明和数据之外,还可以有描述符(Descriptors,但不是必须有),Descriptors是用来进一步描述Characteristic(但不提供数据)的Attribute,比如说用自然语言描述该Characteristic是用来干什么的。

有一类特殊的描述符,叫CCCD(Client Characteristic Configuration Descriptor),支持Notify和Indicate的Characteristic 必须包含CCCD

2.2.4 Service

Service 是一个或者多个Characteristic的逻辑组合

一个GATT Service 通常包含了一些相关的功能,举例来说,一个人机界面Service包含了各种人机交互输入输出的数据,而其中的每个Characteristic 是一类信号或者设备

介绍几个常见的Service。

GAP GATT Service:作为Central或者Peripheral的BLE设备都需要有这个Service。这个Service包含了如何发现和连接设备的信息

Generic Attribute Service: GATT Server都要有这个Service,这个Service包含了GATT Server的信息

2.2.5 Profile

一个或者多个Service组合在一起称为Profile。Profile 是逻辑上的概念,自己并不具备单独的Attribute。

2.3 标准和自定义的Service和Characteristic

蓝牙联盟定义了一些标准的Profile, Service, Characteristic 和Attribute。由于Profile和Service是在具体应用中规定的,所以用户可以进行自定义

2.4 UUID

图2中每一个Attribute都有UUID,UUID是一个128位的数字,是用来描述Attribute的类型的

2.4.1 蓝牙联盟UUID

蓝牙联盟把UUID分为基础UUID(base UUID)和16位UUID。

蓝牙联盟规定的UUID都具有同样的base UUID:

0x0000xxxx-0000-1000-8000-00805F9B34FB

蓝牙联盟规定了一些16位UUID,替换掉base UUID中的xxxx就组成一个完整的128位UUID了。举例来说,0x2A37是一个16位Heart Rate Measurement Characteristic,那么对应的128位的UUID就是:

0x00002A37-0000-1000-8000-00805F9B34FB。

由于所有蓝牙联盟的UUID都具有同样的base UUID,所以用16位UUID就可以区分蓝牙联盟规定的Attribute了

但我们自定义的Attribute, Characteristic, Service,不能使用这个base UUID,因此也不能用16位UUID,只能使用制造商自定义的128位UUID。

2.5 空中接口操作和属性

由于每个Attribute具有唯一的Handle,所以几乎所有的操作都是通过Handle去完成,Characteristic常用的属性有:Write, Write without response, Read, Notify, Indicate。 Characteristic的属性决定了我们可以如何使用它

Write, Write without response

这两种属性允许GATT Client 对Server的characteristic的值进行写操作,两者的区别是Write without response对写操作不会有确认

Read

GATT Client可以读Server的Characteristic的值。

Notify 和Indicate

这两种属性表示的是当GATT Server 中该Characteristic 的值发生变化的时候会通知Client。两者的区别是Indicate 会进行确认但Notify不会

接下来举例说明一下前面介绍的概念

Thingy 的Services,作为Server需要有GAP Service和GATT Service,另外还有一个标准的Battery Service,后面是几个自定义的服务

详细的看看GAP Service,这个服务的Handle是1到9,那么把这些Characteristics和Attribute都打出来

可以看到这个Service的结构是这样的

这是一个标准的Service,使用标准Service/Characteristic的时候要符合蓝牙SIG对这个Service/Characteristic的规定,我们可以到 蓝牙SIG 看看是不是一致

以上就是BLE的一些基础知识和示例