BLE学习(2):广播包报文格式详解

news2025/8/7 10:09:28

文章目录

  • 1 广播通道
  • 2 广播包

参考手册: BLUETOOTH SPECIFICATION Version 5.0

为了能够充分理解蓝牙的广播,我们先了解一下BLE架构的GAP(Generic Access Profile)层。在这里插入图片描述
GAP层提供决定蓝牙设备之间如何交互的框架,包括:

  • 蓝牙设备的角色(Client/Server)
  • 广播(广播advertising报文、广播数据、广播参数、搜寻广播)
  • 连接建立(初始化连接、接受连接、设置连接参数)
  • 安全

在一个BLE设备中GAP可以实现:发现蓝牙设备和广播报文并连接、广播并接受连接、发送广播报文、发现蓝牙设备和广播报文但不连接(仅扫描)。对于连接模式而言,两个设备之间可以双向传输数据;对于一个正在广播中的设备而言,无法接收数据(但有一个例外:可以接收和回复scan requests报文)。

1 广播通道

在广播状态下,设备发送一个有效数据包给其它设备,然后等待回复。这个数据包以一个固定的广播时间间隔进行发送。在蓝牙协议栈中,有40个通道,通道之间的中间间隔为2MHz。其中通道37~39称为主广播通道,而其余37个通道称为次广播通道(在连接期间也用于数据传输)。如果设备需要使用次广播通道,则需要在主广播通道中发送一个指向次广播通道的广播数据包。

2 广播包

如下图所示为广播包的格式,它最终会被封装在LL层packet中的PDU中。
在这里插入图片描述
上图是针对无编码PHY层的,但有编码PHY的PDU与上图是相同的。

  • 有编码PHY:Bluetooth 5.0新引入的PHY,在远距离和噪声环境中通信很有用

现在来分析一下,PDU的各个字段:
1、PDU Type
PDU根据不同的用途分为了多个类别,该字段的长度为4位,可选的值如下:
在这里插入图片描述
在了解这些类别之前,我们需要先了解一些名词:
Directed和Undirected:Directed广播类型仅接收一个已知设备的请求,而Undirected广播可以接受任意设备的请求
Connectable和Non-Connectable:一个广播设备是否允许建立一个连接
Scannable和Non-Scannable:一个广播设备是否能够处理一个Scan Requset信息

  • Scan Request和Response是用来允许设备能够广播比广播报文允许的更长的数据

Extended advertising:扩展广播是一种可以广播更多数据(offloaded)的方式,它是通过广播一个主广播通道上指向次广播通道的辅助包实现的。

  • 对于Bluetooth 5.0以下的版本不支持

Periodic advertising:两台未连接的设备之间以指定的时间间隔向设备广播数据包,这意味着不止一台设备可以监听和收听这些周期性的广播。它们由以固定间隔发送的可变的广播数据组成。

  • 对于Bluetooth 5.0以下的版本不支持

下面来看看PDU的类型:
(1) Legacy Advertising PDUs
也就是兼容之前蓝牙版本的PDU类型,其含义对应上面的名词解释

  • ADV_IND: Connectable Scannable Undirected advertising.
  • ADV_DIRECT_IND: Connectable Directed advertising
  • ADV_NONCONN_IND: Non-Connectable Non-Scannable Undirected advertising
  • ADV_SCAN_IND: Scannable Undirected advertising

(2) Extended Advertising PDUs
在Bluetooth 5.0版本引入的类型,它允许设备在次广播通道进行广播,它的作用是允许更多的广播内容。

  • ADV_EXT_IND: 在主广播通道发送的扩展广播 (Connectable Scannable Undirected广播类型不可用)
  • AUX_ADV_IND: 在次广播通道发送的扩展广播 (Connectable Scannable Undirected广播类型不可用)
  • AUX_SYNC_IND: 周期性广播
  • AUX_CHAIN_IND: 与其他广播类型一起使用,以保存额外的广播数据(广播包的chain,即多个广播包之间由chain建立关系)

(3) Scanning PDUs
Scan包使设备能够广播比单个广告包所允许的更多的广播数据。

  • SCAN_REQ: 用于主广播通道中发送的Scan Requset包
  • SCAN_RSP: 用于主广播通道中发送的Scan Response包
  • AUX_SCAN_REQ: 用于次广播通道中发送的Scan Requset包
  • AUX_SCAN_RSP: 用于次广播通道中发送的Scan Response包

(4) Initiating PDUs
该数据包用于在一个外围设备与广播设备之间建立连接。

  • CONNECT_IND: 在主广播通道上发送的连接请求包
  • AUX_CONNECT_REQ: 在次广播通道上发送的连接请求包
  • AUX_CONNECT_RSP: 在次广播通道上发送的连接响应包

2、RFU(Reserved for future use):保留
3、ChSel
如果广播设备支持LE Channel Selection Algorithm #2算法,该位会被置1

  • 参考Vol. 6, Part B, Section 4.5.8.3

4、TxAdd
如果广播设备的地址是随机的,该位置1;如果是公共的,该位置0
5、RxAdd
如果目标设备的地址是随机的,该位置1;如果是公共的,该位置0
6、Length
packet中有效数据的长度
7、PDU Payload
广播数据包的内容及其最大大小取决于PDU类型。包含广播数据的PDU类型有:ADV_IND,ADV_NONCONN_IND, ADV_SCAN_IND;ADV_EXT_IND, AUX_ADV_IND, AUX_SYNC_IND, AUX_CHAIN_IND
Advertising Data帧格式如下
在这里插入图片描述
对于广播类型AD type来说,它有如下取值(具体定义参考官方文档Core Specification Supplement):

  • Service UUID: 包含一系列蓝牙服务UUID
  • Local Name: 设备名称
  • Flags: 当有一个可连接的广播包时,该位有效,Flags包括LE Limited Discoverable Mode, LE General Discoverable Mode, BR/EDR Not Supported, Simultaneous LEBR/EDR to Same Device Capable (Controller),Simultaneous LE and BR/EDR to Same Device Capable (Host)
  • Manufacturer Specific Data: 产商的唯一标识符
  • TX Power Level: 发送功率
  • Slave Connection Interval Range: 可通过广播数据包请求更改对方的默认连接间隔范围
  • Service Solicitation: 请求与一个或多个指定服务的广播设备连接
  • Service Data: 包含服务的UUID和该服务所对应的数据
  • Appearance: 根据standard Appearance assigned numbers定义的广播设备的类型
  • Public Target Address: 当使用公共地址绑定一个或多个设备时,定义广播的一个或多个接收者的地址。
  • Random Target Address: 当使用随机地址绑定一个或多个设备时,定义广播的一个或多个接收者的地址。
  • Advertising Interval: 广播间隔
  • Uniform Resource Identifier: 用于广播一个URL
  • LE Supported Features: 用于定义设备的低功耗特性,参考Core Specification (Vol. 6, Part B, Section 4.6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP 底层的运行机制和工作原理

阅读目录阐述一、PHP的设计理念及特点PHP 为什么没有多线程?1、PHP 与多线程2、PHP是单线程,多进程模型3、 php为什么选择多进程,而不是多线程4、场景二、PHP 四层体系1、上层应用2、Sapi3、Extensions(扩展)4、Zend 引…

【目标检测】Fast R-CNN论文详细解读

目录:Fast R-CNN论文解读一、前言1. R-CNN的步骤及缺点2. SPP Net的步骤二、Fast R-CNN1. R-CNN的缺点2. SPPNet的缺点3. Fast R-CNN的优点4. Fast R-CNN的模型结构和训练流程5. 初始化预训练网络结构6. 微调7. 多任务损失函数8. ROI层的反向传播9. SGD超参数选择10…

Java后端面试到底要如何准备?

我把面试准备拆成以下几个步骤: 1.写简历 2.整理好自己最熟悉的项目,相对有代表性的项目。 3.整理自己的技术栈 4.收拾好自己的自我介绍 5.被八股文 6.模拟面试 7.针对模拟面试表现出来的问题进行改进 8.开始投投简历 本人 10 年开发经验&#…

jsp课程设计管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 课程设计管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使…

单片机毕业设计 stm32智能手环

文章目录1 简介1 项目背景意义2 系统方案的设计3 系统总体结构4 系统硬件设计4.1 主控模块4.2 姿态解算模块:MPU60504.3 DS3231实物图4.4 TFT显示模块4.5 硬件连接效果5 跌倒检测算法原理5.1 跌倒检测的判定流程5.2 关键算法实现1 简介 🔥 Hi&#xff0…

CIPU落地专有云:是“小众需求”还是“机会之门”?

2022 年 11 月,云栖大会主论坛,阿里巴巴集团副总裁、阿里云智能基础产品事业部负责人蒋江伟分享了阿里云专有云的一项新进展 —— CIPU 落地飞天企业版。在分析师峰会上,阿里巴巴集团研究员、阿里云专有云总经理刘国华也向分析师们详细介绍了…

双一流高校全球通邮经验:Coremail安全海外中继提升科研效率

在这个“后疫情时代”,高校间的国际交流合作更应架起桥梁,承担起文明交流互鉴的责任,邮件往来交流作为学术交流的重要工具,保障全球高校学术交流安全畅通,是Coremail针对高校教育邮件服务的重点之一。 针对高校行业面临…

python一键采集高质量陪玩,心动主播随心选......

人生苦短,我用python 北京时间11月6日上午,2022英雄联盟全球总决赛(S12)冠亚军决赛在美国旧金山大通中心球馆进行,随着DRX的成功夺冠,在全球进一步掀起了电竞热潮。 newzoo 《2022电竞市场报告》显示&…

《MySQL实战45讲》——学习笔记18 “索引失效、函数/隐式转换“【建议收藏】

本文介绍几种MYSQL中索引失效的典型SQL用法,包括对索引字段使用函数、索引字段隐式类型转换(如字符串转数值类型,实质上也是使用CAST函数)、索引字段隐式字符编码转换(如utf8mb4字符集与utf8字符集的等值判断&#xff…

Leetcode101:对称二叉树

原文链接:101. 对称二叉树 - 力扣(LeetCode) 题目 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:r…

日志异常检测准确率低?一文掌握日志指标序列分类

背景 目前,日志异常检测算法采用基于时间序列的方法检测异常,具体为:日志结构化->日志模式识别->时间序列转换->异常检测。异常检测算法根据日志指标时序数据的周期性检测出历史新增、时段新增、时段突增、时段突降等多种异常。 然…

那么多优秀的自动化测试工具,而你只知道Selenium?

如今,作为一名软件测试工程师,几乎所有人都需要具备自动化测试相关的知识,并且懂得如何去利用工具,来为企业减少时间成本和错误成本。这是为什么呢? 在以前,测试人员一般都只需要扮演终端用户,…

【云原生 | Kubernetes 系列】--Gitops持续交付 ArgoCD 部署与概念

1. Pull Pipeline 使用Pull Pipeline可以不在集群以外的地方保存凭据,避免凭据泄露的风险 工作模式: 两个Git仓库. 程序代码 程序员维护 分支策略 Hotfix Feature Develop Release Master 部署配置 基于OAM管理 Updater CI流水线交付了新的Image Operator Spec 期望状态 …

UE5笔记【一】安装、第一个关卡:光线、原点、平面;光线、天空、云朵;内容抽屉;运动控制;

第一步:安装UE5 下载Epic Games客户端。 下载EpicGames客户端,完成注册账户。 然后选择【库】、选择【引擎版本】后面的加号【】、然后点击【下拉箭头】选择你要安装的版本。点击【安装】。 特别提醒:请找一块特别大的硬盘存储空间&#xf…

prometheus+alertmanager 企业微信告警

一、应用安装启动 1、软件准备 alertmanager-0.24.0.linux-amd64.tar.gz blackbox_exporter-0.22.0.linux-amd64.tar.gz node_exporter-1.4.0.linux-amd64.tar.gz prometheus-2.40.0-rc.0.linux-amd64.tar.gz 2、配置文件 cat /data/prometheus/prometheus.yml #根据自己情况…

liunx集成jmeter进行压测实践

首先liunx环境需要部署jdk 1,获取jmeter免安装包:点击我获取免安装包 2,获取jmeter-manger工具,用于生成报告,日志等 点击我获取工具 3,在服务器上新建一个文件夹存放jmeter,推荐在/usr/local/下面,我这里由于权限问…

微服务真的过时了吗?Twitter员工因为微服务被马斯克解雇了

马斯克吐槽微服务 最近Twitter因为马斯克收购而大幅裁员的消息闹得可谓是沸沸扬扬,但是最近马斯克吐槽Twitter内部服务200个RPC的新闻更是闹得不可开交,并且和员工在twitter上的争论更是因为了程序猿界的广泛转发和评论 微服务真的是一个糟糕的设计吗&a…

如何处理海量数据文件以及大文件数据查找

目录 一.处理海量整数文件 ①问:假定有40亿个无符号整数,判断某数据是否在其中? ②问:假定有40亿个无符号整数,找到只出现一次的数据,两次,三次...? ③问:两个文件各…

[ Linux ] 动静态库 手把手教你写一个自己的库

目录 静态库与动态库 生成 发布动静态库 形成发布静态库 形成发布动态库 一个makefile同时生成动静态库 如何使用动静态库 使用静态库 正确做法: 使用动态库 运行动态库 为什么动态库运行时有找库的步骤 静态库与动态库 静态库(.a&#xff0…

聊一聊作为高并发系统基石之一的缓存,会用很简单,用好才是技术活

大家好,又见面了。 在服务端开发中,缓存常常被当做系统性能扛压的不二之选。在实施方案上,缓存使用策略虽有一定普适性,却也并非完全绝对,需要结合实际的项目诉求与场景进行综合权衡与考量,进而得出符合自…