蓝牙低功耗基-蓝牙广播

张开发
2026/4/20 0:08:58 15 分钟阅读

分享文章

蓝牙低功耗基-蓝牙广播
概述广告功能是任何蓝牙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堆栈及其相关的默认配置。然后我们将深入探讨如何配置硬件以广播不可连接的广告使设备作为信标运行以便邻近的扫描设备能够看到数据。练习步骤

更多文章