ble 完整广播数据组成

devtools/2024/10/21 9:36:08/

BLE(Bluetooth Low Energy,低功耗蓝牙)的一条完整广播数据解析,通常涉及广播数据包的结构、内容及其格式。以下是一个基于BLE广播数据结构的详细解析:

一、BLE广播数据包概述

BLE广播数据包是在广播通道(通常为37、38、39三个通道)上发出的,用于设备发现、信息交换等目的。一个完整的BLE广播数据包通常由包头(Header)和有效数据(Payload)两部分组成。

二、广播数据包包头

广播数据包的包头包含了关于数据包类型、地址类型、长度等关键信息。包头格式通常如下:

PDU Type:表示广播包的类型, 长度4个bit。

  1. 可连接的非定向广播(PDU Type=0x00 ADV_IND)
    特点:这是最常见和用途最广的广播类型。它表示当前设备可以接受任何设备的连接请求,并包括广播数据和扫描响应数据。进行通用广播的设备能够被扫描设备扫描到,或者在接收到连接请求时作为从设备进入一个连接。
    用途:适用于需要与其他设备进行连接的情况,如智能手环、蓝牙音箱等设备在开机后进行的广播。
  2. 可连接的定向广播(PDU Type=0x01 ADV_DIRECT_IND)
    特点:这种广播类型是为了尽可能快地建立连接而设计的,通常被称为回连包。它同时包含广播者的地址和发起者的地址,只有符合该地址的“发起者”才可向“广播者”发起一个连接请求。此外,它还有特殊的时序要求,完整的广播时间必须每3.75ms重复一次,但持续时间不能超过1.28秒。
    用途:适用于已知设备地址且需要快速建立连接的场景,如已经配对的设备之间的快速连接。
  3. 可扫描的非定向广播(PDU Type=0x02 ADV_SCAN_IND)
    特点:这种广播类型允许设备被扫描,但不可直接连接。它主要用于设备发现和信息广播,但不包括连接请求的处理。
    用途:适用于只需要设备被发现或广播特定信息,而不需要建立连接的场景,如Beacon设备。
  4. 不可连接的非定向广播(PDU Type=0x03 ADV_NONCONN_IND)
    特点:这种广播类型不接受任何请求包(包括扫描请求和连接请求),仅用于广播数据,但不允许其他设备对其进行扫描或连接。
    用途:适用于仅需要广播数据而不需要与其他设备进行交互的场景,如一些传感器设备。

RFU:保留未来使用,长度1个bit。

ChSel:通道选择,长度1个bit,指示是否支持通道选择算法。

TxAdd:广播设备地址类型,长度1个bit,指示广播设备使用的是公共地址还是随机地址。

RxAdd:目标设备地址类型,长度1个bit,对于广播包来说,此位通常设置为0,因为广播是单向的,不针对特定目标设备。

Length:广播包净荷的长度,长度1个字节,表示有效数据的字节数。

三、有效数据(Payload)

有效数据是广播数据包的核心部分,包含了实际要传输的信息。BLE广播数据的有效数据部分遵循LTV(Length-Type-Value)格式,即每个数据单元由长度、类型和值三部分组成。

长度(Length):表示类型和值字段的总长度,长度1个字节。
类型(Type):表示数据单元的类型,长度1个字节,根据Bluetooth SIG定义的AD类型或制造商自定义类型进行区分。
值(Value):具体的数据内容,长度可变,根据长度字段确定。
详解

四、示例解析

以一个典型的ADV_IND广播包为例,其有效数据部分可能包含以下元素:

Flags:表示设备的连接模式、是否支持LE Secure Connections等,是广播数据包中常见的元素之一。
Device Name:设备的名称,便于用户识别。
Appearance:描述设备的外观或类型,如键盘、鼠标等。
UUID:服务的UUID,用于标识设备提供的服务。
Manufacturer Specific Data:制造商特定的数据,长度和格式由制造商定义。


http://www.ppmy.cn/devtools/57107.html

相关文章

牛皮!手写一个 RPC 框架

设计一个RPC(远程过程调用)框架是一个复杂的过程,涉及到网络通信、序列化与反序列化、服务发现、负载均衡、容错机制等多个方面。以下是设计RPC框架的一些基本步骤: 1. 需求分析: 确定RPC框架需要支持的特性&#xf…

磁盘管理与文件系统

目录 一、硬盘存储容量 1.1关键概念 1.2硬盘存储容量公式二、1.Linux 中使用的文件系统类型 1.1磁盘分区的表示 1.2文件系统 1.3其他文件系统三、fdisk 3.1fdisk -l 3.2交互模式中的常用指令 3.3实操建分区 3…

微信小程序怎样跳转页面?

在微信小程序中,页面跳转通常使用 wx.navigateTo、wx.redirectTo、wx.switchTab、wx.navigateBack 以及 wx.reLaunch 等API。这些API提供了不同的页面跳转方式,适用于不同的场景。 以下是这些API的详细代码示例和说明: 1.wx.navigateTo&…

程序化交易广告及其应用

什么是程序化交易广告? 程序化交易广告是以实时竞价技术即RTB(real-time bidding)为核心的广告交易方式。说到这里,你可能会有疑问:像百度搜索关键词广告还有百度网盟的广告,不也是CPC实时竞价的吗&#x…

网络物理隔离

网络物理隔离是网络安全领域中的一种基本策略,其核心目的是通过物理方式将网络或网络设备分隔开来,以确保数据安全、降低风险并提升系统的整体安全性。网络物理隔离不仅防止了未经授权的访问,也显著降低了来自外部或内部威胁的风险。以下是网…

Linux 生产消费者模型

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:Linux初窥门径⏪   🚚代码仓库:Linux代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝 前言 1. 生产消费者模型 1.1 什么是生产消…

Spring Boot中的分布式缓存方案

Spring Boot中的分布式缓存方案 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Spring Boot应用中实现分布式缓存的方案,以提升系统…

Java 实现将List按照字符串(特定规则)排序

日常开发中我们通常会遇到将一个List按照特定的规则排序,例如我们需要将一个List按照 “广州市”, “深圳市”, “珠海市”, “汕头市” 的顺序排序,我们可以使用下述方式实现。 City实体类 import lombok.AllArgsConstructor; import lombok.Data; im…