[BLE]低功耗蓝牙介绍

2023-05-16

一、BLE的协议栈框架

        BLE协议栈包括两个部分,主机(Host)和控制器(Controller)。二者通过HCI(Host Controller Interface)标准接口相互通信。常用的单芯片单模BLE芯片有TI的CC254X、CC26xx,nordic的NRF51288,dailog的DA14580等等,双芯片的双模BT有TI的CC2564。


      NRF52832吊炸天啊~~~~~  

      协议栈整体结构图如下:


        主机是一个逻辑实体,定义包括应用层以下,HCI以上的配置文件(Profile)、通用访问协议(GAP)、通用属性协议(GATT)、属性协议(ATT)、安全管理协议(SMP)、逻辑链路控制适配层(L2CAP)、HCI驱动各层。控制器也是一个逻辑实体,定义HCI层以下的HCI固件、链路层(LL),物理层(PHY)各层。


三、协议栈各层介绍

1、物理层规范(PHY)

        射频方面,BLE工作在免费的2.4GHz ISM(Industrial Scientific Medical)频段,其频带是2400 -2483.5MHz,BLE的调制方式是高斯频移键控(GFSK),BT=0.5,而标准蓝牙技术是0.35,0.5的指数接近高斯最小频移键控(GMSK)方案,可以降低无线设备的功耗要求(这方面的原因比较复杂)。更低调制指数还有两个好处,即提高覆盖范围和增强鲁棒性;二进制“1”和“0”分表表示正频偏和负频偏,在使用频谱仪(N9020A)测试频偏时需要提前知道其背离频率;发射功率范围在-20dBm~+10dBm之间(天线增益为0dBi情况下);误比特率为0.1%的情况下,接收灵敏度小于-70dBm;通信距离可到达100m;传输速率为1Mbps;数据包间对中心频率的偏移应当小于±150kHz,其中包括了初始的频率补偿和频率漂移;在一个数据包内,频率偏移应当小于150kHz,最大的频率偏移率不能超过400Hz/us,一般要求在±20PPM以内即可。

        相对于传统蓝牙而言,传统蓝牙可以增强数据率,可支持2或3Mb/s的总空气比特率。这些模式分别被称为基本速率(BR)和增强数据率(EDR)。定义了两种调制模式。强制模式被称为基本速率,使用一个成型的二进制FM调制从而将收发器的复杂程度降至最低。可选模式被称为增强数据率,使用PSK调制并存在两个变量:π/4-DQPSK和8DPSK。所有调制程序的符号率是1 Ms/s。就总空中传输数据率而言,基本速率为1 Mbps,使用π/4-DQPSK的增强数据率为2 Mbps,而使用8DPSK的增强数据率为3 Mbps。

        信道结构方面,BLE系统采用跳频收发机提供多个跳频序列载波,抵抗干扰和衰减。BLE信道分为广播信道与数据信道,数量分别为3和37。系统提供两种复用方案:频分多址和时分多址。在频分复用方案中,40个信道间的频率间隔为2MHz,中心频率分别为2402+k*2MHZ,其中k是0—39之间的任意整数,k等于0,12,39时信道为广播信道,其他值时为数据信道;在时分复用方案中,两个正在通信的设备,通过轮训的方式在预定好的时间单元中收发数据。数据传输是采样自适应跳频的方式在37个数据传输信道中传输有效数据包,该技术主要是为了防止单一信道堵塞而导致的问题。

    1)为什么选择3个信道作为广播信道?(2.402GHZ、2.426GHZ、2.480GHZ

    在BLE进行广播时,三次传输分别利用了三个不同的频率进行,以提高鲁棒性。选择数字3其实就是为了鲁棒性和低功耗之间求得平衡。在BLE中,如果频率的数量只有一个,那么像其他技术那样只有该频率被阻塞,整个系统将无法工作;如果频率太多,比如16个,该设备将花费大量的时间进行广播数据的传输,将不再是“LE”设备。并且在BLE协议栈实现的代码中,广播数据包的大小也有严格的要求,最大包长度不能超过31,这就是为了减小在单次传输过程中实现LE的结果,所以广播数据包尽量短小。

    2)蓝牙设备寻址

    蓝牙设备获分配一个独一无二的48位蓝牙设备地址(BD_ADDR),这个地址来自IEEE Registration Authority。

    3)待补充

    。。。。。

2、链路层规范(LL)

    1)链路层的功能

        链路层使用链路协议来控制网络中设备的状态,并且提供管理下层的服务。低功耗蓝牙设备有五个工作状态,分别是:待机状态、广播状态、扫描状态、初始化状态、和连接状态。链路层控制器一个时刻内只允许设备处于上述5个状态之一。

        待机状态:默认状态,不能发送接收任何数据包,任何其他状态都可以直接进入待机状态。

        广播状态:广播状态可由待机状态切换进入,设备在3个广播信道发送广播数据包,同时在当前信道监听和回复扫描者可能发送的扫描数据包。处于广播状态下的设备称为广播者。

        扫描状态:扫描状态可由待机状态切换进入,设备在3个广播信道监听远程设备发出的广播数据包,同时发送扫描数据包,等待广播者的扫描回复信号。处于扫描状态下的设备称为扫描者。

        初始化状态:初始化状态可由待机状态切换进入,设备在广播信道监听回复远程设备的广播数据包,从而发起设备之间的连接。处于初始化状态下的设备称为发起者。

        连接状态:连接状态可以从初始化状态和广播状态进入,此时发起者作为主设备,确定传输时隙,广播者作为从设备,双方在数据信道以跳频的方式进行数据传输。

2)链路层数据包结构

        无论是广播信道或者数据信道,链路层仅仅只有一种数据包结构,格式如下所示。

前导码             

(1字节)   [LSB]

接入地址

(4 字节)

协议数据单元

(2~39 字节)

循环冗余码校验

(3 字节)

        数据包由前导码,接入地址,协议数据单元和循环冗余码校验四部分组成。由于低功耗蓝牙采用短包技术,数据包的长度范围为80位~376位,可以较大程度降低功耗。下面将对各部分进行详细说明。

        前导码:前导码共有1个字节,用于接收机执行频率同步、符号定时判断和自动增益控制。广播信道数据包的前导码固定为10101010b;数据信道数据包根据接入地址首位的不同而不同,若接入地址首位为1,则前导码为01010101b,反之为10101010b。

        接入地址:所有广播信道数据包的接入地址都为0x8E89BED6;数据信道中接入地址是在初始化状态下产生,来自连接请求数据包接收到的24位随机数,这个随机数应该确保满足以下条件:

1)       不能超过连续6个1或者0;

2)       不能和广播信道数据包的接入地址一样;

3)       必须2位及以上不同于广播信道数据包接入地址;

4)       不能有相同的4字节;

5)       不能超过24个转折点;

6)       在6位最高位中,至少要有2个转折点。

        协议数据单元:大小为2字节~39字节,根据不同数据包类型而不同。

3)广播信道协议数据单元:由包头和有效荷载2部分组成。具体格式如下表所示。

包头(16位)

有效荷载 

PDU类型

RFU

TxAdd

RxAdd

Length

RFU

(由包头中的长度位标志)

    其中PDU类型如下表所示。

PDU 类型

数据包名称

0000

ADV_IND

0001

ADV_DIRECT_IND

0010

ADV_NONCONN_IND

0011

SCAN_REQ

0100

SCAN_RSP

0101

CONNECT_REQ

0110

ADV_SCAN_IND

0111-1111

Reserved

4)数据信道协议数据单元:由包头、有效荷载和可选的信息完整性检查(MIC)组成,格式如表2‑5所示。信息完整性检查在没有加密的链路连接,或者加密了但数据协议数据单元长度为0的情况下使用。LL DataPDU 是用来发送L2CAP数据,而LL Control PDU是用来控制连接链路的。

        数据信道协议数据单元格式如下表所示

包头(16位)

有效荷载 

信息

完整性检

(32 位)

LLID

NESN

SN

MD

RFU

Length

RFU

LL DATA PDU

LL Control PDU

        CRC:3字节的CRC是根据PDU计算的。如果PDU已加密,则CRC根据加密后的PDU计算。CRC多项式的形式自行百度。对于任一个广播信道PDU,移位寄存器应该预设为0x555555;对于每一个数据信道PDU,移位寄存器的预设值在连接状态时,从连接请求PDU中得出。

3、HCI规范

        HCI是连接主机和控制器的桥梁,提供主机访问下层协议、硬件和控制寄存器的统一接口。HCI实际为三部分:HCI 固件、HCI驱动和实际物理接口。

        HCI固件:HCI固件位于蓝牙控制器中,固件主要内容有:中断向量表、堆栈设计、初始化程序和蓝牙处理程序。HCI固件通过访问控制硬件状态寄存器、控制寄存器、事件寄存器、基带命令和链路管理命令执行HCI命令。蓝牙系统的MCU在蓝牙处理程序控制下,会读取来自上层协议栈的命令,然后根据命令配置基带层的相应寄存器。反之基带层接收到信息后反馈给MCU,MCU通过HCI物理接口递交这些信息至上层协议栈,上层协议栈根据这些信息,再产生新的命令进行处理。

        HCI驱动:HCI驱动位于蓝牙主机中,也就是协议结构中HCI软件驱动部分。当某个事件触发时,控制器通过事件方式通知主机,主机则接收该事件的异步通知。当主机发现有事件发生时,它将分析收到的事件包并判断事件类型,做出相应的处理。

        实际物理接口:作为HCI接口的实际物理实体,位于HCI固件和HCI驱动的中间层,提供可靠的数据传输。蓝牙控制器与主机可以使用不同的数据传输方式进行通信。不同通信方式的数据格式在实际硬件接口均具有特定的封装格式,但是经过HCI层的封装统一,不同类别的通信方式并不会造成主机接收到的HCI事件异步通知无法相互识别的情况。常用的物理接口有USB、UART和RS232三种。下图表示UART作为HCI接口时,主机与控制器的连接图。


4、其他上层协议规范

1)逻辑链路控制适配层(L2CAP)规范

        逻辑链路控制适配层位于主机中,采用了协议复用和数据包分段重组技术,负责向高层协议栈提供面向连接的数据服务。它允许高层协议收发数据长度为64K字节。

        协议复用技术:因为基带不能够识别全部高层协议的类型标志,所以位于基带上层的逻辑链路控制适配层必须支持识别不同的高层协议。

        分段和重组:由于基带定义的空中数据包大小被限定在一定的范围,所以来自上层的较大数据到达逻辑链路控制适配层后,必须进行重新封包成多个小型基带数据包,以适应空中传输规则。相反的,当基带接收到空中包传输到逻辑链路控制适配层后,需要将数据包重组成一个较大的逻辑链路控制适配层数据包,再传输到上层协议。

2)通用访问协议(GAP)规范

        通用访问协议规范表示蓝牙设备基本功能,包括工作模式和访问过程。低功耗蓝牙的工作模式有四种,广播、扫描、周边外设和中心主设备。在指定时间,设备只能处于四种模式之一。访问模式包括设备发现、连接模式、认证、服务发现等。

3)属性协议(ATT)规范

        属性协议规范将连接中的设备区分成两种角色,即客户机和服务器。客户机与服务器通过固定逻辑链路控制适配层信道通信。客户机发送指令,请求和确认信息至服务器;服务器发送回复,通知和指示至主机。

4)安全管理协议(SMP)规范

        安全管理协议产生加密密钥和识别密钥,同时也管理密钥的存储,负责产生随机的地址并通过地址识别设备。在数据加密和配对的过程中,安全管理协议将密钥发送至控制器。

5)通用属性协议(GATT)规范

        通用属性协议用于建立数据传输时常用操作和框架。通用属性协议同属性协议一样分为客户机与服务器两个角色。服务器存储属性协议上传输的数据,并且接收来自属性协议上传的请求、指令和确认信息,处理好请求配置好后,则发送指令和通知至客户机。同时,通用属性协议定义了包含在服务器中的数据,即各式服务、关键词。

四、总结

        在BLE协议栈的应用开发过程中,整个协议栈一般有各个半导体公司自己开发好,并封装成特定的demo以后供用户使用。整个代码架构遵循二八原则,协议栈抽象成应用底层框架(Framework),半导体公司完成应用开发的80%,剩下的20%则以回调(callback)和接口的方式供应用开发人员调用以实现具体的功能。

        BLE的出现是为了实现连接后的数据通信和控制,其初衷是为了完成较少量的数据通信,侧重于通信控制。所以我们可以理解BLE的协议栈包括两大组成部分:一个是BLE连接;另一个是BLE数据传输。前者即对应GAP(General Access Profile),后者对应GATT(General Attribute Profile)。Profile在蓝牙术语里面对应于特定的应用协议规范(可以自己安装标准规范编写实现特定功能的Profile)。

        Framework应该完成应用开发的80%工作,剩下20%则是由各个具体应用的具体场景需求来决定的。例如,蓝牙底层连接时怎么握手,应用开发人员不需要关心吧;GATT的characteristics value值的通信过程,不要关心吧。当蓝牙外设有新的数据要传输给主设备时,只需要调用notify或者indicate接口就可以了,至于底层怎么实现,那是协议栈开发人员的工作!

        上述仅仅是做一个简要的概括,关于BLE协议栈实现过程中的很多细节问题都没有涉及到,很多东西都需要研究具体的协议栈代码,关于PDU、MTU、payload以及数据传输耗时、连接间隔、从机延时、IOS端的限制等等会单独写一篇博客。

参考:1)蓝牙技术联盟官网

            2)Bluetooth开发者门户


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[BLE]低功耗蓝牙介绍 的相关文章

  • 汇承4.0蓝牙BLE串口助手HC-COM的使用方法及出错的原因和改正方法

    本文主要介绍在使用汇承4 0蓝牙BLE串口助手HC COM xff0c 通过手机向蓝牙模块发送数据 或者通过手机向与蓝牙模块连接的单片机发送指令时 xff0c 串口中断函数的编写方法及出错的原因和改正方法 我们怎么把指令发送出去 xff0c
  • [BLE]低功耗蓝牙之GAP、GATT

    一 开篇 本篇主要介绍一下关于BLE开发过程中必须了解的两个协议 xff1a GAP xff08 通用访问协议 xff09 GATT xff08 通用属性协议 xff09 两个协议都隶属于Host层 xff0c 直接关系到应用层开发 xff
  • BLE Mesh(六)配网流程

    配网流程 概述配网协议配网承载层 Provisioning Bearer 配网协议 Provisioning Protocol 流程详解发送Beacon信号邀请交换公共密钥认证输出带外 xff08 Output OOB xff09 输入带外
  • 蓝牙5.1的ble那些事儿

    到这里 对于非连接状态应该有一些新的认识了 接下来 顺其自然当然就是连接了 你谈对象 忙活半天 当然是想干点什么事情了 当然也有老司机翻车 连接上后 一端要主动向另一端发起问候 否则长时间不联系 那么就断开好了 主动问候的一端我们称之为ma
  • 蓝牙BLE---DA14683的SPI主机通信讲解

    DA14683的SPI主机通信例程 Date 2018 12 19 Create Jim 导入例程 首先导入ble peripheral例程或者pxp reporter例程 再到以下位置打开硬件SPI的宏定义 xff1a 获取SPI例程源码
  • BLE中的Service(服务)和characteristic(特征值)

    Service 服务 和characteristic 特征值 之间的关系 Service 服务 服务是用来完成特定功能或特性的数据和相关行为的集合 在GATT中 服务由其服务定义来定义 服务定义可能包含所包含的服务 强制性特征和可选特征 可
  • ESP32-C3 学习测试 蓝牙 篇(四、GATT Server 示例解析)

    了解了蓝牙 GATT 相关概念 趁热打铁 分析一下官方示例 GATT Server 的应用程序架构 目录 前言 一 GATT Server 示例分析 1 1 初始化 1 2 回调函数 gatts event handler gap even
  • ESP32-C3 学习测试 蓝牙 篇(七、GATT 数据通信 — 发送自定义数据)

    前面我们已经入门了 GATT 的开发 更进一步 进行想要的数据通信 目录 前言 1 通信问题思考 2 如何才能每次传输不同的数据 3 对 handle 的认识 4 继续尝试 5 测试成功 结语 前言 本来计划直接做一个蓝牙的小应用 首先得实
  • CC2642 数据长度扩展(LE Data Length Extension)

    概要 数据长度扩展 LE Data Length Extension 功能允许LE控制器在连接状态下发送具有高达251字节的PDU 在连接期间的任何时刻 主从设备可以协商该PDU大小 这个和MTU不同 MTU是应用层的数据传输长度 这个是链
  • BLE 和 Zigbee 肉眼读数(更新ing)

    BLE1M 画相位图 可以读出preamble 01010101 同步码 01101011 通过向下向上的轨迹来肉眼读 原理是需要看如何进行调制的 toolbox中是GMSK调制 所以反着推回去 就知道画相位图能直接肉眼读数了 同理Zigb
  • 蓝牙PHY6222添加OTA升级功能

    主要步骤 1 代码添加 ota app service 2 keil软件添加ota app代码 3 烧录软件添加ota设置 4 手机ota app升级 准备 奉加微电子官网下载6222的代码SDK V3 0以上 下载官网的PhyPlusKi
  • 解密蓝牙mesh系列

    转载自 蓝牙技术联盟 蓝牙mesh网络 低功耗 低功耗蓝牙 低功耗蓝牙 Bluetooth Low Energy 是一项相当成功的无线技术 如今已经很难找到不支持低功耗蓝牙的智能手机或平板电脑了 可以说它是可穿戴技术兴起的关键因素 在医疗设
  • 蓝牙协议介绍

    1 广播 ADV Advertising 1 1 BLE 报文结构 BLE引入access address 概念 用来指明接收者身份 概 其中 0x8E89BED6 这个access address 比较特殊 它表示要发给周边所有设备 即广
  • BLE MESH组网(五)配置BLE MESH

    BLE MESH 五 配置BLE MESH 前言 概述 配置协议 供应程序 信标 邀请 交换公钥 前言 2017 年 5 月 全球最臭名昭著的勒索软件 WannaCry 在全球范围内积极攻击计算机 劫持用户数据索要赎金 这次攻击影响了 15
  • 蓝牙 BLE 协议学习: 有关概念介绍

    背景 在学校内就用过蓝牙技术参加过比赛 并拿了奖 而蓝牙作为物联网中比较常见的协议 有必要进行深入的学习 此后的文章会以 ble v4 0 进行学习 介绍 蓝牙技术最初由电信巨头爱立信公司于 1994 年创制 当时是作为 RS232 数据线
  • Uniapp低功耗蓝牙操作实例

    uniapp低功耗蓝牙在移动端使用较为平常 本文相较于官方文档介绍一下低功耗蓝牙的操作案例 即取即用 低功耗蓝牙虽工作原理与经典蓝牙类似 但是有着独特的架构体系 所以LE独立出来成为一种蓝牙形态 不过LE和经典蓝牙使用相同的2 4G无线电频
  • Android - BlueTooth BLE 之 Central 与 Peripheral

    一 前言 Andorid 5 0 之前是无法进行 外围设备开发的 在Android 5 0 API 21 android bluetooth le包下 新增加 Scaner相关类和 Advertiser 相关类 目前最后使用Scanner相
  • NRF52832学习笔记(2)—— 添加DFU功能(基于SDK15.3)

    前言 SDK版本15 3 评估板 pca10040 在 uart 的例程中添加 DFU 功能 使用 s132 的协议栈 因为官方的 BootLoader 工程用的是s132的协议栈 一 准备工作 在开始实验之前必须先准备以下软件 gcc a
  • Android Ble 连接设备失败 onConnectionStateChange status 返回133

    Android Ble 连接设备失败时回调函数 onConnectionStateChange status 返回133 开始找问题 各种mac地址 权限 线程 找了个遍 结果就是返回纹丝不动 又因为 mBluetoothGatt mBlu
  • win32下Qt5BLE蓝牙开发笔记

    BLE简介 BLE蓝牙是蓝牙2 0以上的蓝牙模块 经典蓝牙是蓝牙2 0以下的蓝牙 蓝牙分为客户端和服务器两端 经典蓝牙可以通过socket编程进行客户端与服务器之间的通信 与网络socket相似 BLE蓝牙则无法使用这种方式进行通信 BLE

随机推荐