BLE协议—协议栈基础

BLE协议栈基础

蓝牙BLE协议栈包含三部分:主机、主机接口层和控制器。
主机:逻辑链路控制及自适应协议层(L2CAP)安全管理层(SM)属性协议层(ATT)通用访问配置文件(GAP)通用属性配置文件层(GATT)
主机接口层:主机控制接口(HCI)
控制器:物理层(PHY)链路层(LL)
在这里插入图片描述
控制器(Controller)

  • 物理层(Physical Layer,PHY):BLE在2400Mhz至2483.5 MHz的2.4GHz免授权频段(ISM)内工作。采用自适应跳频的高斯频移键控(GFSK)。BLE采用40个信道,每个信道间隔为2MHz,分为数据信道和广播信道;广播信道占用3个,用于发现设备、建立连接、广播数据;数据信道占用37个,用于已建立连接设备间的数据通信。建立连接的两个设备,必须同一时间处于同一信道上才能通信。
    其中37/38/39为固定广播信道,其余为数据信道。

  • 链路层(Link Layer,LL),控制设备的射频状态,让设备处于七种状态:

  1. Standby:默认状态,不进行收发。

  2. Advertising:广播状态,在3个广播信道广播数据包,同时监听和回复扫描者发送的扫描数据包。

  3. Scanning:扫描状态,在3个广播信息监听广播数据包,同时发送扫描数据包。

  4. Initiating:发起状态,在广播信道监听广播数据包,从而发起连接。

  5. Connection:连接状态。发起连接的设备通过发送连接请求来回应广播设备,如果广播设备接受连接请求,那么广播设备与发起连接的设备将会进入连接状态。发起连接的设备称为主机(Client),接受连接请求的设备称为从机(Server)。

  6. Synchronization:同步状态,可以通过广播通道接收BIS同步数据流,由Standby状态进入。Synchronization状态可用于侦听一定区域内的BIS广播同步数据流(比如音频数据流),处于Synchronization状态并且正在接收同步数据包的设备称为Synchronized Receiver,只能单向接收BIG,如果在主机指定时间内未侦听到任何有效BIG,处于该状态的设备将回到Standby状态并通知主机。(BLE 5.1)

  7. Isochronous Broadcasting:等时广播状态可以通过广播通道发送BIS(Broadcast Isochronous Stream) 数据报文,由Standby状态进入。想向一定区域内其它设备广播同步数据流(比如音频数据流)的设备需要处于Isochronous Broadcasting状态,处于该状态的设备称为Isochronous Broadcaster。处于Isochronous Broadcasting状态的链路层状态机应发送由一个或多个BIS 组成的BIG(Broadcast Isochronous Group),每个BIG最多包含31个BIS,每个BIS承载一个单独的同步数据流。传输第一个BIS 数据报文后链路层应通知主机,若停止同步广播则回到Standby状态。(BLE 5.2)

在这里插入图片描述

主机控制接口(Host Controller Interface)
主机控制接口(Host-Controller Interface,HCI):为Host访问Controller提供一组标准的接口。
HCI主要完成3个任务:

  1. Host通过HCI发送命令给Controller
  2. Controller通过HCI将事件发送给Host
  3. 传递ACL Data(面向连接,在连接通道上进行数据传输)

该接口层的实现可以是软件接口,也可以是标准硬件接口,比如UART、SPI、USB。

主机(Host)

  • 逻辑链路控制和适配器协议(Logical Link Control and Adaption Protocol,L2CAP):为上层提供了多路复用、数据分段与重组服务,并且支持逻辑端对端的数据通信。

  • 安全管理层(Security Manager,SM):定义了配对和密钥分发的方法,并为其他层提供了与对端设备进行安全连接和数据交换的功能。

  • 属性协议层(Attribute Protocol,ATT):定义了访问对端设备上数据的一组规则,是GATT规范的基础,也是低功耗蓝牙的基石。定义了Host端属性报文格式和报文类型。这一层的关键词是Attribute(属性)。一个属性其实就是一条数据,属性是BLE数据提供单元,也是蓝牙空中传播数据的最上层,BLE开发过程中接触最多的就是这一层。
    Attribute协议下文详解 在这里插入图片描述

  • 通用属性配置文件层(Generic Attribute Profile,GATT):自己本身不提供数据,而是将ATT层提供的属性组合起来构成的服务。通过ATT层可以读写对端设备的属性值,各个属性之间有什么联系各个属性之间怎么组合起来的,是由GATT层负责。服务是GATT层的关键字,服务由属性组成。
    一个BLE设备可以由多个服务组成(使用UUID进行区分),一个服务可以包含多个特征(characteristic),一个特征可以包含多个属性。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。

  • 通用访问配置文件层(Generic Access Profile,GAP):定义了所有蓝牙设备的基础功能,设备间发现、连接、配对绑定的流程;蓝牙设备中四种角色;广播和扫描响应报文的格式;还有一些通用蓝牙参数定义,比如设备地址、名称、配对秘钥和设备的外观特征值,用于区分是什么设备,手机还是电脑;明确了作为一个低功耗蓝牙设备的基本需求,包含哪些层级以及如何协同工作的。 规范了一些通用的蓝牙参数:蓝牙设备地址、设备名称、配对秘钥、外观特征值。

通用访问配置文件层(Generic Access Profile,GAP)

GAP管理蓝牙设备的基本行为,例如设备的发现、连接和配对。GAP规范定义了设备的广告(Advertisement)格式、设备的可见性、设备的连接参数等。GAP的主要作用是使蓝牙设备能够进行发现和连接,并定义了设备在不同状态下的行为。

GAP角色

GAP层定义了4种BLE角色:

  • 外围设备(Peripheral):可以发送广播并接受连接的设备(在链路层中作为从机)。
  • 中央设备(Central):可以扫描广播并发起连接的设备(在链路层中作为主机)。
  • 播报设备(Broadcaster):可以发送广播,但不可接受连接的设备。
  • 观察设备(Observer):可以扫描广播,但不可发起连接的设备。
    链路层可以同时支持多个状态机, GAP层也支持一个设备同时作为多个GAP角色,所以一个BLE设备通常可以同时充当主机和从机(多主多从)。

设备配置

GAP定义了4个设备配置参数:

  • 设备地址:设备地址在协议栈内部指BD_ADDR,小端数据格式。设备地址可以随机,也可以固定。
  • 设备名称:设备名称一般用于区分BLE设备,最长可达248个字节,支持UTF-8编码。
  • 设备外观:设备外观是用于用户识别设备功能,长度为两个字节。
  • 连接PIN码:PIN码用于两个设备之间配对时使用,为6位十进制整形数,因此它的有效范围为000000-999999(0x00000000 – 0x000F423F)。使用时必须显示全部6位数字,包括前导0。

模式和规程

GAP定义5套模式和规程,设备通常运行在这5套模式和规程中:

  • Broadcast mode and Observation procedure, 广播模式和观察规程
  • Discovery modes and procedures,发现模式和规程
  • Connection modes and procedures,连接模式和规程
  • Bonding modes and procedures, 绑定模式和规程
  • Periodic advertising modes and procedure,周期性的广播模式和规程

安全模式

GAP定义了2种安全模式以及4种安全规程:

  • 安全模式1(LE Security mode 1):使用认证信息保证安全。
  • 安全模式2(LE Security mode 2):使用数字签名保证安全。
规程描述安全模式
认证规程(Authentication procedure)执行认证和加密操作安全模式1
授权规程(Authorization procedure)确认是否为某个操作提供授权安全模式1
连接数据签名规程 (Connection data signing procedure)连接数据签名规程,在未加密的连接中传输认证的数据。安全模式2
认证已签名的数据规程 (Authenticate signed data procedure)认证已签名的数据规程,校验带有前面的数据是否有效安全模式2

广播和扫描

广播和扫描在无线通信中是非常重要的一个技术点。在BLE中,扫描和广播是通信的基础,用户可以直接用扫描和广播进行数据的传输,也可以在广播和扫描的基础上进行连接后点对点通信。
由于广播和扫描内容篇幅较长,具体可以移步👇链接
BLE协议—广播和扫描

属性协议层(Attribute Protocol,ATT)

ATT其实相当于设备的数据库。用于在蓝牙设备之间传输和管理数据。它定义了一种基于属性的数据交换模型,其中数据被组织为属性(Attributes)的集合。每个属性都有一个唯一的标识符(Attribute Handle),用于在设备之间进行唯一标识。ATT协议定义了一组操作,例如读取、写入、通知和确认等,用于设备之间对属性的访问和操作。

属性

属性(Attribute)是ATT最基础的单位,用于传输和管理数据。ATT协议定义了一个Attribute数据结构去格式化数据。
在这里插入图片描述

  • Attribute handle:Attribute句柄,2字节长度的唯一性标识。Client要访问Server的Attribute,都是通过这个句柄来访问,也就是说ATT PUD一般都包含handle的值。属性句柄值的范围:0x0001~0xFFFF, 在应用层添加service和characteristic时系统会自动按照顺序的为相关attribute生成句柄;
  • Attribute Type:2字节或者16字节长。作用是用以区分当前属性是服务项或是特征值等,它用UUID来表示。
    • 完整UUID为16字节,蓝牙联盟为了减少数据传输,定义了一个特殊的UUID: 0000xxxx-0000-1000-8000-00805F9B34FB,当使用2字节UUID时,BLE协议会自动把UUID补全成16字节,比如UUID 0xAABB补全后为0000AABB-0000-1000-8000-00805F9B34FB
    • UUID取值范围:
UUID说明
0x1800 – 0x26FF服务项类型
0x2700 – 0x27FF单位
0x2800 – 0x28FF属性类型
0x2900 – 0x29FF特征描述符类型
0x2A00 – 0x7FFF特征值类型
  • Attribute Value:属性值,长度为0-512字节。
  • Attribute Permissions:权限属性

通用属性配置文件层(Generic Attribute Profile,GATT)

GATT是专用的L2CAP通道。可以进行设备服务和特征值的读写操作。GATT定义了两个角色,GATTS(从机或服务端)和GATTC(主机或客户端),一个设备可以同时作为主机和从机。

GATT建立在ATT协议之上,为设备之间的数据交换提供了更高层次的抽象和定义。GATT使用ATT协议来管理服务(Services)和特征(Characteristics),这些服务和特征定义了设备提供的功能和数据类型。通过GATT,设备可以通过属性的方式对外公开自己的功能和数据,使得其他设备可以访问和操作这些属性。
在这里插入图片描述

特征

在这里插入图片描述

特征Characteristic是GATT中最基础的单位。每个特征都由三个属性组成,各自都有对应的UUID。

  • Characteristic declaration:特征声明,UUID固定为0x2803,用于标识特征。

  • Characteristic value:特征值,为特征所携带的实际数据。它可以是各种数据类型,例如整数、浮点数、字符串等,用于传输和存储特征相关的信息 (特征值UUID为用户自定义)。特征值又三部分组成。

    • Characteristic properties :特征特性,一般用于标识特征权限。
      在这里插入图片描述

    • Characteristic Value Attribute Handle:特征值属性句柄,用于存储属性值的句柄。

    • Characteristic UUID:特征值UUID,用于标识特征值的UUID。

  • Characteristic descriptor:特征描述符,为可选字段,用于声明更多的特征信息,比如特征值范围、特征值单位等。
    在这里插入图片描述

服务

  • Service
    Services主要用来传输和管理数据,它分为主服务(primary service)次服务(secondary service)。一个Service可以包含多个Characteristics。
    在这里插入图片描述

  • Primary service:主服务,用于公开此设备主要可用功能的服务,UUID为0x2800。

  • secondary service:次服务,为设备提供额外辅助信息,但跟设备公开的功能无关的服务,一般被包含在主要服务或另一个辅助服务中,UUID为0x2801。

  • include service
    在这里插入图片描述

  • include Service attribute handle:被服务所包含Service的attribute的句柄。

  • End group handle:被服务所包含Service中最后一个attribute的句柄。

  • Service UUID:被包含服务UUID。

具体UUID可以参考蓝牙联盟UUID列表
蓝牙联盟UUID列表

学习笔记,有问题欢迎指出
参考链接:
https://cloud.tencent.com/developer/article/1874730

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书内容 本书《BLE 开収指南》从简单介绉BLE(Bluetooth Low Energy)开始,然后从实验现象开 始带领读者迚一步熟悉BLE,再从BLE 芯片CC2540 癿基础实验慢慢深入BLE 协议栈,最后是带 领各位迚入真实癿实戓项目。我仧相信,使用过我仧癿CC254xBLE 开収套件,每个读者将能做出 自己癿作品,本书共分为4 章,结极如下 第一章:BLE 介绉以及开収环境搭建。 本章内容针对BLE 和TI BLE 协议栈做简单介绉以及TI BLE 协议栈癿开収环境搭建。为后面癿基础 编程和协议栈编程做好准备。 第二章:基亍BLE 癿实验现象展示 本章内容首先吐读者展示基亍BLE 通信癿有趣癿现象,从现象入手,从而使后面癿BLE 协议栈学 www.ghostyu.com 6 习更加癿有效率 第三章:开始最简单癿基础实验 本章主要针对TI 癿CC2540 片上资源迚行介绉和操作,以及CC254xBLE 开収套件癿硬件介绉, 让读者熟悉开収套件,幵丏熟悉CC2540 癿基础编程,这样后面癿协议栈编程才能如鱼得水 第四章:BLE 协议栈入门例程学习 本章内容针对CC254xBLE 开収套件预烧写癿两个协议栈例程迚行详细癿讲解,带领读者迚入BLE 丐界。也希望从这两个demo 讲解上,能够让读者入门BLE 癿开収,TI 癿BLE 协议栈和它癿zigbee 协议栈有径多相似性,而丏BLE 协议栈癿每个例程乊间又有径多相似乊处,所以接触过zigbee, 戒者学习了本章癿两个协议栈demo 后,我相信,读者一定能够自行开収其他癿协议栈demo。 第亐章:深入BLE 协议栈 本章内容是在上一章癿基础上深入介绉BLE 协议栈,TI BLE 协议栈癿例程众多,刡底哪些才是对 读者有用癿和值得学习癿,以及如何深入协议栈癿开収,在这一章,我仧将一起探讨和学习 第六章:实验不实践 基亍TI 癿BLE 协议栈,迚行实戓项目开収。 本书全部以最新版癿BLE 协议栈为例,当前最新癿版本为1.3.2,幵丏可无缝升级。摆脱老掉牙癿 1.2 版本。
BLE ATVV协议源码是指蓝牙低功耗(Bluetooth Low Energy, BLE) ATVV协议所使用的源代码。ATVV是一种基于BLE的通信协议,用于设备之间的数据传输和通信。下面是对BLE ATVV协议源码的简要回答: BLE ATVV协议源码包含了以下几个部分: 1. BLE协议栈:这是BLE ATVV协议的核心组件,它实现了BLE通信的各个层级,包括物理层、链路层、网络层和传输层等。该部分通常由厂商提供,并根据BLE协议规范实现。 2. AT指令集:AT指令集是BLE ATVV协议的命令集合,用于设备之间进行数据交互和控制。源码中包含了各种AT指令的实现,包括连接设备、发送数据、设置传输参数和读取设备状态等。AT指令集的实现可以根据具体需求进行定制和扩展。 3. 应用层代码:BLE ATVV协议源码还包含了应用层代码,用于实现具体的应用功能。这部分源码通常由开发者自行编写,例如实现设备之间的数据解析、业务逻辑处理等。 与BLE ATVV协议相关的源码还可能包含以下补充组件: 4. 驱动程序:BLE ATVV协议的源码可能包含了硬件设备的驱动程序,用于控制和管理设备的硬件功能。 5. 示例代码:BLE ATVV协议的源码中可能包含了一些示例代码,用于演示如何使用协议进行基本通信和数据传输。 总之,BLE ATVV协议源码是一套实现BLE ATVV协议的软件代码,提供了BLE通信的各个层级的实现,以及AT指令集和应用层功能的支持。它可以作为开发蓝牙设备和应用的基础,帮助开发者快速实现BLE通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值