目录
2.3. ADV_DIRECT_IND(定向连接广播指示PDU)
4.1. CONNECT_IND和AUX_CONNECT_REQ
五、通用扩展广播有效载荷格式(Common Extended Advertising Payload Format )
4.9. Host Advertising Data(主机广播数据)
4.9.3. 数据的分片(Fragmentation)支持与限制
广播物理信道PDU(Protocol Data Unit)在蓝牙通信中扮演着至关重要的角色,它负责在广播物理信道上传输数据。PDU用于描述不同层次协议之间的数据传输单位。每个协议层都会将上层传下来的PDU封装成自己的PDU,然后再将其传递给下一层,直到数据包到达接收端并被解码。
一、概述
广播物理信道PDU由一个16位的头部和一个可变大小的载荷组成。其格式如下图所示。
广播物理信道PDU的16位头部格式如下图所示。
- PDU类型:头部中的PDU类型字段指示PDU的类型,这些类型在表2.3中定义。表2.3显示了数据包可能出现在哪个信道和哪个物理层(PHY)上。表中的“●”表示PDU可能出现在该PHY上;空白单元格表示PDU不应出现在该PHY上。
- ChSel、TxAdd和RxAdd字段:这些字段包含针对每个广播物理信道PDU单独定义的特定于PDU类型的信息。如果这些字段在给定的PDU中未定义为使用,则它们应保留供将来使用。
- 长度字段:长度字段指示载荷的字节长度。长度字段的有效范围是1到255字节。
载荷字段:广播物理信道PDU中的载荷字段特定于PDU类型,本篇后面章节介绍。标记为“保留供将来使用”的PDU类型不应发送,并在接收时应忽略。
主机数据:在某些PDU类型中,来自主机的广播数据或扫描响应数据可能包含在载荷中。这些数据的格式在蓝牙规范[第3卷]C部分第11节中(BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 3, Part C Page 1433 )定义。
辅助PDU:一些广播物理信道PDU包含一个AuxPtr字段,该字段指向包含另一个广播物理信道PDU的数据包。在这种情况下,第二个数据包和PDU是原始PDU的辅助数据包和辅助PDU,而原始PDU则是第二个数据包和PDU的上级数据包和上级PDU。
注意:一个PDU只能有一个辅助PDU,但可以有多个上级PDU。给定一个数据包,其从属集包括其辅助数据包(如果有的话)以及辅助数据包的从属集。没有AuxPtr字段的数据包具有空的从属集。
注意:尽管名称如此,但广播物理信道 PDU 也在周期性物理信道上使用。
二、广播协议数据单元(PDU)
在蓝牙技术的链路层中,广播PDU是用于在广播物理信道上传输信息的协议数据单元。这些PDU由处于广播状态的设备发送,并由处于扫描状态或发起状态的设备接收。
2.1. 广播类型
蓝牙技术定义了多种广播PDU类型,以满足不同的广播需求。
2.1.1. 传统广播PDU
传统广播PDU包括以下几种:
- ADV_IND(通用广播指示PDU):用于广播设备的一般信息,如设备名称、服务UUID等。
- ADV_DIRECT_IND(定向广播指示PDU):用于向特定设备发送定向广播,通常包含目标设备的地址。
- ADV_NONCONN_IND(非连接广播指示PDU):用于广播不需要建立连接的信息,如设备状态或配置信息。
- ADV_SCAN_IND(可扫描广播指示PDU):允许其他设备扫描并获取广播信息,通常用于设备发现过程。
这些PDU在早期的蓝牙规范中定义,并广泛用于设备发现和连接建立。
2.1.2. 扩展广播PDU
随着蓝牙技术的发展,引入了扩展广播PDU以支持更复杂的广播场景:
- ADV_EXT_IND(扩展广播指示PDU):用于支持更长的广播数据、更灵活的广播间隔和更复杂的广播模式。
- ADV_DECISION_IND(决策PDU):在广播过程中用于做出决策,如是否响应特定的广播或选择哪个广播进行连接。
- AUX_ADV_IND(辅助广播指示PDU):用于在扩展广播事件中传输额外的广播数据,通常与ADV_EXT_IND配合使用。
- AUX_SYNC_IND(辅助同步指示PDU):用于同步辅助广播链,确保多个广播事件之间的协调。
- AUX_CHAIN_IND(辅助链指示PDU):在辅助广播链中传输数据,支持更复杂的广播数据结构和传输模式。
- AUX_SYNC_SUBEVENT_IND 和 AUX_SYNC_SUBEVENT_RSP:用于在辅助同步过程中进行通信,确保同步的准确性和可靠性。
这些PDU在更新的蓝牙规范中引入,以支持更高级的广播功能和更大的灵活性。
2.1.3. 广播事件
广播事件是指设备在广播物理信道上发送广播PDU的过程。根据使用的PDU类型,广播事件可以分为传统广播事件和扩展广播事件。
- 传统广播事件:使用传统广播PDU的广播事件,通常用于设备发现和简单的连接建立。
- 扩展广播事件:使用扩展广播PDU的广播事件,支持更复杂的广播场景和更高级的功能。
蓝牙技术中的广播PDU类型丰富多样,能够满足不同场景下的设备发现和连接建立需求。随着蓝牙技术的不断发展,扩展广播PDU的引入将进一步推动蓝牙技术在物联网、智能家居等领域的广泛应用。
2.2. ADV_IND(通用广播指示PDU)
ADV_IND PDU是蓝牙技术中广播事件所使用的一种关键协议数据单元。其设计目的是在可连接和可扫描的非定向广播事件中,允许设备广播其存在和相关信息。
2.2.1. PDU结构
- 有效载荷字段:此字段包含了ADV_IND PDU的核心数据。
- 广播物理信道PDU头部:
- TxAdd字段:此字段用于标识广播者地址的类型。若TxAdd设置为0,则AdvA字段包含的是广播者的公共设备地址;若TxAdd设置为1,则AdvA字段包含的是广播者的随机设备地址。随机地址的使用有助于提升设备的隐私保护。
- ChSel字段:此字段与蓝牙LE(低功耗)的信道选择算法相关联。若广播者支持LE信道选择算法#2,则应将ChSel字段设置为1。信道选择算法的使用有助于减少广播和扫描过程中的信道干扰,进而提升通信效率。
ADV_IND PDU(协议数据单元)的有效载荷字段如下图所示。
- AdvA字段:此字段用于存储广播者的设备地址。根据TxAdd字段的设置,该地址可以是公共的或随机的。
- AdvData字段:此字段用于存储来自广播者主机的广播数据。这些数据可能包含设备的名称、服务UUID(通用唯一识别码)等关键信息,有助于其他设备识别并连接到广播者。
2.2.2. 功能
- 设备发现:ADV_IND PDU允许蓝牙设备广播其存在和相关信息,如设备名称、服务UUID等。这使得周围的其他蓝牙设备能够检测到该设备,并了解其基本属性和功能。
- 连接建立:除了设备发现外,ADV_IND PDU还为其他设备提供了连接所需的关键信息。当其他设备对广播的设备感兴趣并希望建立连接时,它们可以使用ADV_IND PDU中包含的信息来发起连接请求。
- 低功耗:ADV_IND PDU支持蓝牙技术的低功耗特性。通过优化广播间隔和广播数据的内容,设备可以在不消耗过多能源的情况下进行广播,从而延长电池寿命。
2.2.3. 应用
- 智能家居:在智能家居系统中,ADV_IND PDU被广泛应用于设备间的连接和通信。例如,智能灯泡、智能插座等设备可以通过广播ADV_IND PDU来宣告其存在,并允许智能手机或智能音箱等设备发现并与之连接。
- 健康监测:在健康监测领域,ADV_IND PDU也发挥着重要作用。例如,智能手环、智能血压计等设备可以通过广播ADV_IND PDU来传输健康数据给智能手机或其他接收设备,以便用户随时了解自己的健康状况。
- 蓝牙音箱:蓝牙音箱通常使用ADV_IND PDU来广播其存在和相关信息,以便其他设备(如智能手机或平板电脑)能够发现并与之连接。这为用户提供了便捷的无线音频体验。
- 蓝牙定位:在蓝牙定位系统中,ADV_IND PDU也被用于设备间的通信和定位。通过广播ADV_IND PDU,设备可以分享其位置信息给周围的接收设备,从而实现室内定位或追踪功能。
2.2.4. 注意事项
- 广播间隔:为了平衡功耗和广播的可发现性,设备需要合理设置ADV_IND PDU的广播间隔。过短的广播间隔会增加功耗,而过长的广播间隔则可能降低设备的可发现性。
- 广播数据:ADV_IND PDU中包含的广播数据应该简洁明了,只包含必要的信息。这有助于减少广播开销并提高设备间的通信效率。
- 安全性:在使用ADV_IND PDU进行设备发现和连接建立时,需要注意安全性问题。设备应该采用适当的加密和认证机制来保护通信数据的安全性和完整性。
ADV_IND PDU在蓝牙设备发现和连接建立过程中具有不可或缺的作用。它支持低功耗特性,使得设备能够在不消耗过多能源的情况下进行广播和连接,为智能家居、健康监测、蓝牙音箱和蓝牙定位等领域提供了广泛的应用前景。
2.3. ADV_DIRECT_IND(定向连接广播指示PDU)
ADV_DIRECT_IND PDU包括PDU头部字段、有效载荷字段。此PDU在蓝牙LE(低功耗)技术中扮演着至关重要的角色,专门用于可连接的定向广播事件。意味着广播是专门发送给某个已知地址的特定目标设备的。
2.3.1. PDU头部字段
- TxAdd:此字段用于指示广播者地址的类型。若其值为0,则表示AdvA字段中存储的是广播者的公共设备地址;若其值为1,则表示AdvA字段中存储的是广播者的随机设备地址。
- RxAdd:此字段用于指示目标设备地址的类型。若其值为0,则表示TargetA字段中存储的是目标设备的公共设备地址;若其值为1,则表示TargetA字段中存储的是目标设备的随机设备地址。
- ChSel:若广播者支持LE信道选择算法#2功能,则此字段应设置为1。这有助于减少广播过程中的信道干扰,提高通信效率。
2.3.2. 有效载荷字段
ADV_DIRECT_IND PDU(协议数据单元)的有效载荷字段如下图所示。
- AdvA:此字段存储广播者的设备地址,具体是公共地址还是随机地址,由TxAdd字段决定。
- TargetA:此字段存储此PDU所针对的目标设备的地址。具体是公共地址还是随机地址,由RxAdd字段决定。
2.3.3. 功能和用途
ADV_DIRECT_IND的主要功能是允许广播者以定向的方式向特定设备发送广播信息,并邀请该设备发起连接请求。这种广播类型确保了只有被明确寻址的目标设备才能响应广播并建立连接,从而提高了通信的安全性和效率。
-
设备间快速连接:ADV_DIRECT_IND用于实现设备间的快速连接。当广播者想要与特定设备建立连接时,它会发送ADV_DIRECT_IND PDU(协议数据单元),其中包含目标设备的地址。目标设备在接收到这个PDU后,可以立即发起连接请求,从而建立ACL(异步无连接,一主多从之间的多点连接)连接。
-
资源优化:由于ADV_DIRECT_IND是定向的,它减少了不必要的广播开销。广播者不需要向所有设备广播信息,而是只向特定设备发送广播,从而节省了广播资源和功耗。
-
安全性提升:通过定向广播,ADV_DIRECT_IND增强了通信的安全性。只有被明确寻址的目标设备才能响应广播并建立连接,这降低了未经授权的设备接入网络的风险。
-
应用场景广泛:ADV_DIRECT_IND适用于各种需要设备间快速、安全连接的场景。例如,在智能家居系统中,当某个设备(如智能灯泡)需要与其他设备(如智能手机或智能音箱)建立连接时,可以使用ADV_DIRECT_IND来实现快速、定向的连接。
2.3.4. 工作模式
ADV_DIRECT_IND支持高占空比和低占空比两种工作模式:
- 高占空比模式:用于快速ACL连接/重连。该模式为高能耗以及高带宽占用广播模式,仅在需要快速建立连接时使用。
- 低占空比模式:用于慢速ACL连接/重连,或在不知道目标设备是否在通讯范围内时使用。在低占空比模式中,两个ADV_DIRECT_IND数据包发送间隔应小于或等于10毫秒。
2.3.5. 注意事项
- ADV_DIRECT_IND PDU不包含任何来自广播者主机的数据。其主要目的是通知目标设备广播者的存在,并允许目标设备与广播者建立连接。
- 由于ADV_DIRECT_IND PDU是定向广播,因此它通常用于已经知道彼此地址的设备之间的连接建立过程。这有助于减少不必要的广播干扰,提高蓝牙网络的效率。
- 在使用ADV_DIRECT_IND PDU时,应确保广播者和目标设备的地址类型(公共或随机)与TxAdd和RxAdd字段的设置相匹配。
ADV_DIRECT_IND PDU是蓝牙LE技术中用于定向连接广播的关键协议数据单元。它允许设备以高效且安全的方式与目标设备建立连接,从而支持各种蓝牙LE应用场景,如智能家居、可穿戴设备等。
2.4. ADV_NONCONN_IND
ADV_NONCONN_IND(不可连接的非定向广播指示PDU)是低功耗蓝牙(BLE)技术中用于非连接和非扫描的非定向广播事件的一种协议数据单元(PDU)。ADV_NONCONN_IND PDU主要由头部字段和有效载荷字段组成。
2.4.1. 头部字段
- TxAdd:此字段位于广播物理信道PDU头部,用于指示AdvA字段中广播者地址的类型。当TxAdd为0时,表示AdvA字段包含的是广播者的公共设备地址;当TxAdd为1时,表示AdvA字段包含的是广播者的随机设备地址。
2.4.2. 有效载荷字段
ADV_NONCONN_IND PDU 的有效载荷字段如下图所示。
- AdvA:应包含广播者的公共或随机设备地址,具体由TxAdd字段指示。
- AdvData:如果此字段不为空,则包含来自广播者主机的广播数据。这些数据可以包含各种类型的信息,如设备名称、服务标识等。
2.4.3. 功能与用途
ADV_NONCONN_IND PDU是BLE技术中用于非连接和非扫描的非定向广播事件的关键协议数据单元。它的主要功能是允许广播者向周围设备发送信息,而无需与这些设备建立连接或允许它们发送扫描请求。
-
设备发现:ADV_NONCONN_IND PDU可以用于设备发现,允许广播者向周围设备宣告其存在。这对于那些希望被其他设备发现但不想立即建立连接的设备来说非常有用。
-
信息广播:广播者可以使用ADV_NONCONN_IND PDU来广播各种信息,如设备名称、服务UUID、制造商特定数据等。这些信息可以被周围的任何BLE设备接收,但接收设备无法主动发送扫描请求来获取更多信息。
-
低功耗:由于ADV_NONCONN_IND PDU不需要建立连接,因此它有助于降低广播者和接收设备的功耗。这对于那些资源受限的设备来说尤为重要,因为它们需要尽可能长时间地运行而不需要频繁充电。
-
特定应用场景:ADV_NONCONN_IND PDU在某些特定应用场景中非常有用。例如,iBeacon设备就使用这种类型的PDU来广播其存在和相关信息,以便其他设备可以检测到它们并根据接收到的信息执行特定的操作(如导航、位置追踪等)。
2.4.4. 注意事项
- 非连接性:ADV_NONCONN_IND PDU不允许接收设备与之建立连接。这意味着广播者只是单向地发送信息,而不期望接收任何响应或建立连接。
- 非扫描性:与ADV_SCAN_IND PDU不同,ADV_NONCONN_IND PDU不允许接收设备进行主动扫描以获取更多信息。接收设备只能被动地接收广播信息。
- 非定向性:ADV_NONCONN_IND PDU是非定向的,意味着它会被广播到所有可用的广播信道。这样,周围的任何BLE设备都有可能接收到这个PDU。
- 广播数据:AdvData字段可以包含各种类型的信息,但广播者需要确保这些信息对于接收设备是有用且相关的。过多的或无关的信息可能会导致接收设备的处理负担增加或浪费带宽。
ADV_NONCONN_IND PDU是BLE技术中用于非连接和非扫描的非定向广播事件的关键协议数据单元。它允许广播者以高效且安全的方式向周围设备发送信息,而无需建立连接或允许接收设备进行主动扫描。这有助于减少不必要的连接建立和扫描操作,从而提高蓝牙网络的效率和安全性。
2.5. ADV_SCAN_IND
ADV_SCAN_IND(可扫描的非定向广播指示PDU)是BLE技术中用于可扫描的非定向广播事件的一种关键协议数据单元(PDU)。ADV_SCAN_IND PDU由头部字段和有效载荷字段组成。
2.5.1. 头部字段
- TxAdd:此字段位于广播物理信道PDU的头部,用于指示AdvA字段中广播者地址的类型。当TxAdd为0时,表示AdvA字段包含的是广播者的公共设备地址;当TxAdd为1时,表示AdvA字段包含的是广播者的随机设备地址。
2.5.2. 有效载荷字段
ADV_SCAN_IND协议数据单元(PDU)的有效载荷字段如下图所示。
- AdvA:此字段应包含广播者的公共或随机设备地址,具体由TxAdd字段指示。
- AdvData:如果此字段不为空,则包含来自广播者主机的广播数据。这些数据可以包含设备名称、服务UUID、制造商特定数据等,供扫描设备获取更多关于广播者的信息。
2.5.3. 功能与用途
-
宣告可用性:ADV_SCAN_IND PDU用于向周围设备宣告广播者的存在,并邀请它们发送扫描请求以获取更多信息。
-
非定向广播:ADV_SCAN_IND PDU是非定向的,意味着它会被广播到所有可用的广播信道。这样,周围的任何扫描设备都有可能接收到这个PDU,并了解到广播者的存在。
-
可扫描性:与ADV_NONCONN_IND PDU(不可连接的非定向广播指示PDU)不同,ADV_SCAN_IND PDU允许扫描设备发送扫描请求以获取更多信息。这使得ADV_SCAN_IND PDU在需要设备间信息交换但不想立即建立连接的场景中非常有用。
-
信息交换:当扫描设备接收到ADV_SCAN_IND PDU并决定进一步了解广播者时,它会发送SCAN_REQ PDU。广播者在接收到SCAN_REQ PDU后,会发送SCAN_RSP PDU作为响应,其中包含广播者的额外信息,如完整的设备名称、服务列表等。
-
节省资源:由于ADV_SCAN_IND PDU允许设备在不建立连接的情况下交换信息,因此它有助于节省设备的资源和功耗。这对于资源受限的BLE设备来说尤为重要。
-
灵活性:ADV_SCAN_IND PDU的广播和扫描机制非常灵活,可以根据具体的应用场景进行调整和优化。例如,广播者可以根据需要调整广播间隔和广播数据的内容,而扫描设备则可以根据自己的兴趣和需要来决定是否发送扫描请求。
2.5.4. 广播与扫描过程
- 广播过程:广播者以一定的间隔发送ADV_SCAN_IND PDU。这些PDU包含广播者的地址和可能的广播数据。
- 扫描过程:扫描设备监听广播信道,并接收ADV_SCAN_IND PDU。当扫描设备接收到感兴趣的广播时,它可以发送SCAN_REQ PDU以请求更多信息。
- 响应过程:广播者在接收到SCAN_REQ PDU后,会发送SCAN_RSP PDU作为响应。SCAN_RSP PDU包含广播者的额外信息,如完整的设备名称、服务列表等。
2.5.5. 注意事项
- 非定向性:ADV_SCAN_IND PDU是非定向的,意味着它会被广播到所有可用的广播信道,并被周围的任何扫描设备接收。
- 可扫描性:与ADV_NONCONN_IND PDU不同,ADV_SCAN_IND PDU允许扫描设备主动发送SCAN_REQ PDU以获取更多信息。这使得ADV_SCAN_IND PDU在需要设备间信息交换但不想建立连接的场景中非常有用。
- 广播数据:AdvData字段的内容应由广播者根据需要进行配置。过多的或无关的信息可能会导致扫描设备的处理负担增加或浪费带宽。
ADV_SCAN_IND PDU是蓝牙LE技术中用于可扫描的非定向广播事件的关键协议数据单元。它允许广播者以高效且安全的方式向周围设备广播信息,并允许扫描设备根据需要获取更多关于广播者的详细信息。这有助于设备间的信息交换和发现,而无需建立连接。这种机制为设备间的信息交换和发现提供了一种灵活且节能的方式。
2.6. ADV_EXT_IND
ADV_EXT_IND(扩展广播指示协议数据单元)是BLE 5.0及更高版本中引入的一种新型广播PDU(协议数据单元),用于支持更丰富的广播内容和更灵活的广播方式。
2.6.1. 字段说明
ADV_EXT_IND PDU可用于由AdvMode(广播模式)字段值所指示的广播事件中。 当且仅当存在TargetA(目标地址)字段,或者存在AuxPtr(辅助指针)字段且其指向一个存在TargetA字段的PDU时,使用ADV_EXT_IND PDU的广播事件才是定向的。
ADV_EXT_IND PDU中允许使用的通用扩展广播有效载荷格式字段如下表所示。
ADV_EXT_IND PDU中可能包含的字段包括:
- AdvMode:指示广播事件的模式。
- TargetA:指定目标设备的地址(如果播是定向的)。
- AuxPtr:指向包含TargetA字段的辅助PDU(如果广播是定向的,并且TargetA字段不在ADV_EXT_IND PDU中)。
- 其他字段:根据Common Extended Advertising Payload Format的规定,还可能包含其他字段,如广播数据、制造商特定数据等。
对于不具有ACAD(辅助连接广播数据)或AdvData(广播数据)的不可连接且不可扫描的定向事件类型以及不可连接且不可扫描的无方向事件类型,控制器可以选择是否使用辅助数据包。
2.6.2. 功能与特点
- 扩展广播内容:ADV_EXT_IND支持比传统广播PDU更丰富的广播内容。通过使用Common Extended Advertising Payload Format(通用扩展广播有效载荷格式),ADV_EXT_IND可以携带更多的数据,包括设备名称、服务UUID、制造商特定数据等。
- 定向与非定向广播:ADV_EXT_IND可用于定向或非定向广播。定向广播允许广播者指定目标设备地址,只有被寻址的设备才能响应广播并建立连接。非定向广播则接受来自任何设备的连接请求。
- 主副广播信道:ADV_EXT_IND可以在主广播信道上发送,并指向在副广播信道上发送的辅助广播PDU(AUX_ADV_IND)。这增加了广播的灵活性和数据容量。
- 支持多种事件类型:ADV_EXT_IND可用于多种广播事件类型,包括可连接的可扫描非定向广播、可连接的定向广播、不可连接不可扫描非定向广播等。
2.6.3. 应用场景
- 设备发现与连接:ADV_EXT_IND使得设备能够以更灵活的方式被发现和连接。例如,在智能家居系统中,智能设备可以使用ADV_EXT_IND广播其存在和服务信息,以便其他设备能够发现并与之连接。
- 数据传输:除了设备发现外,ADV_EXT_IND还可以用于数据传输。例如,在健康监测领域,智能手环可以使用ADV_EXT_IND将健康数据发送给智能手机或其他接收设备。
- 广播更新:ADV_EXT_IND支持周期广播和扩展广播功能,这使得设备能够定期更新其状态或信息,而无需建立连接。
2.6.4. 注意事项
- 广播间隔:为了平衡功耗和广播的可发现性,设备需要合理设置ADV_EXT_IND的广播间隔。
- 广播数据:ADV_EXT_IND中包含的广播数据应该简洁明了,只包含必要的信息。
- 安全性:在使用ADV_EXT_IND进行设备发现和连接建立时,需要注意安全性问题。设备应该采用适当的加密和认证机制来保护通信数据的安全性和完整性。
2.7. AUX_ADV_IND
AUX_ADV_IND广播用于在BLE设备的广播事件中发送额外的数据。它是扩展广播功能的一个关键元素,允许设备在保持低功耗的同时,传输比传统广播包更多的信息。这种广播类型特别适用于需要传输大量数据或进行复杂通信的BLE应用。此PDU遵循通用扩展广播有效载荷格式,它包含了一系列标准化的字段,用于传输各种信息。此PDU可用于由AdvMode字段值指示的广播事件。AdvMode 字段指示了 AUX_ADV_IND 数据包所用于的广播事件类型,并且其值应与该 PDU 的上级协议数据单元中的相应字段值相同。
AUX_ADV_IND PDU 中允许使用的通用扩展广播有效载荷格式字段如下表所示。
- PHY(物理层)指定:用于AUX_ADV_IND的PHY应在上级PDU的AuxPtr字段中指定。在AUX_ADV_IND PDU中的任何AuxPtr字段中指定的PHY应与发送该PDU时使用的PHY相同。
- ADI字段:如果此PDU和它的上级PDU都包含ADI字段,则这些字段中的值应相同。ADI字段可用于检测冲突。
- 辅助PDU要求:任何辅助PDU都应是AUX_CHAIN_IND PDU。
- SyncInfo字段:当存在时,SyncInfo字段应指向一个AUX_SYNC_IND PDU。
2.7.1. 特点与优势
- 数据容量大:相比传统广播包,AUX_ADV_IND广播可以携带更多的数据,从而满足更复杂的应用需求。
- 灵活性高:AUX_ADV_IND广播可以与其他广播类型(如ADV_EXT_IND)结合使用,形成广播集,实现更灵活的广播策略。
- 低功耗:尽管数据容量增加,但AUX_ADV_IND广播仍然保持了BLE技术的低功耗特性,适用于各种移动设备和物联网应用。
2.7.2. 工作原理
- 广播事件触发:当BLE设备需要发送扩展广播时,会首先发送一个ADV_EXT_IND广播(如果适用),并在其中包含一个指向AUX_ADV_IND广播的指针。
- AUX_ADV_IND广播发送:接收设备在收到ADV_EXT_IND广播后,会根据其中的指针信息,在指定的时间和信道上接收AUX_ADV_IND广播。
- 数据接收与处理:接收设备在收到AUX_ADV_IND广播后,会解析其中的数据,并根据需要进行处理或响应。
2.7.3. 应用场景
- 物联网(IoT)设备:AUX_ADV_IND广播可用于IoT设备之间的数据传输和通信,实现设备间的互联互通。
- 蓝牙Beacon:在博物馆、商场等场所,AUX_ADV_IND广播可用于发送定位信息和营销内容,提升用户体验。
- 医疗设备:在医疗领域,AUX_ADV_IND广播可用于传输患者的健康数据或医疗设备的状态信息,实现远程监控和管理。
2.7.4. 注意事项
- 兼容性:在使用AUX_ADV_IND广播时,需要确保接收设备支持BLE扩展广播功能,否则可能无法正确接收和处理数据。
- 广播参数设置:合理设置广播参数(如广播间隔、广播类型等)对于提高数据传输效率和降低功耗至关重要。
- 数据安全性:在传输敏感数据时,需要采取适当的安全措施(如加密、认证等)来保护数据的完整性和机密性。
AUX_ADV_IND广播作为BLE技术中扩展广播功能的一个重要组成部分,具有数据容量大、灵活性高和低功耗等优势。它在物联网、蓝牙Beacon和医疗设备等领域具有广泛的应用前景。在使用时,需要注意兼容性、广播参数设置和数据安全性等问题。
2.8. AUX_SYNC_IND
AUX_SYNC_IND
(辅助同步指示)PDU(协议数据单元)使用通用扩展广播载荷格式。主要用于周期性广播中,以确保接收端能够同步并接收后续发送的辅助数据链。通过AUX_SYNC_IND PDU,蓝牙设备可以在周期性广播期间,向接收端提供同步信息,从而允许接收端正确地接收和解析后续的辅助数据PDU(如AUX_CHAIN_IND PDU)。
2.8.1. 格式与字段
AUX_SYNC_IND PDU遵循BLE扩展广播载荷格式的规范。其结构包含多个字段,这些字段共同构成了PDU的完整内容,以确保接收端能够正确同步并接收后续发送的辅助数据链。
- AdvMode字段:通常设置为0b00,以指示该PDU作为周期性广播的一部分。
- Common Extended Advertising Payload Format中的其他允许字段:这些字段可能因蓝牙版本或规范而异,但通常包括用于同步的辅助信息,如广播SID(服务标识符)等。(具体字段如下表2.6所示,但具体字段可能因蓝牙版本或规范而异)
- PHY(物理层)指示:指示辅助广播数据包到达的物理层。
- ADI(广播数据信息)字段:其中的广播SID子字段是AUX_SYNC_IND PDU中的一个关键字段,用于确保PDU与上级PDU的同步。该字段应具有与此PDU的上级PDU(如ADV_EXT_IND PDU)中相同的值。
此外,AUX_SYNC_IND PDU还可能包含其他字段,如SyncInfo(同步信息)、Offset(偏移量)等,这些字段用于提供关于后续辅助数据PDU(如AUX_CHAIN_IND PDU)的同步和定时信息。
2.8.2. 应用与功能
AUX_SYNC_IND PDU在多个领域具有广泛的应用和重要的功能:
- LE Audio(低功耗音频):在音频数据传输中,AUX_SYNC_IND PDU可用于同步音频数据,确保音频的连续性和稳定性。这是实现LE Audio广播式音频流(BIS)同步的关键机制之一。
- 蓝牙Mesh网络:在网络设备同步中,AUX_SYNC_IND PDU可用于同步网络中的设备,以实现更高效的通信和数据传输。这有助于确保蓝牙Mesh网络中的设备能够按照预定的时间间隔和顺序进行通信。
- 其他需要传输大量数据或实现复杂广播功能的场景:AUX_SYNC_IND PDU在这些场景中同样具有广泛的应用潜力,可用于确保数据的同步和完整性。
2.8.3. 工作流程
AUX_SYNC_IND PDU的工作流程通常涉及以下几个步骤:
- 广播设备发送ADV_EXT_IND PDU:在37、38、39主频段进行广播,其扩展头字段包含一个AuxPtr字段,指向AUX_ADV_IND PDU。
- 接收设备接收ADV_EXT_IND PDU:接收设备监听这些主频段,并接收ADV_EXT_IND PDU。通过解析AuxPtr字段,接收设备可以找到AUX_ADV_IND PDU的频段和偏移位置。
- 广播设备发送AUX_ADV_IND PDU:在找到的频段上广播AUX_ADV_IND PDU,该PDU包含SyncInfo字段,指向AUX_SYNC_IND PDU。
- 接收设备接收AUX_ADV_IND PDU:接收设备监听指定的频段,并接收AUX_ADV_IND PDU。通过解析SyncInfo字段,接收设备可以获取AUX_SYNC_IND PDU的同步信息。
- 广播设备发送AUX_SYNC_IND PDU:根据SyncInfo字段提供的同步信息,广播设备在适当的时间发送AUX_SYNC_IND PDU。
- 接收设备接收并解析AUX_SYNC_IND PDU:接收设备接收AUX_SYNC_IND PDU,并解析其中的同步信息和其他关键字段。根据这些信息,接收设备可以正确地同步并接收后续的辅助数据PDU(如AUX_CHAIN_IND PDU)。
2.8.4. 注意事项
在使用AUX_SYNC_IND PDU时,需要注意以下几点:
- 确保PDU的正确性和完整性:在发送AUX_SYNC_IND PDU之前,需要确保该PDU的正确性和完整性。这包括检查字段的值是否符合规范、是否包含必要的同步信息等。
- 考虑广播设备的状态和配置:广播设备的状态和配置对AUX_SYNC_IND PDU的发送和接收具有重要影响。因此,在使用AUX_SYNC_IND PDU之前,需要确保广播设备处于正确的状态并进行了适当的配置。
- 考虑接收设备的性能和限制:接收设备的性能和限制也可能影响AUX_SYNC_IND PDU的接收和解析。因此,在选择接收设备时,需要确保其能够支持所需的蓝牙版本和规范,并具有足够的处理能力和存储空间来接收和解析AUX_SYNC_IND PDU。
- 注意信道冲突和干扰:在蓝牙通信中,信道冲突和干扰是常见的问题。为了避免这些问题对AUX_SYNC_IND PDU的影响,建议使用足够多的信道来避免信道冲撞,并考虑使用抗干扰技术来提高通信的可靠性。
AUX_SYNC_IND PDU是BLE扩展广播中的一个重要组成部分,它用于在周期性广播中同步辅助数据链。通过遵循相应的技术要求与规范,AUX_SYNC_IND PDU可以确保接收端正确地接收和解析后续的辅助数据PDU,从而实现更高效、可靠的通信和数据传输。在BLE的广泛应用场景中,AUX_SYNC_IND PDU发挥着至关重要的作用。
2.9. AUX_CHAIN_IND
AUX_CHAIN_IND(辅助链指示)PDU是BLE扩展广播中使用的一种特定类型的PDU。它主要用于承载额外的广播数据(AdvData),这些数据可能由于长度或内容复杂性而无法完全包含在上级PDU(如AUX_ADV_IND、AUX_SYNC_IND、AUX_SCAN_RSP等)中。因此,AUX_CHAIN_IND PDU可以看作是一个链式数据结构中的一环,用于连接和传输额外的广播数据。
2.9.1. 格式与字段
AUX_CHAIN_IND PDU的格式与蓝牙BLE中的其他PDU类似,但具有一些特定的字段和特性。其主要字段包括:
- AdvMode字段:AUX_CHAIN_IND PDU的AdvMode字段应设置为0b00,以符合其作为扩展广播一部分的特定模式。
- 通用扩展广播载荷格式字段:AUX_CHAIN_IND PDU允许使用表2.7中列出的通用扩展广播载荷格式字段(尽管具体字段可能因蓝牙版本或规范而异)。
- PHY(物理层):用于AUX_CHAIN_IND PDU的物理层应与用于其上级PDU的物理层相同,以确保数据传输的一致性和可靠性。
- ADI字段:当存在时,AUX_CHAIN_IND PDU的ADI字段应具有与上级PDU中相同的值。这有助于接收端正确地将AUX_CHAIN_IND PDU与其上级PDU相关联。ADI字段还可以用于检测数据碰撞,从而提高数据传输的可靠性。
2.9.2. 应用与功能
AUX_CHAIN_IND PDU主要应用于以下场景和功能:
- 扩展广播数据的传输:在BLE的扩展广播事件中,AUX_CHAIN_IND PDU用于传输额外的广播数据。当广播数据超过传统广播PDU的载荷限制时,可以使用AUX_CHAIN_IND PDU来传输剩余的数据。
- 支持复杂广播场景:在需要同时处理多个广播源或复杂广播场景的情况下,AUX_CHAIN_IND PDU提供了一种灵活且高效的机制来传输广播数据。通过使用AUX_CHAIN_IND PDU,广播设备可以将其数据分割成多个部分,并在不同的时间点上发送这些部分,从而避免数据丢失和冲突。
- 提高广播效率:AUX_CHAIN_IND PDU的使用可以提高广播效率。由于它可以携带更多的数据,因此可以减少广播事件的次数和频率,从而降低广播设备的能耗和网络的拥塞程度。
AUX_CHAIN_IND PDU在BLE扩展广播中发挥着重要作用,特别是在需要传输大量数据或实现复杂广播功能的场景中。以下是一些具体的应用场景:
- LE Audio(低功耗音频)应用:在LE Audio应用中,AUX_CHAIN_IND PDU可以用于传输音频数据的额外片段。由于音频数据通常较大且需要连续传输,因此使用AUX_CHAIN_IND PDU可以有效地扩展数据传输的容量,从而支持更长的音频播放或更高的音频质量。
- 蓝牙Mesh网络:在蓝牙Mesh网络中,AUX_CHAIN_IND PDU可以用于传输网络同步信息、设备配置数据等复杂内容。这些数据的传输对于蓝牙Mesh网络的正常运行至关重要,因此使用AUX_CHAIN_IND PDU可以确保数据的完整性和可靠性。
- 其他复杂广播场景:除了上述应用场景外,AUX_CHAIN_IND PDU还可以用于其他需要传输大量数据或实现复杂广播功能的场景。例如,在物联网(IoT)应用中,可能需要传输设备的状态信息、传感器数据等,这些数据可以通过AUX_CHAIN_IND PDU进行传输。
尽管AUX_CHAIN_IND PDU在BLE扩展广播中发挥着重要作用,但其使用也受到一些限制:
- 链式结构要求:任何跟随AUX_CHAIN_IND PDU的辅助PDU都应该是另一个AUX_CHAIN_IND PDU,这构成了辅助数据链的一部分。这意味着在使用AUX_CHAIN_IND PDU时,需要确保PDU之间的链式结构正确,以便数据能够正确传输和解析。
- 规范和技术要求:AUX_CHAIN_IND PDU的使用应遵循BLE扩展广播的相关规范和技术要求。这包括PDU的结构、字段设置、数据传输速率等方面的要求。在使用AUX_CHAIN_IND PDU时,需要确保这些要求得到满足,以确保数据的正确传输和设备的兼容性。
- 设备兼容性:由于蓝牙版本和设备的差异,某些设备可能不支持AUX_CHAIN_IND PDU的使用。因此,在开发和使用BLE设备时,需要考虑到设备的兼容性,并根据需要进行适当的适配和测试。
2.9.3. 工作流程
AUX_CHAIN_IND PDU的工作流程通常包括以下几个步骤:
- 广播设备发送ADV_EXT_IND PDU:在扩展广播事件的开始阶段,广播设备首先发送ADV_EXT_IND PDU。该PDU包含扩展广播的头部信息和指向AUX_ADV_IND PDU的指针(AuxPtr)。
- 接收方接收并处理ADV_EXT_IND PDU:接收方接收ADV_EXT_IND PDU后,解析其头部信息和指针字段,以确定后续AUX_ADV_IND PDU的接收时间和频道。
- 广播设备发送AUX_ADV_IND PDU:在ADV_EXT_IND PDU之后,广播设备发送AUX_ADV_IND PDU。该PDU包含实际的广播数据和可能的同步信息(SyncInfo),用于与后续的AUX_CHAIN_IND PDU进行同步。
- (可选)广播设备发送AUX_CHAIN_IND PDU:如果广播数据仍然未完全发送完毕,广播设备将继续发送AUX_CHAIN_IND PDU来传输剩余的数据。这些PDU将按照预定的顺序和时间间隔发送,以确保接收方能够正确地接收和处理它们。
- 接收方接收并处理AUX_CHAIN_IND PDU:接收方接收AUX_CHAIN_IND PDU后,解析其载荷部分以获取广播数据。如果接收方需要继续接收后续的AUX_CHAIN_IND PDU,它将根据同步信息(如果有的话)来确定下一个PDU的接收时间和频道。
- 广播事件结束:当所有广播数据都已成功发送并接收后,扩展广播事件结束。广播设备和接收方都可以进入空闲状态或执行其他操作。
2.9.4. 注意事项
在使用AUX_CHAIN_IND PDU时,需要注意以下几点:
- PDU类型正确性:在发送和接收过程中,必须确保PDU类型为AUX_CHAIN_IND,以避免通信错误或数据丢失。
- 同步信息的准确性:如果使用了同步信息(SyncInfo)来同步AUX_CHAIN_IND PDU的发送和接收,必须确保同步信息的准确性。任何同步错误都可能导致数据丢失或通信失败。
- 数据完整性:在发送AUX_CHAIN_IND PDU时,必须确保数据的完整性。如果数据在传输过程中被损坏或丢失,接收方可能无法正确地解析和处理PDU。
- 广播频率和能耗:虽然AUX_CHAIN_IND PDU可以提高广播效率,但频繁的广播也会增加广播设备的能耗。因此,在使用时应权衡广播频率和能耗之间的关系,以找到最佳的平衡点。
- 兼容性:AUX_CHAIN_IND PDU是蓝牙BLE 5.0及更高版本中引入的新特性。在使用之前,应确保广播设备和接收方都支持该特性,并进行充分的测试以确保兼容性。
AUX_CHAIN_IND PDU是蓝牙BLE扩展广播中的一种重要机制,它提供了传输额外广播数据的能力,并支持复杂广播场景和高效广播。在使用时,需要注意PDU类型正确性、同步信息的准确性、数据完整性、广播频率和能耗以及兼容性等方面的问题。
2.10. AUX_SYNC_SUBEVENT_IND
AUX_SYNC_SUBEVENT_IND PDU(辅助同步子事件指示协议数据单元)在BLE的带响应周期广播(PAwR)中扮演着至关重要的角色。AUX_SYNC_SUBEVENT_IND PDU在PAwR中起到了承载广播数据、指示响应时隙以及维护广播链的重要作用。它的使用使得BLE技术能够支持那些需要频繁更新广播数据并希望接收端能够实时响应的应用场景,从而进一步拓展了BLE技术的应用范围。
2.10.1. PDU格式与字段
AUX_SYNC_SUBEVENT_IND PDU使用通用扩展广播载荷格式。其字段设置如下:
- AdvMode字段:该字段用于指示广播模式。在AUX_SYNC_SUBEVENT_IND PDU中,AdvMode字段应设置为特定的值(如0b00),以符合其作为扩展广播一部分的特定模式。
- 通用扩展广播载荷格式字段:AUX_SYNC_SUBEVENT_IND PDU允许使用表2.8中列出的通用扩展广播载荷格式字段。这些字段可能包括广播数据、设备地址、广播类型等信息,具体取决于PDU的用途和BLE规范的定义。
- PHY(物理层)字段:该字段用于指示用于发送AUX_SYNC_SUBEVENT_IND PDU的物理层参数。这些参数可能包括调制方式、编码方式、传输速率等,以确保数据能够在特定的物理信道上正确传输。
- ADI(广播数据信息)字段:ADI字段用于包含有关广播事件的信息。在AUX_SYNC_SUBEVENT_IND PDU中,ADI字段的Advertising SID(广播服务标识符)子字段应具有与此PDU的上级PDU中相同的值,以确保广播事件的正确关联和解析。
- 其他字段:除了上述字段外,AUX_SYNC_SUBEVENT_IND PDU还可能包含其他由BLE规范定义的字段。这些字段可能用于指示广播数据的格式、长度、校验等信息,以确保数据的完整性和准确性。
2.10.2. 应用与功能
在BLE技术中,PAwR是一种支持无连接的双向应用程序数据通信的广播模式。它允许广播设备以固定时间间隔发送含有频繁改变的广播数据,并在响应时隙中接收来自观察者的响应。这种模式特别适用于需要实时更新数据并期望接收端能够做出快速响应的应用场景,如电子货架标签(ESL)、实时定位系统(RTLS)等。
AUX_SYNC_SUBEVENT_IND PDU在PAwR中的主要功能是:
- 承载广播数据:该PDU用于携带广播设备希望发送给接收端的频繁改变的广播数据。这些数据可能包括设备的状态、位置、传感器读数等。
- 指示响应时隙:除了广播数据外,AUX_SYNC_SUBEVENT_IND PDU还包含有关响应时隙的信息。这允许接收端知道何时应该发送响应数据,从而确保数据的实时性和准确性。
- 维护广播链:在PAwR中,广播数据通过一系列PDU(包括AUX_SYNC_IND、AUX_CHAIN_IND等)以链式结构进行传输。AUX_SYNC_SUBEVENT_IND PDU作为这一链式结构中的一环,确保了广播数据的连续性和完整性。
2.10.3. 工作流程
在PAwR的工作流程中,AUX_SYNC_SUBEVENT_IND PDU的使用通常遵循以下步骤:
- 广播设备发送AUX_SYNC_IND:首先,广播设备会发送一个AUX_SYNC_IND PDU,用于初始化PAwR会话,并通知接收端即将发送的广播数据的类型和格式。
- 广播设备发送AUX_SYNC_SUBEVENT_IND:随后,广播设备会按照固定时间间隔发送AUX_SYNC_SUBEVENT_IND PDU,其中包含频繁改变的广播数据以及响应时隙的信息。
- 接收端接收并处理:接收端在接收到AUX_SYNC_SUBEVENT_IND PDU后,会解析其中的广播数据,并根据响应时隙的信息准备响应数据。
- 接收端发送响应:在指定的响应时隙内,接收端会发送响应数据给广播设备,从而完成一次完整的PAwR交互。
2.10.4 注意事项
在使用AUX_SYNC_SUBEVENT_IND(辅助同步子事件指示)时,需要注意以下事项以确保其正确性和有效性:
- 链式结构:在PAwR中,AUX_SYNC_SUBEVENT_IND PDU通常与其他类型的PDU(如AUX_SYNC_IND、AUX_SYNC_SUBEVENT_RSP等)一起使用,形成链式结构。这要求在使用AUX_SYNC_SUBEVENT_IND PDU时,需要确保PDU之间的链式结构正确,以便数据能够正确传输和解析。
- 格式与字段遵循规范:AUX_SYNC_SUBEVENT_IND应遵循BLE核心规范中定义的格式和字段。确保PDU(协议数据单元)的构造符合规范要求,以避免数据解析错误或通信失败。
- 广播与响应机制:在带响应周期广播(PAwR)中,AUX_SYNC_SUBEVENT_IND用于承载广播数据和指示响应时隙。确保广播设备按照固定时间间隔发送PDU,并正确设置响应时隙,以便观察者能够准确接收并响应。观察者需要在指定的响应时隙内发送响应数据给广播设备。如果观察者错过响应时隙,可能需要等待下一个广播周期才能再次发送响应。
- 数据完整性与校验:AUX_SYNC_SUBEVENT_IND中的数据应包含必要的校验信息(如CRC校验),以确保数据的完整性和准确性。在接收端,应对接收到的数据进行校验,以检测并纠正可能的传输错误。
- 同步与定时:AUX_SYNC_SUBEVENT_IND的发送和接收需要严格的同步和定时控制。确保广播设备和观察者之间的时钟同步,以避免因时钟偏差导致的通信失败。在广播设备中,应使用高精度的定时器来生成广播事件和响应时隙。在观察者中,应使用相应的定时器来监听广播事件并发送响应。
- 设备兼容性与测试:在开发BLE设备时,应确保设备支持AUX_SYNC_SUBEVENT_IND的功能,并符合BLE核心规范的要求。在设备上市前,应进行充分的测试和验证,以确保AUX_SYNC_SUBEVENT_IND的正确性和兼容性。测试应包括功能测试、性能测试、兼容性测试等。
- 安全性考虑:在使用AUX_SYNC_SUBEVENT_IND时,应考虑数据的安全性。如果广播数据包含敏感信息,应使用加密技术来保护数据的传输和存储。观察者在接收和处理广播数据时,应验证数据的来源和完整性,以防止恶意攻击或数据篡改。
使用AUX_SYNC_SUBEVENT_IND时需要注意格式与字段遵循规范、广播与响应机制、数据完整性与校验、同步与定时、设备兼容性与测试以及安全性考虑等方面的问题。通过遵循这些注意事项,可以确保AUX_SYNC_SUBEVENT_IND在BLE通信中的正确性和有效性。
2.11. AUX_SYNC_SUBEVENT_RSP
AUX_SYNC_SUBEVENT_RSP是蓝牙技术中用于带响应周期广播(Periodic Advertising with Response,简称PAwR)的一个关键PDU(Protocol Data Unit,协议数据单元)类型。
2.11.1. 格式与字段
AUX_SYNC_SUBEVENT_RSP PDU在蓝牙通信中承载着特定的数据结构和字段,这些字段对于实现带响应周期广播至关重要。其格式和字段通常遵循蓝牙核心规范的定义,AUX_SYNC_SUBEVENT_RSP PDU 中允许使用的通用扩展广播有效载荷格式字段如下表所示。
包括但不限于以下关键部分:
- AdvMode(广播模式):设置为 0x00。
- 物理传输方案(PHY):与AUX_SYNC_SUBEVENT_IND PDU保持一致,以确保通信的兼容性和稳定性。
- 响应数据:包含同步设备对广播数据的响应信息,可能包括确认、状态更新或其他相关数据。
2.11.2. 应用与功能
AUX_SYNC_SUBEVENT_RSP PDU在带响应周期广播中发挥着重要作用,其应用和功能主要体现在以下几个方面:
- 实现双向通信:通过AUX_SYNC_SUBEVENT_RSP,同步设备可以对广播设备发送的AUX_SYNC_SUBEVENT_IND PDU进行响应,从而实现双向通信。
- 数据确认与更新:同步设备可以使用AUX_SYNC_SUBEVENT_RSP来确认接收到的广播数据,或者发送更新后的数据以响应广播设备的请求。
- 资源管理与优化:通过控制AUX_SYNC_SUBEVENT_RSP的发送时机和内容,广播设备和同步设备可以更有效地管理通信资源,优化通信性能。
2.11.3. 工作流程
带响应周期广播的工作流程通常包括以下几个步骤,其中AUX_SYNC_SUBEVENT_RSP PDU的发送和接收是关键环节:
- 广播设备发送AUX_ADV_IND:广播设备首先发送AUX_ADV_IND PDU,其中包含指向周期广播队列的同步信息(SyncInfo)字段。
- 广播设备发送AUX_SYNC_SUBEVENT_IND:在激活带响应周期广播队列后,广播设备按照固定时间间隔发送AUX_SYNC_SUBEVENT_IND PDU。
- 同步设备接收并处理:同步设备接收AUX_SYNC_SUBEVENT_IND PDU,并根据需要进行处理。如果需要响应,则准备AUX_SYNC_SUBEVENT_RSP PDU。
- 同步设备发送AUX_SYNC_SUBEVENT_RSP:同步设备在响应时隙中发送AUX_SYNC_SUBEVENT_RSP PDU,以回应广播设备的AUX_SYNC_SUBEVENT_IND PDU。
- 广播设备接收并处理响应:广播设备接收AUX_SYNC_SUBEVENT_RSP PDU,并根据需要进行进一步处理,如更新状态、发送新数据等。
2.11.4. 注意事项
在使用AUX_SYNC_SUBEVENT_RSP PDU时,需要注意以下几个方面的问题:
- 确保PDU类型正确:在发送和接收过程中,必须确保PDU类型正确,以避免通信错误或数据丢失。
- 保持物理传输方案一致:AUX_SYNC_SUBEVENT_RSP PDU的物理传输方案应与AUX_SYNC_SUBEVENT_IND PDU保持一致,以确保通信的兼容性和稳定性。
- 注意存取地址的设置:同步设备在发送AUX_SYNC_SUBEVENT_RSP PDU时,应确保存取地址设置为RspAA值,以区分其他类型的PDU并确保通信的准确性。
- 控制响应时机和内容:广播设备和同步设备应根据实际需求控制AUX_SYNC_SUBEVENT_RSP PDU的发送时机和内容,以优化通信资源和性能。
AUX_SYNC_SUBEVENT_RSP PDU在蓝牙带响应周期广播中发挥着重要作用,其格式与字段、应用与功能、工作流程和注意事项等方面都需要严格遵守蓝牙核心规范的定义和要求。
2.12. ADV_DECISION_IND
ADV_DECISION_IND(判定指示)PDU是蓝牙技术中引入的一种新型广播封包类型,特别是在蓝牙6.0及后续版本中得到了应用。它主要用于基于判定的广播过滤(DBAF)策略中,以提高广播数据传输的效率和减小延迟。
2.12.1. 格式与字段
ADV_DECISION_IND PDU 是BLE广播中用于基于判定过滤的辅助广播指示的一种PDU(协议数据单元)。其载荷(Payload)字段的格式与通用扩展广播载荷格式中的扩展头字段相同,但包含特定的字段用于判定逻辑。ADV_DECISION_IND 协议数据单元(PDU)的有效载荷字段如下图 所示。
该 PDU 可用于由 AdvMode(广播模式)字段值所指示的无方向广播事件中。
-
扩展头(Extended Header):与通用扩展广播载荷格式中的扩展头字段一致,可能包含AuxPtr(指向辅助封包的指针)、广播设备地址(如果适用)、广播数据信息(ADI)、发射功率等字段。ADV_DECISION_IND PDU 中允许使用的字段情况可通过下表 查看。
-
判定类型标志(Decision Type Flags):这是一个位字段,用于指示在判定数据字段中存在哪些子字段。每个位对应一个特定的子字段,如果位被设置为1,则表示相应的子字段存在;如果位被设置为0,则表示相应的子字段不存在。
-
判定数据(Decision Data)字段:该字段根据判定类型标志的内容而变化,可能包含可解析标记(Resolvable Tag)、任意数据(Arbitrary Data)等子字段。格式如下图所示:
- 可解析标记(Resolvable Tag):由Hash和Prand字段组成,用于与主机提供的密钥进行匹配判定。如果Hash字段的值等于ah(key, prand)(其中ah是定义在蓝牙核心规范第3卷H部分第2.2.2节的函数,key是主机提供的密钥,prand是可解析标记中的Prand字段值),则认为匹配成功。可解析标签应具下图12所示的格式。
- 任意数据(Arbitrary Data):在判定类型标志指示的子字段之后,任何剩余的八位字节(octet)都构成任意数据子字段。
2.12.2. 应用与功能
ADV_DECISION_IND PDU主要应用于以下场景和功能:
-
基于判定的广播过滤:通过引入判定数据字段,ADV_DECISION_IND PDU使得接收方能够基于接收到的判定封包的内容来决定是否接收与此封包关联的辅助封包(AUX_ADV_IND PDU)。这有助于接收方过滤掉不相关的广播数据,提高广播过滤的效率。
-
减小广播延迟:由于接收方可以更快地判断并接收相关的广播数据,ADV_DECISION_IND PDU有助于减小广播数据传输的延迟,提高通信的实时性。
-
支持复杂广播场景:在需要同时处理多个广播源或复杂广播场景的情况下,ADV_DECISION_IND PDU为接收方提供了一种灵活且高效的过滤机制。
2.12.3. 工作流程
ADV_DECISION_IND PDU的工作流程通常包括以下几个步骤:
-
广播设备发送ADV_DECISION_IND PDU:广播设备在发送辅助广播之前,先发送ADV_DECISION_IND PDU。该PDU包含判定数据字段,用于帮助扫描设备决定是否接收后续的辅助封包。
-
扫描设备接收并处理ADV_DECISION_IND PDU:扫描设备接收ADV_DECISION_IND PDU后,解析判定数据字段,并根据判定逻辑决定是否接收与此封包关联的辅助封包。
-
扫描设备接收AUX_ADV_IND PDU:如果扫描设备决定接收辅助封包,它将在后续的时间窗口中监听并接收AUX_ADV_IND PDU。
-
扫描设备向主机上报数据:扫描设备接收并处理完AUX_ADV_IND PDU后,将相关的应用层数据上报给主机。
2.12.4. 注意事项
在使用ADV_DECISION_IND PDU时,需要注意以下几点:
-
PDU类型正确性:在发送和接收过程中,必须确保PDU类型为ADV_DECISION_IND,以避免通信错误或数据丢失。
-
判定逻辑准确性:扫描设备应正确实现判定逻辑,以确保只接收与自身相关的广播数据。
-
广播数据相关性:广播设备应配置ADV_DECISION_IND PDU的判定数据字段,以便扫描设备能够检查此封包是否与其相关。
-
资源消耗:虽然ADV_DECISION_IND PDU有助于提高广播过滤效率,但也会增加一定的资源消耗(如处理时间和内存占用)。因此,在使用时应权衡其带来的好处和潜在的资源消耗。
-
兼容性:ADV_DECISION_IND PDU是蓝牙6.0及后续版本中引入的新特性。在使用之前,应确保广播设备和扫描设备都支持该特性。
ADV_DECISION_IND PDU是蓝牙技术中一种重要的广播封包类型,它在提高广播过滤效率、减小延迟以及支持复杂广播场景等方面发挥着重要作用。在使用时,需要注意PDU类型的正确性、过滤策略的配置以及广播数据的相关性等问题。
三、扫描PDU
在BLE通信中,扫描PDU是用于发起和响应设备扫描操作的关键组成部分。这些PDU在广播物理信道上传输,允许设备发现彼此并建立连接。以下广播物理信道PDU类型被称为扫描PDU:
- SCAN_REQ(扫描请求)
- SCAN_RSP(扫描响应)
- AUX_SCAN_REQ(辅助扫描请求)
- AUX_SCAN_RSP(辅助扫描响应)
SCAN_REQ和AUX_SCAN_REQ PDU被称为扫描请求PDU。SCAN_RSP和AUX_SCAN_RSP PDU被称为扫描响应PDU。
当这些PDU用于回复可扫描的广播时,它们所使用的物理层(PHY)应当与它们所回复的PDU所使用的物理层相同。
3.1. SCAN_REQ 和 AUX_SCAN_REQ
3.1.1. 格式与字段
1. PDU结构:
SCAN_REQ和AUX_SCAN_REQ PDU(协议数据单元)的结构相似,主要包含Payload(负载)字段。这些PDU在广播物理信道上传输,用于设备扫描过程中的请求操作。
2. Payload字段:
有效载荷字段如下图所示。
- ScanA:此字段包含扫描器的公共或随机设备地址。该地址的类型(公共或随机)由PDU头中的TxAdd字段指示。如果TxAdd=0,则ScanA为公共地址;如果TxAdd=1,则ScanA为随机地址。
- AdvA:此字段包含被扫描的广播器的地址,即此PDU所指向的设备的地址。同样,该地址的类型(公共或随机)由PDU头中的RxAdd字段指示。如果RxAdd=0,则AdvA为公共地址;如果RxAdd=1,则AdvA为随机地址。
3. PDU头字段:
- TxAdd:指示ScanA字段中的地址类型。
- RxAdd:指示AdvA字段中的地址类型。
- 其他字段(如PDU Type、RFU、Length等)在PDU头中也有其特定的含义和作用,但在此不详细展开。
3.1.2. 应用与功能
1. 应用场景:
SCAN_REQ和AUX_SCAN_REQ PDU主要用于BLE设备扫描过程中。当扫描器希望获取广播器的更多信息时,它会发送这些PDU。
2. 功能
- SCAN_REQ:用于请求从广播器获取额外信息。当扫描器检测到来自广播器的可扫描广播时,它会发送SCAN_REQ PDU以请求更多关于该设备的信息。
- AUX_SCAN_REQ:是扩展的扫描请求PDU,用于支持更复杂的扫描操作,如扩展广播。它允许扫描器请求来自广播器的额外数据,这些数据可能由于大小限制而无法在单个广播事件中完全发送。
3.1.3. 工作流程
1. SCAN_REQ工作流程
- 扫描器在广播物理信道上监听广播器的广播。
- 当扫描器检测到来自广播器的可扫描广播时,它决定发送SCAN_REQ PDU以请求更多信息。
- 扫描器构建SCAN_REQ PDU,并在Payload字段中设置ScanA(扫描器地址)和AdvA(广播器地址)。
- 扫描器将SCAN_REQ PDU发送到广播物理信道。
- 广播器接收SCAN_REQ PDU,并解析Payload字段中的信息。
- 广播器构建SCAN_RSP PDU作为响应,并在其中包含扫描器请求的信息。
- 广播器将SCAN_RSP PDU发送到扫描器。
2. AUX_SCAN_REQ工作流程
AUX_SCAN_REQ的工作流程与SCAN_REQ类似,但主要用于扩展广播场景。在扩展广播中,广播器可能会在不同的物理信道上发送多个广播事件,而扫描器需要使用AUX_SCAN_REQ来请求这些广播事件中的额外数据。
3.1.4. 注意事项
- 地址类型:在构建SCAN_REQ和AUX_SCAN_REQ PDU时,扫描器需要正确设置TxAdd和RxAdd字段以指示ScanA和AdvA字段中的地址类型。这是确保PDU能够被正确解析和处理的关键。
- 不包含主机数据:SCAN_REQ和AUX_SCAN_REQ PDU不包含任何主机数据。它们的主要目的是在设备之间建立连接或发现过程中传递必要的地址和类型信息。因此,在构建这些PDU时,不需要包含任何与主机相关的数据。
- 物理层要求:当这些PDU用于回复可扫描的广播时,它们所使用的物理层(PHY)应当与它们所回复的PDU所使用的物理层相同。这意味着扫描器和广播器需要在相同的物理层上进行通信以确保PDU的正确传输和接收。
3.2. SCAN_RSP
3.2.1. 格式与字段
1. PDU结构
SCAN_RSP(扫描响应)PDU是BLE协议中用于响应SCAN_REQ(扫描请求)PDU的一种协议数据单元(PDU)。其结构包含Payload(负载)字段,该字段进一步细分为多个子字段,用于传输响应数据。
2. Payload字段
SCAN_RSP 协议数据单元的有效载荷字段如下图所示:
- AdvA:此字段包含广播器的公共或随机设备地址。该地址的类型(公共或随机)由PDU头中的TxAdd字段指示。如果TxAdd=0,则AdvA为公共地址;如果TxAdd=1,则AdvA为随机地址。
- ScanRspData:此字段包含广播器希望发送给扫描器的任何数据。这些数据可以是由广播器的Host(主机)提供的,用于提供额外的设备信息、服务数据或制造商特定数据等。
- Length:此字段指示Payload中AdvA和ScanRspData的总大小(以八位字节为单位)。它允许接收方了解要读取的数据量。
3. PDU头字段
- TxAdd:指示AdvA字段中的地址类型。
- 其他字段(如PDU Type、RFU等)在PDU头中也有其特定的含义和作用,但在此不详细展开。
3.2.2. 应用与功能
1. 应用场景
SCAN_RSP PDU主要用于BLE设备扫描过程中的响应操作。当扫描器发送SCAN_REQ PDU请求广播器的额外信息时,广播器会使用SCAN_RSP PDU来提供这些信息。
2. 功能
SCAN_RSP PDU的主要功能是向扫描器提供广播器的额外信息。这些信息可以包括设备名称、服务UUID、制造商特定数据等,具体取决于广播器的配置和Host提供的数据。通过这些信息,扫描器可以了解广播器的更多细节,并决定是否与其建立连接。
3.2.3. 工作流程
- SCAN_REQ接收:首先,广播器在广播物理信道上发送广播数据。当扫描器检测到这些广播并希望获取更多信息时,它会发送SCAN_REQ PDU。
- SCAN_RSP构建:广播器接收SCAN_REQ PDU后,解析其中的AdvA字段以确认请求来自哪个扫描器(尽管在实际应用中,广播器可能不会基于这个信息做出不同的响应)。然后,广播器构建SCAN_RSP PDU,并在Payload字段中设置AdvA(自己的地址)和ScanRspData(要发送给扫描器的数据)。
- SCAN_RSP发送:广播器将SCAN_RSP PDU发送到扫描器所在的广播物理信道。这通常是在接收到SCAN_REQ PDU后的同一物理信道上。
- SCAN_RSP接收:扫描器接收SCAN_RSP PDU后,解析Payload字段中的信息以获取广播器的额外数据。然后,扫描器可以根据这些数据做出进一步的决策,如与广播器建立连接或继续扫描其他设备。
3.2.4. 注意事项
- 地址类型:在构建SCAN_RSP PDU时,广播器需要正确设置TxAdd字段以指示AdvA字段中的地址类型。这是确保PDU能够被正确解析和处理的关键。
- 数据大小:Length字段非常重要,因为它指示了Payload中数据的总大小。如果扫描器在接收SCAN_RSP PDU时遇到数据大小不匹配的问题,它可能会丢弃该PDU或请求重新发送。
- 物理层要求:当SCAN_RSP PDU用于回复SCAN_REQ PDU时,它们所使用的物理层(PHY)应当相同。这意味着广播器和扫描器需要在相同的物理层上进行通信以确保PDU的正确传输和接收。
- 数据内容:ScanRspData字段的内容取决于广播器的配置和Host提供的数据。因此,在构建SCAN_RSP PDU时,广播器需要确保提供的数据是准确且有用的,以便扫描器能够做出正确的决策。
3.3. AUX_SCAN_RSP
AUX_SCAN_RSP(辅助扫描响应)是BLE协议中用于扩展广播的一种重要PDU(协议数据单元)。
3.3.1. 格式与字段
-
格式:AUX_SCAN_RSP PDU使用公共扩展广播负载格式(Common Extended Advertising Payload Format)。
-
字段:
- AdvMode:此字段应设置为0b00,表示广播模式。
- ADI:如果存在,此字段的值应与扫描器响应的AUX_ADV_IND PDU中的字段值相同。ADI字段可用于检测冲突。
- 其他字段:根据公共扩展广播负载格式,AUX_SCAN_RSP PDU还可以包含其他字段,如AdvA(广播设备地址)、ScanRspData(扫描响应数据)等。AUX_SCAN_RSP PDU 中允许使用的通用扩展广播有效载荷格式字段如下表所示。
3.3.2. 应用与功能
-
应用:AUX_SCAN_RSP PDU主要用于扩展广播场景下的扫描响应。当扫描器(Scanner)在次要广播物理信道上接收到AUX_ADV_IND PDU后,会发送AUX_SCAN_REQ PDU请求更多信息。此时,广播者(Advertiser)会回复AUX_SCAN_RSP PDU,以提供额外的广播数据或信息。
-
功能:
- 提供额外信息:AUX_SCAN_RSP PDU可以携带比传统扫描响应更多的数据,满足复杂应用场景下的需求。
- 支持扩展广播:通过AUX_SCAN_RSP PDU,BLE协议支持扩展广播功能,使得广播者能够发送更长的广播数据,提高广播的灵活性和效率。
3.3.3. 工作流程
- 广播者发送AUX_ADV_IND PDU:广播者在次要广播物理信道上发送AUX_ADV_IND PDU,以启动扩展广播事件。
- 扫描器接收AUX_ADV_IND PDU并发送AUX_SCAN_REQ PDU:扫描器在次要广播物理信道上接收到AUX_ADV_IND PDU后,解析其中的信息,并根据需要发送AUX_SCAN_REQ PDU请求更多信息。
- 广播者回复AUX_SCAN_RSP PDU:广播者在接收到AUX_SCAN_REQ PDU后,根据请求的内容回复AUX_SCAN_RSP PDU,提供额外的广播数据或信息。
3.3.4. 注意事项
- 字段值的一致性:在发送AUX_SCAN_RSP PDU时,应确保ADI字段的值与扫描器响应的AUX_ADV_IND PDU中的字段值相同,以避免冲突和误解。
- 数据长度限制:虽然AUX_SCAN_RSP PDU可以携带更多的数据,但仍需遵守BLE协议中规定的数据长度限制。如果数据过长,可能需要进行分段传输。
- 时序要求:在发送和接收AUX_SCAN_RSP PDU时,应遵守BLE协议中规定的时序要求,以确保通信的可靠性和稳定性。
四、发起协议数据单元(PDUs)
以下广播物理信道PDU(协议数据单元)类型被称为发起 PDUs:
- CONNECT_IND(连接指示)
- AUX_CONNECT_REQ(辅助连接请求)
- AUX_CONNECT_RSP(辅助连接响应)
CONNECT_IND 和 AUX_CONNECT_REQ PDUs 由处于发起(Initiating)状态的链路层发送,并由处于广播(Advertising)状态的链路层接收。AUX_CONNECT_RSP PDU 由处于广播状态的链路层发送,并由处于发起状态的链路层接收。
这些PDU所使用的物理层(PHY)应当与它们所回复的PDU所使用的物理层相同。
4.1. CONNECT_IND和AUX_CONNECT_REQ
在BLE技术中,建立连接是数据通信的前提。CONNECT_IND和AUX_CONNECT_REQ作为连接建立过程中的关键PDU(协议数据单元),扮演着至关重要的角色。
4.1.1. 格式与字段
CONNECT_IND和AUX_CONNECT_REQ的PDU结构相似,均包含Preamble(前导码)、Access Address(访问地址)、PDU Header(PDU头)、Payload(有效载荷)以及CRC(循环冗余校验)等部分。
1. PDU头:
- TxAdd:指示发起者地址(InitA)是公共地址(0)还是随机地址(1)。
- RxAdd:指示广播者地址(AdvA)是公共地址(0)还是随机地址(1)。
- ChSel:在CONNECT_IND中,若双方支持LE信道选择算法#2,则设置为1;若发起者支持但广播者不支持,则发起者可设置为0或1;若发起者不支持,则设置为0。在AUX_CONNECT_REQ中,该字段保留。
2. 有效载荷字段:CONNECT_IND和AUX_CONNECT_REQ PDUs(协议数据单元)的有效载荷字段如下图所示。
- InitA:发起者的设备地址。
- AdvA:广播者的设备地址。
- LLData:包含连接参数的关键字段,如ACL连接的访问地址(AA)、CRC初始化值(CRCInit)、传输窗口大小(WinSize)、传输窗口偏移(WinOffset)、连接间隔(Interval)、从设备延迟(Latency)、监督超时(Timeout)、信道映射(ChM)以及跳频参数(Hop)等。
3. LLData字段:LLData(链路层数据)字段的格式如下图所示。
- AA(访问地址)字段:AA 字段应包含由链路层规则确定的异步无连接(ACL)连接的访问地址。这个访问地址是连接建立过程中的一个关键元素,用于在蓝牙设备之间进行数据通信时的寻址和识别。
- CRCInit(循环冗余校验初始值)字段:CRCInit 字段应包含 ACL 连接的 CRC 计算的初始值。它是一个由链路层生成的随机值。随机数发生器的种子应该来自一个物理熵源,并且应该至少有 20 位的熵。熵在这里是指信息的不确定性或随机性的度量,足够的熵可以确保生成的 CRC 初始值具有足够的随机性,从而提高 CRC 校验的可靠性。
- WinSize(窗口大小)、WinOffset(窗口偏移)、Interval(间隔)、Latency(延迟)、Timeout(超时)字段:
- WinSize 字段应按照transmitWindowSize = WinSize×1.25ms设置,以指示蓝牙规范4.5.3 节(BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 6, Part B Page 3096 )中定义的 transmitWindowSize 值。其用于确定数据传输窗口的大小,以毫秒为单位来衡量。
- WinOffset 字段应按照transmitWindowOffset = WinOffset×1.25ms设置,以指示蓝牙规范4.5.3 节中定义的 transmitWindowOffset 值。它用于确定数据传输窗口相对于某个参考点的偏移量。
- Interval 字段应按照connInterval = Interval×1.25ms设置,以指示蓝牙规范4.5.3 节中定义的 connInterval。connInterval 用于控制连接的时间间隔,对于蓝牙设备之间稳定的数据传输频率起着关键作用。
- Latency 字段应按照connPeripheralLatency = Latency设置,以指示蓝牙规范4.5.3 节中定义的 connPeripheralLatency 值。它用于表示从外围设备角度看连接的延迟情况。
- Timeout 字段应按照connSupervisionTimeout = Timeout×10ms设置,以指示蓝牙规范4.5.3 节中定义的 connSupervisionTimeout 值。这个超时值用于监控连接状态,当超过这个时间没有收到数据或者连接相关的信号时,可能会触发连接重建或者错误处理机制。
- ChM(通道映射)字段:ChM 字段应包含指示已用和未用数据通道的通道映射。每个通道用一个位来表示,位的位置根据蓝牙规范1.4.1 节(BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 6, Part B Page 2933 )中定义的数据通道索引来确定。【链路层】:概述-CSDN博客 最低有效位(LSB)代表数据通道索引 0,位置 36 的位代表数据通道索引 36。位值为 0 表示通道未使用,位值为 1 表示通道已使用。位置 37、38 和 39 的位保留以备将来使用。需要注意的是,在从射频(RF)通道映射到数据通道索引时,广播通道索引 38 处存在一个间隙。
- Hop(跳频)字段: Hop 字段应按照 蓝牙规范4.5.8.2 节(BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 6, Part B Page 3101 )中定义的数据通道选择算法来设置以指示 hopIncrement(跳频增量)。它应该是一个在 5 到 16 之间的随机值。跳频技术在蓝牙通信中用于避免干扰和提高通信的可靠性,通过随机的跳频增量来改变通信使用的频道。
- SCA(睡眠时钟精度)字段:SCA 字段应按照蓝牙规范 4.2.2(BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 6, Part B Page 3026 )节中定义的方式设置以指示用于确定中心设备最坏情况下睡眠时钟精度的 centralSCA。SCA 字段的值应按照下表 2.13 中的定义进行设置。这对于在设备处于低功耗睡眠模式下,确保时钟精度从而维持连接稳定性是很重要的。
4.1.2. 应用与功能
1. CONNECT_IND:
- 应用:当BLE设备处于发起态(Initiating state),并在主广播物理信道(Primary Advertising Physical Channel)上接收到期望连接的设备发来的可连接广播(Advertising)时,会发送CONNECT_IND PDU。
- 功能:该PDU用于发起与广播设备的连接请求,并携带连接建立所需的参数。一旦连接成功,发起者将成为主设备(Master),而广播者将成为从设备(Slave)。
2. AUX_CONNECT_REQ:
- 应用:在BLE 5.1及更高版本中,为了支持扩展广播(Extended Advertising),引入了AUX_CONNECT_REQ PDU。该PDU在辅助广播物理信道(Secondary Advertising Physical Channel)上发送。
- 功能:与CONNECT_IND类似,AUX_CONNECT_REQ也用于发起连接请求。但不同的是,它在扩展广播上下文中使用,并支持更多的连接参数和特性。在发送AUX_CONNECT_REQ后,还需要等待广播者回复一个AUX_CONNECT_RSP PDU,双方握手完成,才正式进入连接状态。
4.1.3. 工作流程
1. CONNECT_IND工作流程:
- 设备处于扫描状态,扫描到期望的广播。
- 关闭扫描(可选),并获取广播者的地址(AdvA)。
- 设备进入发起态,准备发送CONNECT_IND PDU。
- 在主广播物理信道上发送CONNECT_IND PDU,并携带连接参数。
- 等待广播者的响应,如果响应成功,则双方进入连接态。
2. AUX_CONNECT_REQ工作流程:
- 设备在扩展广播上下文中扫描到期望的广播。
- 设备进入发起态,准备发送AUX_CONNECT_REQ PDU。
- 在辅助广播物理信道上发送AUX_CONNECT_REQ PDU,并携带连接参数。
- 等待广播者的AUX_CONNECT_RSP PDU响应。
- 如果响应成功,则双方握手完成,进入连接态。
4.1.4. 注意事项
- 连接参数的选择:在发送CONNECT_IND或AUX_CONNECT_REQ时,需要仔细选择连接参数(如连接间隔、从设备延迟和监督超时等),以确保连接的可靠性和稳定性。
- 时钟精度:BLE设备在连接过程中需要使用精确的时钟来同步数据包。因此,在连接建立时,应确保设备的时钟精度满足要求。
- 信道选择:在连接建立过程中,信道的选择也非常重要。BLE支持多种信道选择算法,应根据实际情况选择合适的算法来确保连接的稳定性和抗干扰能力。
- 安全性:在连接建立过程中,还需要考虑安全性问题。例如,可以使用加密和认证机制来保护数据传输的安全性。
CONNECT_IND和AUX_CONNECT_REQ是BLE连接建立过程中的两种关键PDU。它们具有相似的结构和字段,但在应用和功能上有所不同。在实际应用中,需要根据具体需求和场景选择合适的PDU来发起连接请求,并确保连接参数、时钟精度、信道选择以及安全性等方面的要求得到满足。
4.2. AUX_CONNECT_RSP
AUX_CONNECT_RSP(辅助连接响应)PDU是BLE协议中的一个重要组成部分,它主要用于响应通过辅助广播物理通道发送的连接请求。
4.2.1. 格式与字段
1. 格式:AUX_CONNECT_RSP PDU使用通用扩展广播负载格式,该格式在本篇的第五节中详细描述。
2. 字段:AdvMode:此字段应设置为0b00,表示这是一个标准的或非定向的广播模式。
下表列出了AUX_CONNECT_RSP PDU中允许使用的通用扩展广播负载格式字段。
这些字段可能包括但不限于AdvA(广播者地址)、TargetA(目标地址)和Data(数据)等。
4.2.2. 应用与功能
1. 应用:
- AUX_CONNECT_RSP PDU主要用于BLE设备之间的连接建立过程。当一个设备通过辅助广播物理通道发送连接请求(如AUX_CONNECT_REQ)时,另一个设备将使用AUX_CONNECT_RSP PDU进行响应。
2. 功能:
- 确认连接请求:AUX_CONNECT_RSP PDU是对连接请求的确认,表明接收方愿意建立连接。
- 交换连接参数:在响应中,设备可以交换连接参数,如连接间隔、从设备延迟和连接超时等,以确保双方能够顺利建立并维持连接。
4.2.3. 工作流程
-
连接请求:发起方设备通过辅助广播物理通道发送AUX_CONNECT_REQ PDU,请求与另一个设备建立连接。
-
连接响应:接收方设备在接收到连接请求后,根据自身的连接策略和过滤规则,决定是否接受连接请求。如果接受,则发送AUX_CONNECT_RSP PDU进行响应。
-
连接建立:在接收到AUX_CONNECT_RSP PDU后,发起方设备和接收方设备将开始交换数据物理通道PDU,标志着连接已建立。此时,双方可以开始传输数据。
4.2.4. 注意事项
-
确保正确配置:在使用AUX_CONNECT_RSP PDU之前,应确保设备已正确配置为支持扩展广播功能,并遵循BLE规范中的相关规定。
-
处理连接参数:在响应连接请求时,设备应根据实际情况合理设置连接参数,以确保连接的稳定性和可靠性。
-
注意安全性:在连接建立过程中,设备应注意安全性问题,如加密和认证等。这有助于保护传输的数据不被窃取或篡改。
-
遵循BLE规范:在使用AUX_CONNECT_RSP PDU时,应严格遵循BLE规范中的相关规定和流程,以确保设备之间的兼容性和互操作性。
AUX_CONNECT_RSP PDU在BLE连接建立过程中起着至关重要的作用。通过正确配置和使用该PDU,设备可以顺利建立并维持连接,从而实现数据传输和通信。
五、通用扩展广播有效载荷格式(Common Extended Advertising Payload Format )
以下扩展广播物理信道协议数据单元(PDUs)共享相同的广播物理信道 PDU 有效载荷格式,在规范中被称为 “通用扩展广播有效载荷格式”:
- ADV_EXT_IND(扩展广播指示)
- AUX_ADV_IND(辅助广播指示)
- AUX_SCAN_RSP(辅助扫描响应)
- AUX_SYNC_IND(辅助同步指示)
- AUX_CHAIN_IND(辅助链指示)
- AUX_CONNECT_RSP(辅助连接响应)
- AUX_SYNC_SUBEVENT_IND(辅助同步子事件指示)
- AUX_SYNC_SUBEVENT_RSP(辅助同步子事件响应)
通用扩展广播有效载荷格式如下图所示:
- 扩展报头长度(Extended Header Length):扩展报头长度是一个介于 0 到 63 之间的值,表示可变长度的扩展报头(Extended Header)字段的大小。通过这个值可以确定扩展报头在整个有效载荷格式中所占的字节数,从而为后续解析扩展报头中的具体内容提供基础。
- 广播模式(AdvMode)字段:广播模式字段用于指示广播的模式。其值应按照如下表 2.15中的定义进行设置。不同的设置值对应着不同的广播行为或特性,例如可能决定了广播的频率、范围、针对的目标设备类型等方面的差异。接收设备可以根据接收到的 PDU 中 AdvMode 字段的值来准确判断广播的具体模式,以便采取相应的处理措施,如是否响应广播、如何处理广播中的数据等。
- 广播数据(AdvData):如果存在广播数据,应包含来自广播者主机的广播数据。广播数据的大小取决于扩展报头的大小。可以通过从广播物理信道 PDU 报头中指定的长度减去扩展报头的长度再加上一个字节来计算广播数据的大小。也是就是说着扩展报头的大小会影响到可用于承载广播数据的剩余空间,在实际应用中需要根据具体情况合理安排扩展报头和广播数据的内容,以充分利用有效载荷的空间来准确传达所需信息。
- 扩展报头(Extended Header)字段:扩展报头字段是一个可变长度的报头,当且仅当扩展报头长度字段不为零时才存在。其格式如下图 2.18 所示。扩展报头的存在与否以及其具体长度会根据不同的情况而变化,这种灵活性使得在不同的广播场景下可以根据实际需求添加或省略某些报头信息,以优化广播信息的传递效率和准确性。
- 扩展报头标志位(Extended Header Flags):扩展报头标志位的定义如下表 2.16 所示。如果某个标志位被设置为 1,则对应的扩展报头字段存在;否则,对应的扩展报头字段不存在。存在的扩展报头字段总是按照与扩展报头标志位中标志相同的顺序排列(即如果存在 AdvA 字段,则它是第一个,然后如果存在 TargetA 字段,则它是第二个,依此类推)。而且,一个扩展报头标志及其对应的扩展报头字段是必需的、可选的还是保留以备将来使用,取决于使用该扩展报头的广播物理信道 PDU。这就要求在处理不同类型的广播物理信道 PDU 时,要根据具体的 PDU 类型来准确判断扩展报头标志位及其对应字段的性质,以便正确解析和处理广播信息。
-
- AdvA:广播者地址字段,用于存储广播者的设备地址。
- TargetA:目标地址字段,用于存储广播的目标设备地址(如果适用)。
- 其他字段:根据BLE规范,扩展头部还可能包含其他字段,如辅助数据包指针(AuxPtr)、广播数据信息(ADI)等。
注意事项:
- 兼容性:在使用通用扩展广播负载格式时,应确保设备之间的兼容性和互操作性。
- 配置:在使用之前,应正确配置设备以支持扩展广播功能,并遵循BLE规范中的相关规定。
- 安全性:在广播过程中,应注意安全性问题,如加密和认证等,以保护传输的数据不被窃取或篡改。
- 更新:随着BLE协议的不断发展,通用扩展广播负载格式可能会发生变化。因此,在使用时应参考最新的BLE规范以确保准确性和兼容性。
4.1. AdvA 字段
当 AdvA 字段存在时,它是由六个字节组成,格式如下图所示:
广播地址(Advertising Address)字段包含了广播者的设备地址。如果 AdvA 字段存在,在广播物理信道 PDU 头部的 TxAdd(发送地址类型指示)会表明这个地址是公共地址(TxAdd = 0)还是随机地址(TxAdd = 1)。这种关联方式有助于接收设备更全面地了解广播者的身份信息,因为不同类型的地址在蓝牙通信等场景下可能具有不同的用途和特性,例如公共地址通常是固定且唯一的,而随机地址可用于增强隐私保护等。接收设备可以根据这些信息来决定如何进一步处理接收到的广播数据,比如是否与该广播者建立连接、如何进行数据交互等。
4.2. TargetA 字段
当 TargetA 字段存在时,它是由六个字节组成,格式如下图 2.20 所示:
目标地址(Target Address)字段包含了该广播所指向的扫描器或发起者的设备地址。如果 TargetA 字段存在,在广播物理信道 PDU 头部的 RxAdd(接收地址类型指示)会表明这个地址是公共地址(RxAdd = 0)还是随机地址(RxAdd = 1)。这种关联方式对于广播发送方和接收方都具有重要意义。对于发送方来说,可以准确地指定广播的目标对象类型;对于接收方而言,能够清楚地了解到自己作为目标设备时,其地址在广播数据中的呈现方式以及类型信息,进而根据这些信息来判断该广播是否是针对自己的,以及后续如何与广播者进行交互等操作。
4.3. CTEInfo 字段
CTEInfo 字段的存在表明数据包中包含了一个恒定音调扩展(Constant Tone Extension,CTE)。CTE 是一种用于提高蓝牙定位精度的技术,它通过在数据包中附加一个恒定音调的信号来实现。这个恒定音调信号可以被接收器用来更精确地测量信号到达时间,从而计算出设备的精确位置。CTEInfo 字段的具体定义和格式可以在蓝牙核心规范(Bluetooth Core Specification)中第 2.5.2 节中找到。
在 CTEInfo 字段中,通常包含了一些关键的信息,如 CTE 的类型、长度和音调频率等。这些信息对于接收器来说至关重要,因为它们需要这些信息来正确地解析和处理 CTE 信号,从而计算出设备的精确位置。
CTEInfo 字段是蓝牙定位技术中的一个重要组成部分,它提供了关于 CTE 信号的关键信息,使得接收器能够更精确地测量信号到达时间,从而实现更精确的定位。
4.4. AdvDataInfo 字段
当 AdvDataInfo(ADI)字段存在时,它是由两个字节组成,格式如下图 2.21 所示:
AdvDataInfo 字段包含两个主要部分:
- 广播集标识(Advertising Set ID,SID):这个ID由广播者的主机设置,用于标识该设备传输的广播集。广播集是一组具有相同或相似广播参数(如广播间隔、频道等)的广播。通过SID,扫描器可以区分来自同一设备但属于不同广播集的广播。例如,在一个复杂的蓝牙广播环境中,一个设备可能会发送多种不同用途或针对不同接收对象的广播集。通过设置不同的 SID,接收设备能够区分这些广播集,从而更好地对不同的广播内容进行分类和处理。比如,一个智能设备可能会发送一个包含设备基本信息的广播集(SID = 1)用于设备发现,同时发送另一个包含实时数据更新的广播集(SID = 2)用于数据传输,接收设备可以根据 SID 来决定对不同广播集采取不同的响应策略。
- 广播数据标识(Advertising Data ID,DID):这个ID由广播者设置,用于向扫描器指示它是否可以假设AdvData中的数据内容与之前在同一广播集中发送的AdvData是重复的。如果DID表明数据是重复的,那么扫描器可以选择性地忽略该数据包,以减少处理开销和功耗。例如,如果广播者发送的广播数据没有变化,通过 DID 可以告知扫描器这是重复数据,扫描器可以根据自身的策略决定是否需要重新处理这些数据。如果 DID 的值表示数据有更新,扫描器则可以及时获取并处理新的数据内容,从而提高广播数据处理的效率,避免不必要的重复操作。
AdvDataInfo 字段为广播者和扫描器提供了一种机制,通过SID来区分不同的广播集,并通过DID来指示广播数据是否重复。这有助于优化蓝牙设备的广播过程,减少不必要的数据传输和处理。
4.5. AuxPtr 字段
当 AuxPtr 字段存在时,它由三个字节组成,格式如下图 2.22 所示:
AuxPtr 字段的存在表明部分或全部广播数据位于后续的辅助数据包中。它就像是一个指向后续辅助数据包的指针,通过其包含的信息让接收方了解到相关广播数据的具体存储位置和传输方式等情况。
AuxPtr 字段包含以下子字段:
-
Channel Index:包含用于传输辅助数据包的通用信道索引。这允许扫描器知道在哪个信道上监听辅助数据包的到来,使得接收设备能够在相应的通道上等待并接收该辅助数据包,确保数据传输的准确性和针对性。
-
Offset Units:指示Aux Offset 字段所使用的单位。该字段的值应根据下表2.17中的定义来设置。不同的设置值对应不同的时间单位,这决定了后续 Aux Offset 字段所表示的时间偏移量的计量方式,对于准确确定辅助数据包的起始时间至关重要。
-
-
Aux Offset:从参考点到辅助数据包大致开始的时间,其中参考点是包含AuxPtr 字段的数据包的开始。Aux Offset 字段的值以Offset Units 字段指示的时间单位表示;偏移量是通过将该值乘以单位来确定的。Aux Offset 至少应为数据包长度加上T_MAFS。如果Aux Offset 小于245,700微秒,则应将Offset Units 字段设置为0。辅助数据包不应在参考点之后早于 Aux Offset 开始,也不应在参考点之后晚于 Aux Offset 加上一个 Offset Unit 开始。这样可以让链路层将 Aux Offset 舍入到 Offset Unit,从而更方便地确定辅助数据包的准确起始时间。
-
-
Aux PHY:指示用于传输辅助数据包的物理层(PHY)。该字段的值应根据表2.18中的定义来设置。明确所使用的物理层对于保证数据在不同设备间以正确的物理层协议进行传输非常重要,不同的物理层可能具有不同的传输特性,如传输速率、功耗等。
-
-
CA(Clock Accuracy):包含广播者在包含此数据的数据包和辅助数据包之间将使用的时钟准确性。该字段的值应根据下表2.19中的定义来设置。时钟精度信息对于接收方在处理与时间相关的数据以及确保数据的同步性等方面具有重要意义,它可以帮助接收方更好地理解和处理来自广播者的不同数据包之间的时间关系。
-
特殊情况说明:允许存在 Aux Offset 为零的 AuxPtr 字段,它表示不会传输辅助数据包,但当前 PDU 中的主机广播数据是不完整的;它应被视为等同于一个从未接收到的指向 AUX_CHAIN_IND PDU 的情况。在这种特殊情况下,其余字段仍应包含有效的值,以便接收方能够根据这些有效信息对当前不完整的广播数据情况进行适当的处理。
AuxPtr 字段提供了一种机制,通过该机制,广播者可以指示扫描器在后续辅助数据包中查找广播数据的其余部分。该字段包含了关于如何找到这些辅助数据包所需的所有必要信息,包括信道索引、偏移量、物理层和时钟准确性等。
4.6. SyncInfo字段
当SyncInfo字段存在时,其长度为18个八位字节(octet),格式如下图2.24所示:
这个字段的存在用于指示周期性广播序列(通过使用 AUX_SYNC_IND PDUs 或 AUX_SYNC_SUBEVENT_IND PDUs)的存在,并且其内容是对该周期性广播序列的描述。
- 出现位置:SyncInfo 字段可以出现在广播 PDU(协议数据单元)中,也可以在 LL_PERIODIC_SYNC_IND PDU 或者 LL_PERIODIC_SYNC_WR_IND PDU 中(具体可以参考蓝牙协议规范第 2.4.2.27 和 2.4.2.40 )。
SyncInfo字段组成:
- Offset Units字段:指示Offset Base字段使用的单位。其值应根据下表2.20设置。其作用是在计算时间偏移相关参数时提供单位换算的依据。
- syncPacketWindowOffset值计算:这是一个关于时间的参数,从参考点到该SyncInfo字段所描述的AUX_SYNC_IND或AUX_SYNC_SUBEVENT_IND(子事件 0 数据包)开始的时间。计算方式较为复杂。
- 若SyncInfo出现在广播PDU中,参考点是包含它的数据包的开始。
- 若出现在LL_PERIODIC_SYNC_IND PDU或LL_PERIODIC_SYNC_WR_IND PDU中,参考点由该PDU指定。
- 该值通过Offset Base字段的值乘以Offset Units字段指示的时间单位来确定,如果Offset Adjust字段设置为1,则还需加上2.4576秒。
- 若syncPacketWindowOffset小于245,700微秒,Offset Units字段应设置为0。
- 若Offset Units字段设置为0或SyncInfo字段出现在广播PDU中,Offset Adjust字段应设置为0。
- 另外,包含 AUX_SYNC_IND PDU 或 AUX_SYNC_SUBEVENT_IND PDU 的数据包的开始时间有范围限制,不能早于参考点后的 syncPacketWindowOffset,且不能晚于参考点后的 syncPacketWindowOffset 加上一个 Offset 单位,这是为了方便链路层将 syncPacketWindowOffset 舍入到 Offset 单位。当 syncPacketWindowOffset 的值为 0 时,表示到下一个 AUX_SYNC_IND 或 AUX_SYNC_SUBEVENT_IND 数据包的时间超出了可表示的范围。
- Interval 字段:这个字段包含以 1.25ms 为单位的时间,是从周期性广播序列的一个数据包开始到下一个数据包开始的时间间隔。其值不应小于 6(即 7.5ms),用于定义周期性广播序列的时间间隔特性。
- ChM 字段:ChM 是 Channel Map(通道映射)的缩写,它包含了在周期性物理通道上指示已用和未用 RF(射频)通道的信息。每个通道都用一个位来表示,位的位置按照蓝牙规范1.4.1 节中定义的通道索引来确定。【链路层】:概述-CSDN博客 最低有效位(LSB)代表通道索引 0,位置 36 的位代表通道索引 36。位值为 0 表示该通道未使用,位值为 1 表示该通道已使用,用于描述广播数据传输的通道使用情况。
- AA、CRCInit和SCA字段:这几个字段和 CONNECT_IND PDU(见前面第四章部分)中的相应字段含义相同,它们在同步信息传输和连接建立等过程中可能涉及到设备地址(AA)、循环冗余校验初始化(CRCInit)以及扫描配置参数(SCA)等方面的功能。
- PeriodicEventCounter字段:这个字段包含 paEventCounter(见核心规范 4.4.2.1 部分,BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 6, Part B Page 3039)的值,该值适用于这个 SyncInfo 字段所描述的 AUX_SYNC_IND 或 AUX_SYNC_SUBEVENT_IND 数据包,用于对周期性事件进行计数相关的操作。
4.7. TxPower 字段
TxPower字段是无线广播中一个重要的组成部分,它提供了关于发送设备传输功率的信息,有助于接收设备评估发送设备的距离和信号强度。TxPower 字段是用于指示无线设备在发送广播或广播消息时的传输功率的一个字节(octet)数据。这个字段的存在和格式对于理解设备如何广播其存在以及它可能被其他设备检测到的距离至关重要。格式如下图所示:
TxPower等级字段与[1]中第1.5节定义的TxPower广播数据类型中的值相同。
Tx Power Level 字段的值可以参考文献Core Specification Supplement, Part A, Data Types Specification 的 1.5 节中所定义的 Tx Power Advertising Data 的值。这个值是一个有符号整数,表示设备的传输功率等级。它可以帮助接收设备评估发送设备的距离,尽管这还需要考虑其他因素,如环境干扰和接收设备的灵敏度。
在广播上下文中,TxPower字段的包含取决于主机的指示和广播的类型(扩展广播或周期性广播)。对于扩展广播,如果包含AUX_ADV_IND协议数据单元(PDU),则应包含TxPower字段;如果不包含AUX_ADV_IND PDU,则应包含在所有ADV_EXT_IND PDUs中。对于周期性广播,TxPower字段应包含在AUX_SYNC_IND、AUX_SYNC_SUBEVENT_IND或AUX_SYNC_SUBEVENT_RSP PDUs中,但不应出现在AUX_CHAIN_IND PDUs中。
需要注意的是,AUX_CHAIN_IND PDUs不包含TxPower字段,这可能是因为这些PDU用于链式广播的后续部分,而TxPower信息通常只在广播的起始部分(如AUX_ADV_IND或AUX_SYNC_IND)中提供一次,以避免重复和节省带宽。
4.8. ACAD 字段
ACAD(Additional Controller Advertising Data)字段是扩展报头(Extended Header)的剩余部分,用于存储额外的广播数据。其长度是扩展报头长度减去扩展报头标志(1个字节)的大小以及由标志指示的存在的那些字段的大小之和。这种计算方式明确了 ACAD 字段长度与扩展头部其他部分的关联,有助于准确划分和界定各部分数据。
4.8.1. 特性与限制
- 完整性:ACAD字段不能跨多个广播物理信道协议数据单元(PDU)进行分割;它必须始终能够完整地放在单个广播物理通道 PDU 中。这一规定确保了数据在物理通道传输过程中的完整性和独立性,避免了因分割可能导致的数据丢失或混乱。
- 用途:如果 ACAD 字段存在,它应该包含来自广播发布者(advertiser)的控制器的数据,或者是供接收者(recipient)的控制器使用的数据。这明确了该字段数据的来源和使用对象,使得数据在广播通信过程中有了明确的流向和作用。
- 格式遵循标准:它使用在 蓝牙核心规范[Vol 3] Part C,Section 11 中描述的格式。蓝牙规范中的广播和扫描响应数据格式研究_ble 扫描应答数据-CSDN博客
4.8.2. 类型与定义
- 类型格式与含义:ACAD字段的类型格式和含义在Core Specification Supplement, Part A, Data Types Specification 的第1节中定义。这些类型可能包括各种广播数据,如设备名称、服务UUID、制造商特定数据等。
- 类型标识符:ACAD字段的类型标识符值在“Assigned Numbers”(已分配数字)中定义。这些标识符用于区分不同类型的ACAD数据。
4.8.3. 应用场景
ACAD字段在蓝牙广播中扮演着重要角色,它允许广播向接收方提供额外的信息,这些信息可能对于建立连接、发现服务或执行其他蓝牙相关任务至关重要。例如,ACAD字段可以用于包含设备的制造商特定信息、广播间隔的指示或与其他蓝牙设备交互所需的任何其他数据。
4.8.4. 注意事项
在处理ACAD字段时,应注意以下几点:
- 确保ACAD字段的长度不超过单个广播物理信道PDU的容量。
- 根据需要解析和使用ACAD字段中的数据,但应注意数据的正确性和有效性。
- 遵循蓝牙核心规范及其补充部分中定义的规则和指南,以确保与不同设备和平台的兼容性。
ACAD字段是蓝牙广播中用于存储额外广播数据的重要部分。了解ACAD字段的定义、特性、类型和应用场景对于实现蓝牙设备之间的有效通信至关重要。
4.9. Host Advertising Data(主机广播数据)
4.9.1. AdvData 字段构成与长度
- 构成:在扩展头部(extended header)之后的那部分协议数据单元(PDU)构成了 AdvData 字段。这明确了 AdvData 字段在整个 PDU 结构中的位置,即位于扩展头部之后,是存储特定数据的重要区域。
- 长度规定:该字段的长度在本篇第五节中有具体指定,通过参考这部分内容可以准确得知在特定情况下 AdvData 字段应该具有的长度。在碎片化之前,主机广播数据的总量不应超过1650字节(13200比特)。这个长度限制确保了广播数据能够在蓝牙设备的处理能力范围内。
4.9.2. AdvData 字段的数据来源与格式
- 数据来源:数据的源头是广播发布者的主机。如果 AdvData 字段存在,应当以蓝牙规范[Vol 3] Part C,Section 11 (蓝牙规范中的广播和扫描响应数据格式研究_ble 扫描应答数据-CSDN博客)所描述的格式来存储。以保证数据在传输和处理过程中的一致性和兼容性。
- 无数据情况处理:如果主机没有提供任何数据,那么 AdvData 字段应当被省略。
4.9.3. 数据的分片(Fragmentation)支持与限制
- 控制器支持情况:控制器(Controller)可能支持对主机广播数据进行分片操作。意味着在某些情况下,当主机广播数据量较大时,控制器可以将其分割成多个较小的片段以便于传输。
- 数据量限制:在分片之前,主机广播数据的总量不应超过 1650 个字节。这个限制设定了一个边界,确保了数据量在可管理和可传输的范围内,避免因数据量过大而导致传输困难或出现其他问题。
- 分片决策:当链路层(Link Layer)对主机广播数据进行分片时,分片的数量以及每个分片的大小由控制器来选择。控制器在做这个决策时,应当尽量减少分片的数量,目的是为了确保在传输整个主机广播数据时具有更高的可靠性。因为分片数量过多可能会增加传输过程中的复杂性和出错的可能性,所以减少分片数量有助于提高数据传输的成功率。
- 主机偏好与控制器处理:主机可以表明其对于控制器是否应该对主机广播数据进行分片的偏好,但控制器有权忽略这种偏好。这体现了在数据传输过程中,虽然主机可以表达自己的意愿,但最终的决策权还是掌握在控制器手中,控制器会根据实际情况(如网络状况、设备性能等)来综合判断是否进行分片操作。
4.9.4. 分片数据在不同 PDU 中的放置规则
- 初始片段放置:当主机广播数据被分片后,第一个片段应当被放置在 AUX_ADV_IND、AUX_SYNC_IND 或 AUX_SCAN_RSP PDU 中。这些 PDU 在整个广播数据传输体系中具有特定的作用,将第一个片段放置在其中有助于启动数据传输过程,并为后续片段的传输奠定基础。
- 后续片段放置:后续的片段应当被放置在 AUX_CHAIN_IND PDUs 中。并且每个 AUX_CHAIN_IND PDU 是包含前一个片段的 PDU 的辅助 PDU,也就是说它们之间存在一种顺序和关联关系。同时规定,不包含 AdvData 的 AUX_CHAIN_IND PDUs 不应有包含 AdvData 的辅助 PDU,以确保数据在不同 PDU 之间的放置具有明确的逻辑和规则,避免出现数据混乱或错误放置的情况。
4.9.5. 分片传输不完全情况处理
- 截断标识设置:如果链路层已经对主机广播数据进行了分片,但随后无法传输所有的片段,那么它能够传输的最后一个片段应当包含一个 AuxPtr 字段,并且该字段的 Aux Offset 设置为零。这样做的目的是让扫描器(scanners)能够知道数据已经被截断,从而在接收端能够正确处理这种不完全传输的情况,避免因数据不完整而导致后续处理出现错误。
4.9.6. 应用与注意事项
-
应用:在BLE设备配置广播数据时,需要了解控制器支持的最大长度,以确保广播数据包的大小不会超过设备的处理能力。
-
注意事项:
- 广播数据长度在蓝牙广播过程中非常关键,因为它决定了设备在单次广播事件中能够发送的信息量。
- 广播包的发送是单向的,不需要任何连接,但广播包可以包含特定的数据定义,通过碎片化,主机广播数据的总量可以增加到1650字节。
Host Advertising Data是蓝牙广播过程中的重要组成部分,它允许设备在广播中发送来自主机的数据。了解广播数据的格式、长度限制、碎片化和传输机制对于正确配置和使用蓝牙设备至关重要。
综上所述,广播物理信道PDU在蓝牙通信中具有重要地位和作用。了解PDU的结构、类型、传输机制和限制因素对于正确设计和使用蓝牙设备至关重要。