当前位置: 首页 > article >正文

蓝牙低功耗基-蓝牙广播

概述广告功能是任何蓝牙LE连接中的一个关键要素。对不同的广告参数、其含义以及如何通过调整这些参数来实现应用目标(无论是降低功耗、提高可靠性还是加快设备发现过程)建立基本的理解是十分重要的。蓝牙LE中的广告功能主要用于两个主要目的。一是向邻近设备广播数据二是宣传自身存在状态以便其他设备与之建立连接。在本课程中我们将首先考察广告过程。随后将了解不同类型的广告以及广告数据包的结构。本课程仅涵盖传统广告相关内容。在本课的实践部分我们首先将学习如何将设备配置为广播器以便能够广播广告数据包而您的智能手机将对此进行扫描。随后我们将学习如何动态配置广告数据包的内容。最后我们将探讨可连接式广告以及如何手动配置外围设备的蓝牙低功耗地址。目标了解传统广播过程的基本原理以及涉及的不同广播参数(广告间隔、发射功率、信道和使用的 PHY了解广播类型(可连接与不可连接、可扫描与不可扫描等)检查蓝牙低功耗地址类型(公共、随机、静态、可解析等)学习如何在蓝牙低功耗(BluetoothLE)广播和UUID中包含数据。通过动手练习创建蓝牙LE信标。通过动手练习在设备发现阶段配置外设设备的广播数据包。广播过程广播和发现当蓝牙LE设备处于广播状态时它会发送广播数据包以宣告自身的存在并可能尝试与另一设备建立连接。这些广播数据包会按照广播间隔周期性地被发送出去。定义广播间隔:发送广播数据包的时间间隔。范围为20毫秒至10.24秒步长为0.625毫秒。广播间隔时间越短广播数据包出现的频率就越高从而也会消耗更多的电量。因此这里需要权衡的是电量消耗与广播数据包被扫描器接收的速度之间的平衡这通常被称为可发现性。为避免数据包冲突每个广告数据包在发送前都会随机延迟0-10毫秒。此举确保了拥有相同广告间隔的设备不会始终处于数据包冲突的状态。广播信道:蓝牙低功耗设备通过40个不同的频率信道进行通信。这些信道被划分为3个主要广播信道和37个次要广播信道。主要广播信道是主要用于广播目的的信道。次要广播信道有时也可用于广播目的但主要是在建立连接后用于数据传输。在整个课程中我们将仅关注主要广告信道。为确保一定程度的冗余性广播数据包会同时发送至所有三个主要的广播信道一一信道37、38和39。与此同时一台扫描设备将扫描这3个信道以查找广播设备。由于广播包对于建立连接性至关重要因此主要广播通道均经过精心挑选。尽管通道37、38和39均为连续编号但它们实际上并非相邻通道这一点从上方图表中即可看出。这三条通道之间的分隔旨在避免相邻频带间的干扰。此外这三条特定通道受使用ISM频段的其它技术所产生的噪声影响也最为轻微例如Wi-Fi技术。扫描间隔和扫描窗口与广播时段类似扫描间隔指的是扫描器对广播数据包进行扫描的频率。扫描窗口则指扫描器用于扫描数据包所花费的时间这在实际操作中代表了设备在每次扫描间隔内处于扫描状态与非扫描状态之间的轮值周期。扫描间隔:设备扫描广播数据包的时间间隔。扫描窗口:设备在每个扫描间隔内用于扫描数据包所花费的时间。两者范围从2.5毫秒到10.24秒步长为0.625毫秒。由于设备在三个不同的广播频道上进行广播扫描器将在每次扫描间隔后切换频道从而在各个广播频道之间轮换。较短的广播间隔会导致发现时间缩短但同时也会增加功耗。与此类似较高的扫描窗口与扫描间隔比虽然能缩短发现时间但也会增加功耗。连接所需时间与功耗之间的平衡始终是一个取舍问题。但如果你同时控制了扫描器和周边设备便能够选择那些彼此配合得宜的间隔时间。需注意的是整体扫描过程所消耗的电量远多于广告过程因此扫描器/中心设备通常配备的电池容量更大。扫描请求和响应当某个外围设备正在发送广播信息时中心设备也可选择向该外围设备发送扫描请求以获取广播数据包中未包含的额外信息。如果扫描请求被接受外围设备便会以所谓的扫描响应的形式做出回应同样会通过上述三大主要广播通道讲行传输扫描请求:中央设备向外围设备发送的消息用于请求广播数据包中不存在的附加信息。扫描响应:作为对扫描请求的回复发送的消息包含额外的用户数据。这是一种外围设备无需首先与中心建立连接即可发送额外数据的方法。若外围设备再无其他信息可提供它亦可选择回传一个空扫描响应。增加外围设备一次可广播的数据量的另一种方法是利用一种名为“扩展广告”的功能。借助这一功能在主广告频道上广播的广告数据包会指向在辅助广告频道上所广播的补充信息。扩展广告超出了本课程的范围我们仅会专注于传统广告。广播类型外设可以通过多种方式进行广告宣传定义可连接性与不可连接性:确定中央设备是否可以连接到外围设备。可扫描与不可扫描:确定外设是否接受来自扫描仪的扫描请求。定向与非定向:确定广告数据包是否针对特定扫描仪。在传统广告中需要涵盖四种主要的广告类型还有一个用于扫描响应但在此不作覆盖的第五种。Scannable and connectable (ADV_IND):这是最普遍的一种广告类型。如果某外设设备采用这种类型的广播方式就意味着它既具备可扫描性又具备可连接性。这意味着该外设设备在宣传自身存在的同时还允许中心设备发送扫描请求并会以扫描响应(由此具备可扫描性)的形式做出回应随后再建立连接(由此具备可连接性)Directed connectable (ADV_DIRECT_IND): 这种广播类型适用于定向广播场景即广播发布者不接受扫描请求的情况。它属于定向、可连接但不可扫描的类型。这适用于广播发布者已知晓扫描设备且仅希望快速重新连接的情况。此类情形的一个典型例子是蓝牙鼠标与电脑的连接中断后鼠标仅希望再次重新连接。在这种情况下无需接受扫描请求发送定向广播包以缩短连接过程更为便捷。Non-connectable and scannable (ADV_SCAN_IND):使用此类广播的发布者仅会接受扫描请求但不会允许与之建立连接(因此为不可连接型)Non-connectable and non-scannable (ADV_NONCONN_IND):此类广播既不接受扫描请求也不允许建立连接。这类广播的典型应用场景是信标设备在此类设备中设备无需将无线电信号模式切换为接收模式因为它们并不允许接收任何数据这进而有助于降低电池消耗。如你所见广播类型可分为可连接型或不可连接型、可扫描型或不可扫描型、定向型或非定向型。下表对四种传统广播类型及其特性进行了概述。ConnectableScannableDirectedADV_INDxxADV_DIRECT_INDxxADV_SCAN_INDxADV_NONCONN_IND蓝牙地址每一款蓝牙LE设备都会被赋予一个独特的48位地址进行识别。蓝牙地址被划分为公共或随机两类。随机地址又进一步细分为静态或私有两种类型这取决于地址是否发生变化。最后私有地址可分为可解析和不可解析两种情况。下图展示了蓝牙地址的分类方式。请注意随机和私有地址仅属于分类类型而非实际地址类型。蓝牙LE设备至少使用以下地址类型之一:Public addressRandom static addressRandom private resolvableRandom private non-resolvable注释分配给设备的公共地址来自与MAC地址相同的IEEE地址池(例如用于以太网、Wi-Fi)因此也常被称为蓝牙MAC地址。Public address公共地址是一种固定地址它由制造商在设备出厂时进行编程设定。该地址必须向IEEE注册管理机构进行登记且对于该特定设备而言具有全球唯一性且在设备的使用寿命内不可更改。获取此类地址需缴纳相应费用。Random address随机地址的使用频率要高得多因为它无需向IEEE注册且可由用户手动进行配置。这也是nRF Connect SDK中示例中的默认地址类型。它既可能是在设备内部进行编程的也可能是在运行时创建的。用户可以选择拥有静态地址或私有地址。Random static address一个随机的静态地址可被分配并固定于设备整个生命周期内。它可在启动时进行更改但运行期间则不可变更相较于公共地址这是一种成本较低的替代方案因为你无需对其进行注册。如上所述所有蓝牙低功耗设备必须使用公共地址或随机静态地址其中后者更为常见。Random private address当设备希望保护其隐私时可以使用私有地址。这是一种周期性变化的地址用于隐藏设备的身份并防止设备追踪。随机私有地址可以是可解析的或不可解析的如下所述。Resolvable random private address可解析的私有地址如其名称所示确实能够按照预期进行解析。由于扫描设备事先共享了密钥他们每次该地址变更时均可通过此密钥来识别新地址。此事先共享的密钥即为身份解析密钥(IRK)既用于生成又用于解析随机地址这个随机地址基本上仅被对端用于解析蓝牙LE设备的实际地址。该地址仍有可能是公共地址或随机静态地址。IRK使得对端能够将随机的私有地址转换为设备的真实蓝牙LE地址。Non-resolvable random private address不可解析的私有地址无法被其他设备解析仅用于防止追踪。这种类型的地址不常使用。总结来说有四种不同的地址类型:Public address:由制造商编程到设备中并在IEEE注册。Random static address:可在设备启动时配置并在整个设备生命周期内保持固定。无需向IEEE注册是公共地址的常见替代方案。Resolvable random private address:(可选)一个周期性变化的地址但可通过预共享密钥解析。Non-resolvable random private address:周期性变化且不可解析的地址。广播包让我们来分析一下广播数据包是如何结构化的。蓝牙低能耗(BLE)数据包如下图所示其主要部分属于所谓的协议数据单元(PDU)。PDU包含的是广播PDU(有时也称为广播信道PDU)或数据PDU(有时称为数据信道PDU)具体取决于该BLE数据包是用于广播还是数据传输。如图所示广播PDU由头部和负载组成。广播PDU的头部部分由以下组成:PDU Type:确定我们在广告类型中讨论的广告类型例如ADV_IND。RFU:预留用于未来使用。ChSel:如果支持LE信道选择算法#2则设置为1。TxAdd(发送地址):0或1取决于发送地址是公开还是随机。RxAdd(接收地址):0或1取决于接收地址是公开的还是随机的。Length:有效载荷的长度有关这些字段的更多信息可随时在蓝牙SIG网站上的BluetoothLE核心规范中找到。广播PDU的有效载荷分为两部分前6字节表示广播商地址(AdvA)其余部分用于实际广播数据(AdyData)AdvA:广告设备的蓝牙地址AdvData:广告数据包注释载荷结构取决于广告的类型。在进行定向广告(ADV_DIRECT_IND)时还需留出一些空间来指定接收方的地址。因此AdvData文件标识被替换为一个长度为6字节的接收方地址字段。此类广告包(ADVDIRECT_IND)并不包含载荷内容。广告数据部分如图所示。广播数据包由多个结构组成这些结构统称为广播数据结构(AD结构)。每个AD结构都包含一个长度字段、一个用于指定类型(AD类型)的字段以及一个用于存放实际数据本身的字段。需要注意的是最常见的AD类型长度为1个字节。广告数据类型由蓝牙规范定义并在nRFConnect SDK中在此处的“EIR/AD数据类型定义”下进行文档记录。以下是几个常用的数据类型我们将在后续练习中使用。Complete local name (BT_DATA_NAME_COMPLETE):这仅仅是人类用户在扫描附近设备时看到的设备名称(例如通过智能手机)。Shortened local name (BT_DATA_NAME_SHORTENED):完整本地名称的简短版本。Uniform Resource Identifier (BT_DATA_URI):用于宣传像网站地址(URL)这样的URI。Service UUID: 服务唯一标识符是一个对特定服务而言全局唯一的数字。它可以帮助扫描器识别出值得连接的设备。Manufacturer Specific Data (BT_DATA_MANUFACTURER_DATA):这是一种流行的数据类型使公司能够定义自己的自定义广告数据例如iBeacon的情况。Flags: 可标记该设备特定属性或操作模式的1位变量。这是一个设置标志位BT_LE_AD_NO_BREDR的广告数据结构示例Flags广告标志是封装在一个字节中的单比特标志意味着最多可以设置8个标志位。我们将来看看其中一些最常用的标志位。BT_LE_AD_LIMITED:设置LE有限可发现模式该模式与可连接式广播配合使用用以向中心方示意设备仅在特定时段内可用随后广播时间将超时BT_LE_AD_GENERAL:设置LE通用可发现模式用于可连接广告中表示广播在较长时间内可用(超时0)BT_LE_AD_NO_BREDR:表示不支持经典蓝牙(BR/EDR)BT_LE_AD_LIMITED 和 BT_LE_AD_GENERAL 都适用于处于外围角色的设备。设置广播练习在本练习中我们将介绍nRF Connect SDK中的核心Bluetooth LE APl。首先将学习如何启用蓝牙LE堆栈及其相关的默认配置。然后我们将深入探讨如何配置硬件以广播不可连接的广告使设备作为信标运行以便邻近的扫描设备能够看到数据。练习步骤

相关文章:

蓝牙低功耗基-蓝牙广播

概述 广告功能是任何蓝牙LE连接中的一个关键要素。对不同的广告参数、其含义以及如何通过调整这些参数来实现应用目标(无论是降低功耗、提高可靠性还是加快设备发现过程)建立基本的理解是十分重要的。 蓝牙LE中的广告功能主要用于两个主要目的。一是向邻近设备广播数据&#…...

不用PS也能玩转迪文屏:PPT制作适配图片的另类技巧

不用PS也能玩转迪文屏:PPT制作适配图片的另类技巧 在物联网设备开发中,迪文屏因其性价比高、接口丰富而广受欢迎。但对于非设计背景的开发者来说,为800480分辨率的迪文屏准备适配图片往往成为最大痛点。传统方案依赖Photoshop等专业工具&…...

如何快速掌握Unity游戏自动翻译:XUnity.AutoTranslator完全指南

如何快速掌握Unity游戏自动翻译:XUnity.AutoTranslator完全指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 如果你是一位Unity游戏开发者或玩家,面对多语言游戏的本地化挑战&a…...

如何设置密码复杂度策略以约束MongoDB用户的密码强度

启用 pwdPolicy 前必须开启 --auth 或 security.authorization: enabled,否则策略被忽略;setSecuritySettings 仅对新用户或手动改密生效;仅 minLength 和 characterClassCount 有效,其他字段未实现。启用 pwdPolicy 前必须开启访…...

Matlab图像处理实战:用flip函数轻松搞定图像翻转、镜像与数据增强

Matlab图像处理实战:用flip函数轻松搞定图像翻转、镜像与数据增强 在计算机视觉和图像处理领域,数据预处理是模型训练前不可或缺的一环。Matlab作为科学计算领域的瑞士军刀,其内置的flip函数看似简单,却能解决图像处理中的多个痛点…...

AGI因果能力评估白皮书(工信部AI安全重点实验室内部版·限发200份)

第一章:AGI因果推理能力评估的理论基础与战略意义 2026奇点智能技术大会(https://ml-summit.org) 通用人工智能(AGI)的核心跃迁不在于模式匹配的精度,而在于能否构建可迁移、可解释、可干预的因果模型。因果推理能力是AGI实现真…...

告别命令行恐惧:用MobaXterm图形化SSH连接VMware虚拟机(保姆级图文)

图形化SSH神器MobaXterm:零基础玩转VMware虚拟机 第一次在VMware里装好Linux虚拟机,满心欢喜双击打开,结果迎面而来的是一个黑底白字的终端窗口——这大概是很多新手共同的"惊悚"体验。命令行界面就像一堵高墙,把跃跃欲…...

【倒计时87天】2026奇点大会唯一闭门议程曝光:AGI记忆持久化标准草案(ISO/IEC JTC 1/SC 42 WG12内部修订版首次流出)

第一章:2026奇点智能技术大会:AGI与记忆系统 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次将“记忆系统”列为AGI架构的核心支柱,而非传统意义上的辅助模块。来自DeepMind、Tsinghua AGI Lab与Neuromorphic Memory Consortiu…...

MySQL升级如何回滚到旧版本_灾难恢复方案与快照备份恢复

MySQL升级后不可直接卸载重装旧版本,因数据字典、系统库结构、InnoDB redo log格式等已被新版本改写;唯一可行回滚路径是用旧版mysqld启动升级前备份的干净副本并切流,且备份须满足:①导出含--routines --events --triggers --sin…...

告别双系统!用VMware把Ubuntu 20.10装进移动硬盘,打造随身开发环境

随身开发环境实战:用VMware将Ubuntu 20.10部署至移动硬盘的全方位指南 在咖啡厅调试代码时发现环境配置丢失,回家后又要重新配置依赖——这可能是开发者最头疼的场景之一。将完整开发环境塞进口袋随身携带,正成为越来越多技术工作者的刚性需求…...

Less如何构建CSS样式库_通过继承机制优化组件化开发

Less 中 extend 用于编译时合并选择器以减少 CSS 体积,需加 all 才继承嵌套规则;不支持跨文件、参数化及深层嵌套,易导致选择器爆炸;适用样式身份固定场景,动态或差异化需求应选 mixins;大型项目须收敛入口…...

OpenClaw近期生态安全事件解读:从RCE漏洞到Skill供应链投毒分析

引言 2025年底至2026年初,AI领域从对话式大模型向自主式智能代理(Agentic AI)发生了重大转变。在这一浪潮中,由开发者Peter Steinberger主导的开源项目OpenClaw(早期名为Clawdbot与Moltbot)成为最具颠覆性…...

Sitecore Experience Platform (XP) 预认证 RCE 漏洞链详解

Sitecore 是一个广受欢迎的企业级内容管理系统(CMS),帮助全球企业创建和管理网站及数字媒体内容。近期,安全研究机构 WatchTowr 披露了一条无需任何身份验证即可实现远程代码执行(RCE)的完整漏洞利用链&…...

别再死记硬背了!用‘冯诺依曼’和‘TCP/IP’模型,手把手拆解你浏览器访问GitHub的全过程

从输入URL到页面加载:浏览器访问GitHub的完整技术解析 当你在浏览器地址栏输入"https://github.com"并按下回车时,这台看似简单的操作背后隐藏着一系列精密的计算机系统协作。本文将用技术视角还原这个过程的每个关键环节,让你理解…...

AUTOSAR DEM实战:手把手教你配置KL30电压监控的Debounce参数(含代码示例)

AUTOSAR DEM实战:KL30电压监控Debounce参数配置全解析 在汽车电子系统开发中,电压监控是确保车辆电气系统稳定运行的关键功能。KL30作为常电电源线,其电压异常可能引发一系列连锁反应。本文将深入探讨如何通过AUTOSAR DEM模块的Debounce机制&…...

Flutter集成华为厂商推送全攻略:解决后台被杀收不到消息的终极方案

Flutter集成华为厂商推送全攻略:解决后台被杀收不到消息的终极方案 在移动应用开发中,推送通知是保持用户活跃度的关键功能。然而,许多Flutter开发者在使用极光推送时都会遇到一个棘手问题:在华为手机上,当应用后台进…...

LangChain项目实战:我用Ollama和FAISS搭建了一个私人知识库问答机器人(含numpy版本冲突避坑)

LangChain项目实战:用Ollama和FAISS构建企业级知识库问答系统 当技术团队需要快速从海量文档中提取精准答案时,传统的关键词搜索往往力不从心。去年为某金融客户部署知识库系统时,我们测试发现:员工平均每天要花费2.3小时在文档检…...

mysql升级后日志文件如何处理_mysql日志迁移说明

MySQL升级后日志路径和配置必须显式重设:error log和slow-query-log-file需确保目录存在并授权;log-bin迁移要复制旧文件并避免直接删除;GTID模式下purge需谨慎;废弃参数如log_warnings须替换为log_error_verbosity;升…...

服务器CPU被Powershell.exe吃满?别慌,手把手教你揪出WMI里的挖矿脚本

服务器CPU被Powershell.exe吃满?深度排查与根治WMI挖矿脚本实战指南 当你发现服务器监控面板上CPU使用率突然飙升至90%以上,而罪魁祸首竟是Powershell.exe进程时,这绝非偶然的系统资源波动。作为运维人员,我们需要立即意识到&…...

从4G到Wi-Fi 6:OFDM自适应技术是如何让你刷视频不卡顿的?

从4G到Wi-Fi 6:OFDM自适应技术如何重塑你的无线体验 每次在地铁里刷短视频,或是用咖啡厅Wi-Fi开视频会议时,你是否好奇过:为什么同样的网络环境下,有些人的画面流畅如丝,而你的却卡成PPT?这背后…...

宝塔面板7.9.0强制登录?手把手教你三种绕过方法(含恢复教程)

宝塔面板7.9.0强制登录机制解析与安全绕过方案实践指南 最近不少运维同行反馈,宝塔面板7.9.0版本开始强制要求账户登录才能使用完整功能。对于需要快速部署环境又希望保持操作简洁的技术人员来说,这个变化确实带来了一些困扰。今天我们就从技术实现角度&…...

CSS如何设置文字溢出显示省略号_利用text-overflowellipsis

text-overflow: ellipsis 必须配合 white-space: nowrap、overflow: hidden 和明确宽度(如 width 或 max-width)才生效;多行省略需用 -webkit-box -webkit-line-clamp -webkit-box-orient: vertical。text-overflow: ellipsis 必须配合哪些…...

CSS如何制作导航栏平滑滚动到锚点位置_使用scroll-behavior平滑属性

scroll-behavior: smooth 最常见失效原因是未正确作用于滚动容器,应设在 html 上而非 body;与 sticky 导航栏冲突时需用 scroll-margin-top 为锚点元素留白;Safari 15.4 才支持 smooth,15.0–15.3 及所有 IE 不支持。scroll-behav…...

代码重构技巧:改善既有代码的设计

代码重构是提升软件质量的重要手段,它能在不改变功能的前提下优化代码结构,使其更易读、易维护。随着项目迭代,代码往往变得臃肿复杂,而重构技巧能帮助开发者化繁为简。本文将介绍几个实用的重构方法,帮助改善既有代码…...

c++如何处理文件路径中由于不规范的连续斜杠导致的路径解析错误【避坑】

std::filesystem::path 对多个斜杠不自动归一,C://foo 被误解析为 UNC 导致 parent_path() 等行为异常;应优先使用 lexically_normal() 归一化,它安全、标准、不访问文件系统,可将 C://temp///log.txt 变为 C:/temp/log.txt。Wind…...

如何分析RAC启动挂起_crond与ohasd进程启动依赖链排查

ohasd.bin 启动卡住时,应先删除残留的 /var/tmp/.oracle/npohasd 管道文件,再执行 crsctl start crs;需确认目录权限正确、检查 ohasd.log 与 ocssd.log 中超时及磁盘识别问题,并验证 crsctl check has 状态是否为 online。ohasd.…...

如何在 macOS 上为 PHP 8.0 正确集成 XML-RPC 支持.txt

...

如何在 Supabase 中安全实现用户“鼓掌”计数(防刷、防重放、防越权)

本文详解如何通过 rls 策略 合理数据建模,在 supabase 中安全实现用户交互式操作(如虚拟鼓掌),杜绝前端恶意请求篡改计数,兼顾安全性与可扩展性。 本文详解如何通过 rls 策略 合理数据建模,在 supab…...

AGI自动驾驶事故责任链断裂真相:从Uber案到中国深圳首判,12份关键证据采信规则首次系统披露

第一章:AGI自动驾驶事故责任链断裂的法理本质 2026奇点智能技术大会(https://ml-summit.org) 当AGI系统在动态交通环境中自主重构决策树、重写局部控制策略并实时覆盖预设安全协议时,传统侵权法所依赖的“可归责行为人”前提即告瓦解。责任认定不再能锚…...

【机密级解读】SITS2026附件B首次公开:12类AGI安全对齐红线与5类模型即用型准入清单

第一章:SITS2026发布:AGI发展路线图 2026奇点智能技术大会(https://ml-summit.org) SITS2026正式发布了《通用人工智能发展路线图(2026–2035)》,标志着AGI研发从碎片化探索进入系统性工程阶段。该路线图由全球47家顶…...