一文读懂蓝牙BLE体系架构(蓝牙ble技术的原理)
nanshan 2024-11-14 16:38 36 浏览 0 评论
蓝牙BLE(Bluetooth Low Energy),又称 Bluetooth Smart,是由蓝牙 SIG 提供的一个低功耗无线标准,其工作频带为2.4GHz ISM。下图展示了BLE 协议栈架构。
BLE 协议栈可分为以下三部分:
? 控制器:它是一个物理器件,用于编码数据包,并把该数据包作为无线信号进行传输。作为接收端使用时,控制器对无线信号进行解码,并重新构建数据包。
? 主机:包括各种协议和配置文件(安全管理器、属性协议等),用于管理两个或多个器件间相互通信的方式。
? 应用:指的是一个使用场合,其通过使用软件协议栈和控制器执行特定功能。
下面各节是对 BLE 协议栈中各层的简介,并使用了标准的心率和电池服务作为示例。
1. 物理层(PHY)
蓝牙BLE物理层使用了高斯频移键控(GFSK)调制方式在2.4GHz ISM 频带上发送和接收数据,数据速率为 1 Mbps。BLE 物理层将 ISM 频带分为 40个 RF 通道(通道间隔为 2 MHz),其中有37个数据通道,剩下为3个广播通道。
2. 链路层(LL)
链路层通过执行关键流程来建立一个可靠的物理链路(通过使用确认和基于流控的架构),并用于增强BLE协议安全性和降低功耗。下面列出的是链路层的几项功能:
? 广播、扫描、创建和保持连接,用以建立物理链路。
? 24 位CRC和128位AES加密,用于执行稳定安全的数据交换。
? 为低功耗操作创建快速连接和低占空比广播。
? 自适应跳频(AFH),它改变了用于数据包传输的通信通道,从而降低了其他器件的干扰。
在链路层可定义两部分内容:
? 主设备:以智能手机为代表。
? 从设备:以心率监视设备为代表。
链路层从设备将它的存在信息广播给另一个链路层主设备,该信息中可带少量自定义负载数据。链路层主设备会接收广播数据包,然后根据具体应用的要求选择需要连接的从设备。在心率监示器的应用中,心率监示器作为从设备使用,它将数据发送给作为主设备的智能手机。这时,智能手机APP将显示其接收到的心率数据。
一般蓝牙BLE器件的硬件部分只执行链路层中对时间要求严格并且处理器密集型的任务,如广播、CRC以及AES加密,而链路层控制操作(如进入广播状态和启动加密)都是通过软件固件实现的。
下图展示的是蓝牙BLE链路层数据包的结构以及链路层数据包中各字段的大小。链路层数据包将所有上层数据保存在其负载域内。它具有一个 4 字节的访问地址,可用于识别物理链路上进行的通信,并会忽略正在同一个射频通道中运行的相邻蓝牙BLE器件的数据包。其中,24位CRC校验保证了数据的可靠无误。
3. 主机控制接口(HCI)
HCI是主机与控制器间的标准定义接口。通过它,主机和控制器能够以不同的物理传输方式(如USB或UART)交换命令、数据和事件等信息。该层仅在控制器和主机为不同的器件时才需要进行真正的物理传输。而对于SoC器件,单芯片集成主机和控制器,HCI仅作为一个固件协议层用于控制器和主机间信息和事件的传输。
4. 逻辑链路控制及适配协议(L2CAP)
L2CAP为上层协议提供了协议复用、分段和重组服务。分段功能会将接收到的来自上层的数据包分为链路层可传输的更小的数据包,而重组功能会将接收到的来自链路层的小数据包结合成一个有意义的上层数据包。L2CAP层为属性协议(ATT)、安全管理器(SM)和 L2CAP控制提供三个协议通道,如下图所示。蓝牙4.2通过这些协议通道下的L2CAP所提供的定向连接进行直接的数据通信。
5. 安全管理器(SM)
SM 层定义了用于配对、加密和秘钥分配的方法。
? 配对是激活安全校验的过程。在该过程中,会验证两个器件,对其链接进行加密,然后交换加密密钥。这样可以通过BLE接口安全交换数据而不会被射频通道上的无线监听器窃听。
? 绑定是一个过程,其中密钥和识别信息在配对过程中被交换和保存。器件绑定完毕后,重新连接这些器件时不需要再次进行配对过程。
蓝牙BLE使用了128位AES对数据进行加解密。
6. 安全管理器(SM)
SM 层定义了用于配对、加密和秘钥分配的方法。
? 配对是激活安全校验的过程。在该过程中,会验证两个器件,对其链接进行加密,然后交换加密密钥。这样可以通过BLE接口安全交换数据而不会被射频通道上的无线监听器窃听。
? 绑定是一个过程,其中密钥和识别信息在配对过程中被交换和保存。器件绑定完毕后,重新连接这些器件时不需要再次进行配对过程。
蓝牙BLE使用了128位AES对数据进行加解密。
7. 属性协议(ATT)/通用属性配置文件(GATT)
为了了解ATT和GATT层,首先应该了解蓝牙BLE中GATT的两种使用场景:
? GATT服务器:指包含数据或信息的设备。它接收GATT客户端设备的请求,并提供数据进行响应。例如,心率监示器的GATT服务器包含心率信息,BLE HID 键盘的GATT服务器包含用户按键信息。
? GATT客户端:指向GATT服务器发送请求和/或接收数据的设备。例如,智能手机是接收心率服务器心率信息的GATT客户端,手提电脑是接收BLE键盘按键信息的GATT客户端。
ATT构成了BLE通信的基础,其规定了在BLE中的最小数据存储单位,而 GATT规范则定义了如何用特性值和描述符表示一个数据,如何把相似的数据聚合成服务 (Service),以及如何发现对端设备拥有哪些服务和数据。该协议使得GATT客户端能够在GATT服务器中找到数据和属性并访问它。
这里,属性包含的是ATT/GATT内的基本数据,它包含了以下内容:
? 属性句柄:一个16位的地址,用于寻址和访问某项属性。正如我们可以使?内存地址查找内存中的内容一样,ATT属性的句柄也可以协助我们找到相应的属性,例如第一个属性的句柄是0x0001,第二个属性的句柄是0x0002,以此类推,最大可以到 0xFFFF。
? 属性类型:用于指定在某项属性中储存的数据类型,该类型是应用层面的类型,而不是存储长度层面(比如整形、字符型或者浮点型)的类型。每个数据有自己需要代表的意思,例如表示温度、发射功率、电池等等各种各样的信息。蓝牙组织 (Bluetooth SIG)对常用的一些数据类型进行了归类,赋予不同的数据类型不同的标识码 (UUID)。例如0x2A09表示电池信息,0x2A6E表示温度信息。UUID可以是16比特的(16-bit UUID),也可以是128比特的(128-bit UUID)。
? 属性值:属性值是每个属性真正要承载的信息,其他3个元素都是为了让对方能够更好地获取属性值。有些属性的长度是固定的,例如电池属性(Battery Level)的长度只有1个字节,因为需要表示的数据仅有0~100%,而1个字节足以表示1~100的范围;而有些属性的长度是可变的,例如基于 BLE 实现的透传模块。
? 属性许可:每个属性对各自的属性值有相应的访问限制,比如有些属性是可读的、有些是可写的、有些是可读又可写的等等。拥有数据的一方可以通过属性许可,控制本地数据的可读写属性。
下图展示的是一个器件名称属性结构示例。
(1) 属性层次结构
由于在某些时候一个数据可能并不只是单纯的数值,还会带有一些额外的信息:比如这个数据的单位是什么?是重量单位千克kg、温度单位摄氏度℃,还是其他单位;比如希望具体告知对方这个数值的名称,例如同为温度属性UUID下,希望告知对方该数据表示“主卧温度”,另一个数据表示“客厅温度”;比如在表示230000、460000等大数据时,可以增加指数信息,告知对方该数据的指数是10^4,这样仅需在空中传递23、46 即可。
上述内容仅为清楚描述一个数据众多需求中的几个例子,实际应用中还可能出现其他以各种方式表达数据的需求。在此背景下,GATT规范引进了描述符的概念,每种描述符可以表达一种意思,用户可使用描述符,描述数据的额外信息。必须说明的是,每个数据和描述符并非一一对应,即一个复杂的数据可以拥有多个描述符,而一个简单的数据可以没有任何描述符。数据本身的属性值及其可能携带的描述符,构成了特性的概念。
? 特性(Characteristic):显示系统信息或有意义的数据的属性集。一个特性包括以下各属性:
特性声明:其定义了一个特性的开始。
特性值:其保存了实际数据。
特性描述符:其是可选属性,提供了特性值的其他信息。
“电池电量”是电池服务(BAS)中的一个特性示例,它以百分比的形式显示电池电量。
下图展示的是一个特性结构,并以电池电量特性进行说明展示。
特性的第一部分是特性声明(它表示特性的开始),例如上图中的电池电量指示特性声明。
后面是实际的特性值或实际数据,在电池电量特性示例中表示当前电池的电量。电池电量按全量程的百分比形式显示,如“65”、“90”等。
特性描述符提供了额外信息,用于描述特性值的意义。例如,电池电量的特性描述符指明电池电量被表示为一个百分比值。因此,读取“90”时,客户端会将其理解为90%,而不是90 mV或90 mAh。同样,有效范围特性描述符(未在上图中显示)表示电池电量的范围为0至100%。
通常,一个客户端特性配置描述符(CCCD)也可作为特性描述符使用,这样通过GATT客户端可以配置GATT服务器的特性行为。当GATT客户端将0x01值写入到某个特性的CCCD内时,便能够使GATT服务器发送异步通知(将在下一部分进行描述)。在电池电量特性中,将0x01值写入到电池电量CCCD内会使电池服务定期通知它的电池电量或电池电量值发生的所有变化。
蓝牙BLE协议中会把一些常用的功能定义成一个个的服务(Service),例如把电池相关的特性和行为定义成电池服务(Battery Service),把心率测试相关的特性和行为定义成心跳服务(Heart Rate Service),把体重测试相关的特性和行为定义成体重服务(Weight Scale Service)。
? 服务(Service):其定义了由GATT服务器所执行的功能,是一个特性集。其也可能包含其他服务。服务用于建立相关数据组并提供数据的层次结构。下面将以心率服务(HRS)为例进行说明。
服务可分为两种类型:主要服务或辅助服务。主要服务显示了器件的主要功能,而辅助服务则提供了额外功能。例如,在心率监示器中,心率服务是主要服务,电池服务是辅助服务。
一个服务还可以包含 GATT 服务器上存在的其他服务。所包含的全部服务组成新服务的一部分。
蓝牙BLE中的“配置文件”(Profile)指的是一个服务集和这些服务共同执行某个特定终端应用时的行为。心率配置文件(HRP)是BLE配置文件的一个示例,该BLE配置文件定义了创建心率监示器所需要的所有服务。
下图展示的是属性数据的层次结构,该数据层次结构使用了这里所定义的属性、特性、服务和配置文件。
(2) 属性操作
通过以下五种基本方法,能够访问前面所定义的属性:
? 读取请求:GATT客户端将该请求发送给GATT服务器以读取属性值。对于所有请求,GATT服务器会向GATT客户端回复一个响应。例如智能手机读取心率监示器的电池电量。
? 写入请求(Write Request):GATT客户端向GATT服务器发送该请求以写入一个属性值。GATT服务器会向GATT客户端回复响应,以表示是否成功写入了该值。例如智能手机会将数值0x01写入到表示电池电量特性的CCCD内,以使能通电量通知。
? 写入命令(Write Command):GATT客户端向GATT服务器发送该命令以写入一个属性值。对于该命令,GATT服务器不会回复任何响应。例如,BLE即时警报服务(IAS)中的IAS定位器(例如智能手机)使用写命令触发目标器件(例如密钥卡)上的警报(打开 LED、使蜂鸣器报鸣、驱动振动电机等)。
? 通知(Notification):GATT服务器将其发送给GATT客户端,从而通知属性新值。GATT客户端不会对一个通知回复任何响应。例如,将数值0x01写入到心率监示器的 CCCD 内时,该心率监示器会向智能手机发送心率测量通知。
? 指示(Indication):GATT服务器负责发送该类型的信息。GATT客户端始终会确认该信息。例如,BLE健康温度计服务(HTS)使用各种指示可靠地向健康温度计收集器(如智能手机)发送所测量的温度值。
在了解了属性的层次架构和操作方法后,下面以心率监测设备为例展示GATT层上的客户端-服务器架构。该心率监示器提供了多项服务(HRS、BAS和器件信息服务)。每项服务都包含一个或多个带有特性值和描述符的特性,如下图所示。
在链路层级别建立BLE连接后,GATT客户端(最初并不了解已连接的BLE器件)会启动一个被称为“服务发现”的过程。作为服务发现过程的一部分,GATT 客户端会向GATT服务器发送多个请求,从而获取GATT服务器中包含了所有可用服务、特性以及属性的列表。服务发现过程完成后,GATT客户端将具有所需信息,从而通过使用前面章节所介绍的属性操作来修改或读取GATT服务器所具有的信息。
8. 通用访问配置文件(GAP)
GAP层提供了设备特定的信息,如设备地址、设备名称以及发现、连接、绑定的各种方法。配置文件(Profile)定义了一个设备的发现和连接方法、可用服务的列表,以及服务的使用方式。
GAP可以按照下面四种方式之一进行操作:
? 广播员(Advertiser/Broadcaster):其作为一个发送器,用于发送数据。该功能不能实现BLE连接和进行数据交换(无请求/响应操作),它的工作原理类似于一个广播电台:它会不断发送数据,却无需关心是否有人收听,它进行的是单向数据通信。信标(Beacon)是GAP广播员的典型示例,它会不断播放信息而无需任何响应。
? 观察员(Observer):作为一个“听众”,它会扫描广播,但不会被连接到广播的设备。观察员角色与广播员角色完全相反,它的工作原理类似于一个无线收音机,可以一直收听信息而不会向信息源发送任何响应。智能手机中可连续监听各种信标的应用便是一个GAP观察器的典型示例。
? 外设(Peripheral):其起着广播作用,使设备能够连接至GAP中心。当广播者接受了观察者发来的连接请求后就会进入这种角色。当设备进入了这种角色之后,将会作为从设备 (Slave) 在链路中进行通信。例如,心率传感器会将所测量的心率报告给远程设备,使之作为一个GAP外设进行操作。
? 中心(Central):当观察者主动进行初始化,并建立一个物理链路时就会进入这种角色。其作为GAP使用,用于扫描广播和启动同外设间的连接。建立与外设的连接后,该GAP作为主设备(Master)运行。例如,智能手机作为GAP中心接收心率传感器外设的心率测量数据。
上图展示的是一个通用蓝牙BLE系统,其中,开发套件作为外设,智能手机作为中心设备。该图还说明了各BLE协议层间的交互以及它们在中心设备和外设中所起的作用。
上图展示了另一个示例,带有心率APP的智能手机作为中心设备,心率传感器作为外设。监示心率的设备将执行心率传感器的配置文件,而接收数据的智能手机会执行心率收集器的配置文件。
在上述示例中,心率传感器配置文件实现了两项标准的服务。第一项是心率服务,它包含三项功能,分别为心率测量功能、身体感应位置功能和心率控制点功能。第二项是设备信息服务。在链路层上,心率测量器件作为从设备,智能手机作为主设备。
点关注,不迷路,关注公众号: eeemaker小王子 获取更多
相关推荐
- 教你一个解决手机卡顿的方法(10秒解决手机卡顿问题)
-
我们的手机天天刷头条,看视频,用了一阶段时间以后,就时不时的发生卡顿现象。昨天我的手机就发现了这个问题。友友们,你们遇到过这样的问题吗?你们都是怎样解决的?我看了一眼我的粉丝情况,头条君给我分析的很精...
- 手机视频缓存清理,3步彻底清空,告别卡顿
-
在我们使用手机观看视频的过程中,经常会产生大量的缓存垃圾,这些垃圾文件不仅占用了手机的存储空间,还可能导致手机卡顿和运行缓慢。然而,你知道如何彻底清空手机的视频缓存,让手机恢复流畅的使用体验吗?在本文...
- 关手机这个开关,轻松提升流畅度!
-
关闭手机这个开关,跟新买的一样流畅。手机不要再清理垃圾了,只要关闭这个开关,手机就会和新买的差不多,丝滑流畅不卡顿。其实抖音里就隐藏着一个小开关,每天刷过的视频都会保存在手机里,如果一直不清理,手机就...
- 如何清理今日头条和西瓜视频的内存,让手机流畅不卡顿?
-
对于老年人而言,今日头条和西瓜视频能带来丰富的资讯与娱乐。然而,随着使用时间的增加,这些应用会占用大量手机内存,致使手机运行卡顿。那该如何解决呢?接下来,我将用最简单易懂的方式教老年人清理今日头条和西...
- 视频在线如何转换格式?好用不卡顿的三种转换办法
-
转换视频格式目前来说已经是很熟练的操作了,但是还有些用户可能还是不知道,小编今天就特意给大家带来一些小众才知道的转换教程,让新手也能快速的上手去转换视频格式,以后获取到视频就不怕内容丢失了,视频的格式...
- 如何把视频慢放处理?这几个慢放方法记得收藏
-
如何把视频慢放处理?如果你想让视频慢放,可能是因为你想放慢一些精彩的瞬间,或者你想制作一个慢动作视频。在这篇文章中,我们将介绍一些调速方法,这些方法可以有效地调整视频速度,一起来学习一下吧。方法一:使...
- 如何清理看过的视频,释放垃圾,让手机更流畅?
-
现在谁的手机上没几个短视频平台,无聊时就会刷别人的视频。可您知道吗?我们看过的内容都会被自动保存在手机里,而且很耗内存。如果长时间不释放,手机就会出现各种问题,其中最突出的就是反应慢。相信很多老年人的...
- 手机掉帧是怎么回事?刷视频的时候经常掉帧卡顿
-
手机掉帧是指在运行应用或视频时,画面出现卡顿、不流畅的现象,通常由硬件性能不足、软件优化不佳、内存占用过高、网络问题或设备过热等因素引起。尤其是在刷视频时,掉帧问题可能更为明显,以下是具体原因及解决方...
- 拍视频画面卡顿不流畅,原来是相机设置错误 #短视频拍摄
-
拍摄视频时,应该选择哪种快门速度?许多新手朋友可能会认为,快门速度越高,画面就越清晰,实则不然。因为拍摄视频时,需要考虑一个问题,即动态模糊。例如,如果设置为24帧/秒,那么每秒钟会拍摄24张图片。如...
- 手机卡顿最大原因#视频太卡怎么变流畅
-
抖音这几个开关是手机卡顿的最大原因。你是不是也会经常遇到刷视频的时候,打开一个视频之后老半天还在那转着圈圈,总觉得手机没有之前流畅了。这就说明你的手机占用的内存太多了,导致手机卡顿,使用不流畅。使用手...
- 为啥你家的玩游戏和刷视频经常性的会卡,那是你不懂这些小妙招
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:暴走的黄小猪说到网速有不少的值友都有一个共同点,那就是“卡”,那是你根本没体验过啥叫真正的网速啊,全屋零四条网络报表也花不了几个钱你们的方法...
- 电脑看视频卡顿有什么解决方法?(电脑看视频画面卡顿是什么原因)
-
电脑看视频卡顿的原因可能多种多样,包括硬件性能不足、网络问题、软件设置不当等。以下是一些常见的解决方法,帮助你改善视频播放的流畅度:一、硬件方面1.检查硬件性能:如果电脑配置较低,尤其是CPU、内存或...
- 手机Wi-Fi满格但视频卡顿,你需要这样解决
-
累了一天的打工人回家拿出手机准备玩玩游戏,看看电影时,发现网络异常卡顿,但手机又显示Wi-Fi信号满格,当咱们遇到此类问题时,这些动作能让网络恢复正常,方法如下。一、重启路由器和光猫很多家庭在安装好路...
- 视频越刷越卡?原来是路由器开启了这个功能,关闭方法来了
-
应该很多小伙伴都有过类似的经历,就是在家里长时间刷视频或者看剧的时候,网速好像会越来越慢,视频总是要加载。手机本身可能是一部分原因,但路由器也会影响,你知道吗?当我们在刷视频的,路由器会悄悄地开启大量...
- 一招解决视频卡顿的问题,改变发布渠道后,结果香了
-
最近一段时间拍了很多美景视频,编辑发布到头条后,有时一直显示在缓冲,播放不了,有时打开断断续续的,老是卡顿。导致的后果是:要么展现量很低,要么阅读量寥寥无几,这让我非常苦恼。所以再发布作品时,我只好文...
你 发表评论:
欢迎- 一周热门
-
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WindowsServer2022|配置NTP服务器的命令
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
【系统配置】信创终端挂载NAS共享全攻略:一步到位!
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)