【链路层】空口数据包详解(4):数据物理通道协议数据单元(PDU)

news2024/12/21 15:17:52

目录

一、概述

1.1. 头部(Header)结构

1.2. MIC字段的情况说明

1.3. 有效载荷(Payload)格式与LLID字段的关联

二、LL Data PDU

2.1. 定义与用途

2.2. 头部字段设置

2.3. 空PDU(Empty PDU )

2.4. 数据分段与组合

2.5. 注意事项

三、LL Control PDU

 3.1. LL Control PDU 的基本定义与用途

3.1.1. PDU 结构

3.1.2. 操作码(Opcode)

3.1.3. CtrData 字段

3.1.4. 错误处理

3.2. LL_CONNECTION_UPDATE_IND

3.3. LL_CHANNEL_MAP_IND 

 3.4. LL_TERMINATE_IND

3.4.1. CtrData 字段格式

3.4.2. ErrorCode 字段

3.5. LL_ENC_REQ

3.6. LL_ENC_REQ 

3.7. LL_START_ENC_REQ

3.9. LL_START_ENC_RSP

3.10. LL_UNKNOWN_RSP

3.11. LL_FEATURE_REQ

3.12 LL_FEATURE_RSP 

3.13. LL_PAUSE_ENC_REQ和LL_PAUSE_ENC_RSP

3.13.1. LL_PAUSE_ENC_REQ

3.13.2. LL_PAUSE_ENC_RSP

3.13.3. 功能和应用

3.13.4. 注意事项

3.14. LL_VERSION_IND

3.14.1. CtrData 字段格式

3.14.2. 注意事项

3.14.3. 应用场景

3.14. LL_REJECT_IND

3.14.1. CtrData 字段格式

3.14.2. 应用场景

3.14.3. 注意事项

3.15. LL_PERIPHERAL_FEATURE_REQ

3.15.1. CtrData 字段格式

3.15.2. 应用场景

3.15.3. 注意事项

3.16. LL_CONNECTION_PARAM_REQ

3.16.1. CtrData 字段格式

3.16.2. 应用场景与注意事项

3.17. LL_CONNECTION_PARAM_RSP

3.17.1. LL_CONNECTION_PARAM_RSP 的用途

3.17.2. 注意事项

3.18. LL_REJECT_EXT_IND

3.18.1. PDU结构

3.18.2. 使用条件

3.18.3. 重要性

3.18.4. 应用场景

3.19. LL_PING_REQ和LL_PING_RSP

3.19.1. LL_PING_REQ PDU

3.19.2. LL_PING_RSP PDU

3.19.3. 重要性

3.19.4. 应用场景

3.20. LL_LENGTH_REQ和LL_LENGTH_RSP

3.21. LL_PHY_REQ和LL_PHY_RSP

3.21.1. CtrData字段格式

3.21.2. 注意事项

3.22. LL_PHY_UPDATE_IND

3.22.1. CtrData字段格式

3.22.2. 字段设置规则

3.22.3. Instant字段

3.23. LL_MIN_USED_CHANNELS_IND

3.23.1. CtrData字段格式

3.23.2. 使用场景

3.24. LL_CTE_REQ

3.25. LL_CTE_RSP

3.25.1. PDU结构

3.25.2. 功能与应用

3.25.3. 使用场景

3.25.4. 注意事项

3.26. LL_PERIODIC_SYNC_IND

3.26.1. 功能与应用

3.26.2. 使用场景

3.26.3. 注意事项

3.27. LL_CLOCK_ACCURACY_REQ and LL_CLOCK_ACCURACY_RSP

3.27.1. 使用场景

3.27.2. 注意事项

3.28. LL_CIS_REQ

3.29. LL_CIS_RSP

3.30. LL_CIS_IND

3.31. LL_CIS_TERMINATE_IND

3.32. LL_POWER_CONTROL_REQ

3.33. LL_POWER_CONTROL_RSP 

3.34. LL_POWER_CHANGE_IND 

3.35. LL_SUBRATE_REQ 

3.36. LL_SUBRATE_IND 

3.37. LL_CHANNEL_REPORTING_IND 

3.38. LL_CHANNEL_STATUS_IND 

3.39. LL_PERIODIC_SYNC_WR_IND

3.40. LL_FEATURE_EXT_REQ and LL_FEATURE_EXT_RSP

3.40.1. LL_FEATURE_EXT_REQ(链路层特性扩展请求)

3.40.2. LL_FEATURE_EXT_RSP(链路层特性扩展响应)

3.40.3. 交互过程

3.40.4. 重要性

3.41. LL_CS_SEC_REQ

3.41.1. 字段的重要性

3.41.2. 连接安全过程

3.42. LL_CS_SEC_RSP

3.42.1. 响应过程

3.42.2. 安全性考虑

3.43. LL_CS_CAPABILITIES_REQ and LL_CS_CAPABILITIES_RSP

3.44.  LL_CS_CONFIG_REQ

3.45. LL_CS_CONFIG_RSP

3.46. LL_CS_REQ

3.47. LL_CS_RSP

3.48. LL_CS_IND

3.49. LL_CS_TERMINATE_REQ and LL_CS_TERMINATE_RSP

3.49.1. LL_CS_TERMINATE_REQ PDU

3.49.2. LL_CS_TERMINATE_RSP PDU

3.50. LL_CS_FAE_REQ

3.51. LL_CS_FAE_RSP

3.52. LL_CS_CHANNEL_MAP_IND

3.53. LL_FRAME_SPACE_REQ

3.54. LL_FRAME_SPACE_RSP

四、总结


一、概述

数据物理通道(Data Physical Channel)PDU(协议数据单元)是蓝牙通信中的一个关键组成部分,它负责在物理信道上有效地传输数据。PDU由16位或24位的头部(Header)、可变长度的有效载荷(Payload)以及可选的消息完整性检查(MIC)字段组成。这种设计旨在确保数据的完整性、准确性和高效传输。其头部结构细节可参考下图:

1.1. 头部(Header)结构

数据物理通道PDU的头部包含了多个字段,用于控制和管理数据的传输。数据物理通道PDU的头部字段如下图所示:

头部的各个字段的具体定义在下表中给出: 

  • LLID(链路层标识符):用于区分有效载荷是包含数据PDU还是控制PDU。
  • NESN、SN、MD等位:用于数据包序列号管理、状态指示等功能。
  • CTEInfo Present(CP)字段:指示头部是否包含CTEInfo字段,即是否包含恒定音调扩展(Constant Tone Extension)的信息。
    • 如果 CP 字段为 0,那么 Data Channel PDU 头部不存在 CTEInfo 字段,数据物理信道数据包也没有恒定音调扩展。
    • 如果 CP 字段为 1,那么 Data Physical Channel PDU 头部存在 CTEInfo 字段,并且数据物理信道数据包包含恒定音调扩展。
  • 长度(Length)字段:指示有效载荷和(如果包含)MIC的长度。其范围是 0 到 255 字节(octets),但有效载荷长度应小于或等于 251 字节,MIC 长度为 4 字节。这个长度字段有助于接收方正确地解析接收到的数据,确定有效载荷的范围,从而避免数据解析错误。
  • CTEInfo字段:

    • 如果CP字段指示头部包含CTEInfo字段,则该字段会出现在头部中。CTEInfo字段用于提供恒定音调扩展的相关信息。

    • 链路层在发送包含CTEInfo字段的Data Physical Channel PDU之前,必须确保对等设备支持接收恒定音调扩展的功能。

    • 需要注意的是,一个能够发送包含CTEInfo字段的PDU的控制器,不一定能够接收这样的PDU,反之亦然。

    • 在当前版本的蓝牙规范(Core V6.0)中,请求远程设备发送包含CTEInfo字段的数据包的唯一方式是通过恒定音调扩展请求(Constant Tone Extension Request)程序。

1.2. MIC字段的情况说明

  • 未加密 ACL 连接和零长度有效载荷加密 ACL 连接:在未加密的ACL(异步无连接)连接中,或者加密的ACL连接但Data Channel PDU的有效载荷长度为零时,不包含MIC字段。这是因为在这些情况下,数据的安全性和完整性要求较低。
  • 非零长度有效载荷加密 ACL 连接:在加密的ACL连接中,当Data Channel PDU的有效载荷长度非零时,必须包含MIC字段。MIC字段的计算方式遵循蓝牙规范(蓝牙规范[Vol 6] Part E, Section 1)的具体规定,以确保加密数据在传输过程中的完整性。

1.3. 有效载荷(Payload)格式与LLID字段的关联

有效载荷的格式取决于头部的LLID字段。根据LLID字段的值,Data Physical Channel PDU的有效载荷可以包含以下两种类型的数据:

  • 当LLID字段为0b01或0b10时,有效载荷包含一个链路层(LL)数据协议数据单元(Data PDU)
  • 当LLID字段为0b11时,有效载荷包含一个链路层控制协议数据单元(Control PDU)

数据物理通道PDU的结构设计旨在确保蓝牙通信中的数据能够高效、准确地传输,并满足安全性和完整性的要求。通过合理配置头部字段和有效载荷,以及利用MIC字段和CTEInfo字段等特性,可以实现更加可靠和灵活的蓝牙通信。

二、LL Data PDU

2.1. 定义与用途

  • 定义:LL Data PDU(链路层数据协议数据单元)是一种数据通道PDU,专门用于发送L2CAP(逻辑链路控制和适配协议)数据。在蓝牙通信中,LL Data PDU扮演着传输数据的核心角色,确保数据能够在蓝牙设备之间准确、高效地传递。
  • 用途示例:在蓝牙设备间的数据传输过程中,当需要传输应用层的数据(如文件传输、音频数据等)时,这些数据会被封装在 L2CAP 协议中,然后通过 LL Data PDU 在数据信道上进行传输。

2.2. 头部字段设置

  • LLID字段:在LL Data PDU的头部,LLID字段用于标识PDU的类型。对于LL Data PDU,LLID字段应设置为0b01或0b10。

    • 当LLID字段设置为0b01时,表示该PDU可能是一个空PDU(Length字段设置为0b00000000)或L2CAP数据的连续包(Length字段非零)。
    • 当LLID字段设置为0b10时,表示该PDU是L2CAP数据的起始包,且Length字段不应为0,也不应小于4(以确保有足够的空间容纳数据)。

2.3. 空PDU(Empty PDU 

  • 定义:当头部的 LLID 字段设置为 0b01,并且长度(Length)字段设置为 0b00000000 时,这样的 LL Data PDU 被称为 Empty PDU。
  • 作用:在蓝牙通信中,中心设备(Central)的链路层可能会向外围设备(Peripheral)发送 Empty PDU。这主要是为了允许外围设备能够用任何数据物理信道协议数据单元(Data Physical Channel PDU)进行响应,包括 Empty PDU。这种机制可以用于设备之间的通信同步或者简单的状态查询等场景,例如用于确认设备是否处于可响应状态。

2.4. 数据分段与组合

在蓝牙通信中,由于数据长度的限制或传输效率的考虑,L2CAP数据可能需要被分段成多个PDU进行传输。当链路层接收到一个HCI ACL数据包(其Data_Total_Length等于0b00000000且Packet_Boundary_Flag设置为0b00,即表示一个起始片段)时,它不能直接将该片段通过空中接口传输。相反,链路层需要将该片段与一个或多个后续的连续片段组合起来,形成一个LLID设置为0b10且长度非零的PDU进行传输。

2.5. 注意事项

  • 在使用LL Data PDU进行数据传输时,应确保数据的完整性和准确性。这可以通过使用消息完整性检查(MIC)字段等机制来实现。
  • 链路层在发送LL Data PDU之前,应检查对等设备的支持情况和连接状态,以确保数据传输的顺利进行。
  • 在蓝牙通信中,LL Data PDU的传输应遵循蓝牙规范的相关规定,以确保通信的可靠性和互操作性。

LL Data PDU是蓝牙通信中用于发送L2CAP数据的关键组件。通过合理配置头部字段、处理空PDU以及进行数据分段与组合等操作,可以实现高效、准确的数据传输。

三、LL Control PDU

 3.1. LL Control PDU 的基本定义与用途

  • 定义:LL Control PDU 是一种数据物理信道协议数据单元(Data Physical Channel PDU),其核心作用在于控制链路层(Link Layer)连接。它在蓝牙通信体系中扮演着重要角色,负责管理和协调链路层连接相关的各种操作。
  • 用途示例:比如在建立蓝牙连接、维持连接稳定性、处理连接中的异常情况等过程中,LL Control PDU 会被用于发送各种控制指令,以确保链路层连接能够按照预期正常工作。

3.1.1. PDU 结构

  • Payload 字段:LL Control PDU 的有效载荷部分包含控制信息,这些信息的具体格式由Opcode(操作码)字段决定。其 Payload 字段的结构可参考下图 :

  • Length 字段:对于LL Control PDU,Length字段不应设置为0b00000000(即,它必须包含一些有效的控制信息)。以便能够携带足够的控制信息来完成相应的控制操作,避免因长度为零而无法传达有效控制指令的情况。
  • Opcode 字段:此字段用于标识LL Control PDU的类型。不同的操作码对应不同的控制功能,这些操作码在蓝牙规范中有明确定义。
  • CtrData 字段:此字段包含与Opcode相关的控制数据。其长度和内容由Opcode决定,并在蓝牙规范的相应子节中定义。

3.1.2. 操作码(Opcode)

Opcode 字段用于识别不同类型的 LL Control PDU,具体的对应关系在下表中有明确规定。例如,有些操作码用于连接建立,有些用于参数更新,还有些用于处理连接终止等。

3.1.3. CtrData 字段

  • 固定长度:对于给定的Opcode,CtrData字段的长度是固定的。
  • 值限制:如果CtrData字段中的某个字段有有效的值范围或其他限制(例如,字段X必须小于字段Y),则所有其他值都保留给未来使用。这些限制可能在LL Control PDU的相关子节中直接指定,也可能通过引用其他部分间接指定。
  • 整数字段:除非另有明确规定,否则LL Control PDU中CtrData字段内的所有整数字段都应解释为无符号数。

3.1.4. 错误处理

  • 未知PDU:如果接收到不受支持或保留给未来使用的LL Control PDU,链路层应响应LL_UNKNOWN_RSP PDU,并将UnknownType字段设置为接收到的PDU的Opcode值。
  • 长度错误或无效字段:如果接收到的LL Control PDU长度错误或CtrData字段无效,链路层可以根据具体实现的数据解释继续执行相关链路层程序(例如,如果PDU太长,可以忽略额外数据;如果字段超出范围,可以使用最近的允许值)。如果不继续执行程序,则应响应LL_UNKNOWN_RSP PDU,或者在相关程序允许的情况下,响应LL_REJECT_INDLL_REJECT_EXT_IND PDU。在这些响应PDU中,UnknownType字段或RejectOpcode字段应设置为接收到的PDU的Opcode值。

LL Control PDU是蓝牙通信中用于控制链路层连接的关键组件。通过正确配置和使用这些PDU,可以确保蓝牙设备之间的连接稳定、可靠,并满足特定的通信需求。

3.2. LL_CONNECTION_UPDATE_IND

CtrData 字段的格式如下图 所示:

这个字段在 LL Control PDU(链路层控制协议数据单元)中起着关键作用,它承载了与链路层连接控制相关的多种参数信息,通过特定的设置方式来传达不同的控制意图。

  • WinSize 字段
    • 用于指示transmitWindowSize的值,该值定义了设备在发送数据之前可以等待的窗口大小。
    • 计算方式:transmitWindowSize = WinSize × 1.25 ms
    • 这意味着WinSize字段中的每个单位代表1.25毫秒的时间窗口。
  • WinOffset 字段
    • 用于指示transmitWindowOffset的值,该值定义了发送窗口相对于某个参考点的偏移量。
    • 计算方式:transmitWindowOffset = WinOffset × 1.25 ms
    • 同样,WinOffset字段中的每个单位也代表1.25毫秒的时间偏移。
  • Interval 字段
    • 用于指示connInterval的值,该值定义了连接事件之间的时间间隔。
    • 计算方式:connInterval = Interval × 1.25 ms
    • Interval字段中的每个单位代表1.25毫秒的连接间隔。
  • Latency 字段
    • 用于指示connPeripheralLatency的值,该值定义了从属设备可以跳过多少个连接事件而不被视为断开连接。
    • 注意:这里的Latency字段直接表示connPeripheralLatency的值,不需要额外的计算。
  • Timeout 字段
    • 用于指示connSupervisionTimeout的值,该值定义了在没有接收到有效数据包时,连接可以保持打开状态的最长时间。
    • 计算方式connSupervisionTimeout = Timeout × 10 ms
    • Timeout字段中的每个单位代表10毫秒的监督超时时间。
  • Instant 字段
    • 用于指示在特定时间点(如连接事件的开始)发生的事件或操作。
    • 具体的含义和用法取决于蓝牙规范中定义的上下文和操作码。

以上解释基于蓝牙规范的一般理解。实际的CtrData字段格式和字段含义可能因蓝牙版本和特定操作码而异。因此,在设计和实现蓝牙设备时,务必参考最新的蓝牙核心规范文档以获取准确的信息。

3.3. LL_CHANNEL_MAP_IND 

LL_CHANNEL_MAP_IND 是BLE协议中的数据指示(Indication),用于通知接收方关于当前使用的数据通道和未使用的数据通道的信息。

CtrData 字段包含两个主要部分:ChM 字段和 Instant 字段。其 CtrData 字段的格式如下图 所示:

这个字段在相关的链路层控制操作中承载着重要信息,通过特定的格式编排来传达与链路层连接状态及信道使用情况等相关的内容。

  • ChM 字段
    • 功能:ChM 字段的主要作用是包含信道映射(channel map)信息,用于指示哪些数据信道是已使用(Used)的,哪些是未使用(Unused)的。
    • 格式:该字段的格式与 CONNECT_IND PDU(协议数据单元)中的 ChM 字段格式相同【链路层】空口数据包详解(3):广播物理信道PDU-CSDN博客
    • 表示方法:每个数据通道都由一个位(bit)表示,位的位置根据蓝牙规范第1.4.1节(【链路层】:概述-CSDN博客定义的数据通道索引来确定。如果某个数据通道被使用,则对应位置的位被设置为1;如果某个数据通道未被使用,则对应位置的位被设置为0。
  • Instant 字段
    • 功能Instant 字段用于指示特定的时间点或时刻,该时间点或时刻与蓝牙规范第5.1.2节描述的某个特定事件或状态相关联。
    • 设置方法:根据第5.1.2节的描述,将 Instant 字段设置为相应的值。为链路层在特定时间点相关的控制操作提供准确的信息依据,以便于根据该瞬间情况进行相应的处理,比如可能涉及到根据该瞬间的信道状态等进行后续的连接调整或数据传输安排等操作。

LL_CHANNEL_MAP_IND 通过 CtrData 字段中的 ChM 和 Instant 字段,提供了关于当前蓝牙连接中数据通道使用情况和特定时间点或时刻的信息。对于管理蓝牙连接中的数据传输和同步状态非常重要。通过精确地控制哪些数据通道被使用,BLE设备可以有效地利用有限的无线频谱资源,同时确保数据传输的可靠性和效率。

 3.4. LL_TERMINATE_IND

LL_TERMINATE_IND 是BLE协议中的一个指示(Indication),用于通知远程设备当前连接即将被终止,并给出终止的原因。

3.4.1. CtrData 字段格式

CtrData 字段是 LL_TERMINATE_IND 指示中的核心部分,它包含了终止连接所需的关键信息。具体的字段格式如下图所示:

  • ErrorCode:一个用于指示连接终止原因的字段。它根据蓝牙核心规范(如 [Vol 1] Part F)中定义的控制器错误代码来设置。蓝牙Controller错误代码全面概览_rejected due to limited resource-CSDN博客

3.4.2. ErrorCode 字段

  • 功能ErrorCode 字段用于告知远程设备连接终止的具体原因。这对于调试和故障排查非常重要,因为它可以帮助开发人员了解连接失败的根本原因。
  • 设置方法:根据蓝牙核心规范中定义的错误代码,将 ErrorCode 字段设置为相应的值。这些错误代码可能包括连接超时、连接参数请求被拒绝、设备不支持请求的功能等。

LL_TERMINATE_IND 指示是 BLE 协议中用于通知远程设备连接即将被终止的重要机制。通过 CtrData 字段中的 ErrorCode,可以准确地告知远程设备连接终止的具体原因。这对于确保蓝牙设备的可靠性和稳定性至关重要,它可以帮助开发人员及时发现和解决连接问题。在开发蓝牙设备时,建议仔细阅读并理解蓝牙核心规范中关于 LL_TERMINATE_IND 和控制器错误代码的部分,以确保设备能够正确地处理连接终止事件。

3.5. LL_ENC_REQ

LL_ENC_REQ 是BLE协议中的一个加密请求(Encryption Request)指示,用于启动加密过程。CtrData 字段是 LL_ENC_REQ 指示中的核心部分,它包含了启动加密过程所需的关键信息。其 CtrData 字段的格式如下图所示:

  • Rand 字段:
    • 功能Rand 字段包含了一个由主机(Host)提供的随机数。这个随机数将与 EDIV(加密多样化器)一起使用,在加密过程中生成会话密钥(Session Key)。
    • 作用:增加加密过程的随机性,确保生成的会话密钥的不可预测性,从而提高加密的安全性。
  • EDIV 字段:
    • 功能EDIV 字段包含了加密多样化器(Encrypted Diversifier)的值。它是一个用于加密过程的固定值,与 Rand 字段一起使用,以确保会话密钥的唯一性。
    • 作用:与 Rand 字段结合,通过特定的加密算法生成会话密钥。
  • SKD_C 字段:
    • 功能SKD_C 字段包含了中央设备(Central)的会话密钥多样化器(Session Key Diversifier)的部分。它是用于生成会话密钥的另一个关键参数。
    • 作用:与 Rand 和 EDIV 字段一起,通过加密算法生成中央设备和外围设备(Peripheral)之间的会话密钥。
  • IV_C 字段:
    • 功能IV_C 字段包含了中央设备的初始化向量(Initialization Vector)的部分。初始化向量是用于加密过程中的一个固定值或序列,用于确保加密数据的唯一性和安全性。
    • 作用:与会话密钥一起,用于加密数据的传输。它确保了即使相同的明文数据被多次加密,每次生成的密文也是不同的。

LL_ENC_REQ 指示是 BLE 协议中用于启动加密过程的重要机制。通过 CtrData 字段中的 RandEDIVSKD_C 和 IV_C 字段,可以生成唯一的会话密钥,并确保加密数据的传输安全性。在开发蓝牙设备时,建议仔细阅读并理解蓝牙核心规范中关于 LL_ENC_REQ 和加密过程的部分,以确保设备能够正确地实现加密功能,并保护传输数据的安全性。

3.6. LL_ENC_REQ 

LL_ENC_REQ 是BLE协议中的一个加密请求(Encryption Request)指示,在链路层控制协议数据单元(LL Control PDU)中承载着与加密响应相关的重要信息,通过特定的格式编排来传达外围设备(Peripheral)在加密操作过程中的相关参数等内容。CtrData 字段是 LL_ENC_REQ 指示中的核心部分,它包含了启动加密过程所需的关键信息。其 CtrData 字段的格式如下图所示:

  • SKD_P 字段:SKD_P 字段应包含外围设备的会话密钥区分器(session key diversifier)的部分内容。在整个加密体系中,会话密钥区分器是用于生成会话密钥的重要组成部分。当中心设备(如在之前的 “LL_ENC_REQ” 环节)发起加密请求并提供了其自身的会话密钥区分器部分(通过 SKD_C 字段)后,外围设备通过 SKD_P 字段提供自身对应的部分。之后,双方可依据各自提供的会话密钥区分器部分来共同生成完整的会话密钥,从而实现对传输数据的有效加密,确保数据在传输过程中的安全性。
  • IV_P 字段:IV_P 字段应包含外围设备的初始化向量(initialization vector)的部分内容。初始化向量在加密过程中是一个重要参数,它与其他加密相关参数(如上述的 SKD_P 以及可能涉及到的中心设备相关的加密参数等)共同作用,以确保每次加密操作的结果具有唯一性和随机性,进一步提高加密数据的安全性。外围设备通过提供自身的初始化向量部分内容(通过 IV_P 字段),与中心设备的相关部分协同配合,保证加密操作能够顺利进行,使得传输的数据在加密保护下得以安全传输。

3.7. LL_START_ENC_REQ

LL_START_ENC_REQ 是BLE协议中的一个重要协议数据单元(PDU),用于在链路层(Link Layer)启动加密过程。根据BLE协议的规范,LL_START_ENC_REQ PDU 并不包含 CtrData 字段,这意味着它不需要额外的控制数据来指示加密过程的开始。

  • 作用:LL_START_ENC_REQ PDU 用于在BLE连接中启动加密过程。当两个设备已经通过之前的加密请求(如 LL_ENC_REQ)和加密响应(如 LL_ENC_RSP)交换了必要的加密参数(如随机数、加密多样化器、会话密钥多样化器和初始化向量)后,可以使用 LL_START_ENC_REQ PDU 来启动实际的加密过程。
  • 特性:
    • 无 CtrData 字段:与许多其他BLE PDU不同,LL_START_ENC_REQ 不包含 CtrData 字段。这是因为启动加密过程不需要额外的控制数据,而是依赖于之前已经交换的加密参数。
    • 简洁性:由于不包含 CtrData 字段,LL_START_ENC_REQ PDU 更加简洁,减少了传输过程中的开销。
    • 加密启动信号LL_START_ENC_REQ PDU 作为一个明确的信号,告诉对端设备加密过程即将开始。这有助于同步两个设备之间的加密状态。
  • 使用场景:在BLE连接中,当两个设备需要确保数据传输的安全性时,它们会启动加密过程。这通常发生在设备已经建立连接并交换了必要的加密参数之后。通过发送 LL_START_ENC_REQ PDU,设备可以启动加密过程,从而确保后续数据传输的机密性和完整性。

LL_START_ENC_REQ PDU 是BLE协议中用于启动加密过程的重要PDU。它不包含 CtrData 字段,而是依赖于之前已经交换的加密参数来启动加密过程。通过发送这个PDU,设备可以确保后续数据传输的安全性,从而保护用户的隐私和数据安全。在开发BLE设备时,建议仔细阅读并理解BLE协议中关于加密和 LL_START_ENC_REQ PDU 的部分,以确保设备能够正确地实现加密功能。

3.9. LL_START_ENC_RSP

LL_START_ENC_RSP 是BLE协议中的一个协议数据单元(PDU),用于响应 LL_START_ENC_REQ PDU,表明设备已经准备好开始加密过程。根据BLE协议的规范,LL_START_ENC_RSP PDU 同样不包含 CtrData 字段。

  • 作用:LL_START_ENC_RSP PDU 是对 LL_START_ENC_REQ PDU 的响应,用于确认设备已经接收到加密启动请求,并且已经准备好开始加密过程。这个PDU的发送标志着加密过程的正式开始,设备将开始使用之前交换的加密参数对后续的数据传输进行加密。
  • 特性:
    • 无 CtrData 字段:与 LL_START_ENC_REQ PDU 一样,LL_START_ENC_RSP PDU 也不包含 CtrData 字段。这是因为加密过程的开始不需要额外的控制数据,而是依赖于之前已经交换的加密参数。
    • 确认加密启动LL_START_ENC_RSP PDU 的发送是对 LL_START_ENC_REQ PDU 的确认,表明设备已经准备好开始加密过程。
    • 简洁性:由于不包含 CtrData 字段,LL_START_ENC_RSP PDU 更加简洁,减少了传输过程中的开销。
  • 使用场景:在BLE连接中,当一方设备发送 LL_START_ENC_REQ PDU 请求启动加密过程时,另一方设备会发送 LL_START_ENC_RSP PDU 作为响应。这个响应表明设备已经接收到加密启动请求,并且已经准备好开始加密过程。随后,两个设备将开始使用之前交换的加密参数对后续的数据传输进行加密,以确保数据传输的安全性。

LL_START_ENC_RSP PDU 是BLE协议中用于确认加密过程开始的重要PDU。它不包含 CtrData 字段,而是依赖于之前已经交换的加密参数来确认加密过程的开始。通过发送这个PDU,设备可以确保双方都已经准备好开始加密过程,从而保护后续数据传输的安全性。在开发BLE设备时,建议仔细阅读并理解BLE协议中关于加密和 LL_START_ENC_RSP PDU 的部分,以确保设备能够正确地实现加密功能。

3.10. LL_UNKNOWN_RSP

在BLE协议中,LL_UNKNOWN_RSP 是一个链路层(Link Layer)响应报文,用于当链路层接收到一个它不认识或不支持的链路层控制协议数据单元(LL Control PDU)时,向对等设备发送的一个响应。这里的“不认识或不支持”指的是接收方无法识别或处理该PDU中的操作码(Opcode)。

对于LL_UNKNOWN_RSP报文中的CtrData字段的格式,它通常包含一个或多个特定的子字段,用于提供关于接收到的未知PDU的详细信息。CtrData字段的格式如下图展示:

CtrData字段中,UnknownType是一个重要的子字段,它包含了接收到的LL Control PDU中的操作码(Opcode)字段的值。这个操作码是PDU中的一个关键部分,用于指示PDU的类型或它执行的操作。通过将这个操作码包含在LL_UNKNOWN_RSPCtrData字段中,发送方可以告知接收方(或上层协议)它遇到了一个它无法识别的PDU类型。

LL_UNKNOWN_RSP是一种机制,用于在BLE链路层中处理未知或不支持的PDU。通过包含接收到的PDU的操作码,可以提供关于为何发送该响应的详细信息。

3.11. LL_FEATURE_REQ

在BLE协议中,LL_FEATURE_REQ 是一种链路层(Link Layer)控制报文,用于中央设备(Central)向周边设备(Peripheral)请求其链路层支持的功能集(FeatureSet)。这个报文是BLE协议中设备间功能协商的一部分,有助于双方了解彼此支持的特性和能力,从而优化连接和通信过程。

LL_FEATURE_REQ 报文中的 CtrData 字段格式如下图所示:

CtrData 字段中主要包含一个 FeatureSet 子字段,该子字段用于表示中央设备链路层支持的功能集。这个功能集是一个位掩码(bitmask),其中每一位代表一个特定的功能或特性。如果某一位被设置为1,则表示中央设备支持该功能;如果为0,则表示不支持。

FeatureSet 的内容和意义:FeatureSet 包含中央设备链路层支持的所有功能,这些功能可能包括但不限于:

  • 链路层扩展功能集(LL Extended Feature Set):用于支持未来蓝牙技术的发展,通过扩展特征集的大小(如从64位扩展到更大的位数)来实现。
  • 其他链路层特性:如信道探测(Channel Sounding)、ISOAL增强功能(如ISOAL Unsegmented模式)、监测广播设备(Monitoring Advertisers)等,这些特性旨在提升蓝牙设备之间的交互体验、定位的精确度、数据传输的效率以及能耗管理等。

功能协商的过程:

当中央设备向周边设备发送 LL_FEATURE_REQ 报文时,它实际上是在询问周边设备是否支持 FeatureSet 中列出的功能。周边设备在收到这个报文后,会检查自己是否支持这些功能,并通过发送 LL_FEATURE_RSP(链路层功能响应)报文来回复中央设备。在 LL_FEATURE_RSP 报文中,周边设备会列出它实际支持的功能集。

通过这种方式,中央设备和周边设备可以相互了解彼此支持的特性,从而根据双方的能力来优化连接和通信过程。例如,如果双方都支持ISOAL Unsegmented模式,那么它们就可以选择这种模式来进行数据传输,以提高数据传输的可靠性和降低延迟。

LL_FEATURE_REQ 报文在BLE协议中扮演着重要的角色,它有助于设备间进行功能协商和优化连接过程。

3.12 LL_FEATURE_RSP 

在BLE协议中,LL_FEATURE_RSP 是一种链路层(Link Layer)控制报文,用于响应 LL_FEATURE_REQ 报文,并告知对方设备本链路层所支持的功能集。这一机制是BLE设备间进行功能协商的关键步骤,有助于双方了解彼此的能力,从而优化连接和通信过程。

LL_FEATURE_RSP 报文中的 CtrData 字段格式如下图所示:

CtrData 字段包含多个部分,其中:

  • FeatureSet[0]包含中央设备(Central)和周边设备(Peripheral)链路层共同支持的功能集。这通常是一个位掩码(bitmask),其中每一位代表一个特定的功能或特性。如果某一位被设置为1,则表示该功能被双方设备支持;如果为0,则表示不支持。
  • FeatureSet[1-7]包含发送此PDU(协议数据单元)的链路层所支持的功能集。这些功能集可能因设备而异,并可能包括一些特定于发送设备的特性。

注意事项:

  • 在进行功能协商时,设备应确保它们遵循BLE协议的最新版本和相关规范。
  • 功能集的大小和格式可能因BLE协议的版本而异,因此设备在解析 LL_FEATURE_REQ 和 LL_FEATURE_RSP 报文时应考虑这一点。
  • 双方设备在建立连接之前应进行充分的功能协商,以确保它们能够正确地理解和处理彼此发送的数据。

LL_FEATURE_RSP 报文在BLE协议中扮演着重要的角色,它有助于设备间进行功能协商并优化连接过程。通过了解彼此支持的特性,BLE设备可以更好地协作并提供更高效、更可靠的通信服务。

3.13. LL_PAUSE_ENC_REQ和LL_PAUSE_ENC_RSP

在BLE协议中,LL_PAUSE_ENC_REQ 和 LL_PAUSE_ENC_RSP 是两种链路层(Link Layer)控制报文,用于在加密过程中暂停加密操作。这两种报文均不包含 CtrData 字段,意味着它们不携带额外的控制数据或参数。

3.13.1. LL_PAUSE_ENC_REQ

LL_PAUSE_ENC_REQ 报文由设备发送,用于请求暂停当前的加密会话。通常发生在设备需要暂时中断加密通信以执行其他任务时,或者在加密密钥需要更新但尚未完成更新过程时。由于该报文不包含 CtrData 字段,因此它不需要携带任何额外的信息来指示暂停加密的具体原因或条件。

3.13.2. LL_PAUSE_ENC_RSP

LL_PAUSE_ENC_RSP 报文是对 LL_PAUSE_ENC_REQ 报文的响应。当接收方收到 LL_PAUSE_ENC_REQ 报文时,它会检查自己是否能够暂停加密会话。如果可以,接收方会发送 LL_PAUSE_ENC_RSP 报文来确认暂停请求,并告知发送方加密会话已被成功暂停。同样地,由于该报文不包含 CtrData 字段,因此它也不需要携带任何额外的信息来指示暂停加密的结果或状态。

3.13.3. 功能和应用

暂停加密功能在BLE设备间进行加密通信时非常有用。例如,当两个设备正在使用加密会话进行通信时,如果其中一个设备需要暂时中断通信以执行其他任务(如处理来自用户的输入或更新加密密钥),它可以使用 LL_PAUSE_ENC_REQ 报文来请求暂停加密会话。一旦加密会话被暂停,双方设备就可以在不暴露加密数据的情况下执行其他任务。当任务完成后,双方设备可以重新建立加密会话并继续通信。

3.13.4. 注意事项

  • 在使用暂停加密功能时,设备应确保它们遵循BLE协议的最新版本和相关规范。
  • 暂停加密功能可能会增加通信延迟或降低通信效率,因此应谨慎使用。
  • 在暂停加密会话期间,设备应确保它们能够安全地存储和管理加密密钥,以防止未经授权的访问或泄露。

LL_PAUSE_ENC_REQ 和 LL_PAUSE_ENC_RSP 报文在BLE协议中用于请求和确认暂停加密会话。这两种报文均不包含 CtrData 字段,因此它们不需要携带额外的信息来指示暂停加密的具体原因、条件或结果。通过使用这些报文,BLE设备可以在需要时暂时中断加密通信以执行其他任务,并在任务完成后重新建立加密会话并继续通信。

3.14. LL_VERSION_IND

在BLE协议中,LL_VERSION_IND(链路层版本指示)报文用于在设备间交换链路层规范版本、制造商公司标识符以及子版本信息。这些信息有助于设备了解彼此的兼容性和特性支持情况。

3.14.1. CtrData 字段格式

LL_VERSION_IND报文的CtrData字段通常包含以下三个部分,其 CtrData 字段的格式如下图 所示:

  • Version 字段
    • 该字段包含链路层规范版本的信息,指示控制器支持的BLE链路层规范的版本。
    • 版本号通常是一个数字或一组数字,用于唯一标识BLE链路层规范的特定版本。
    • 需要注意的是,给定的版本号并不直接表示设备支持该版本规范中的所有特性;相反,应该检查相关的特性位(见BLE协议的第4.6节)来确定设备支持的具体特性。
  • Company_Identifier 字段
    • 该字段包含制造商的公司标识符,用于唯一标识生产蓝牙控制器的公司。
    • 公司标识符是一个数字,通常与蓝牙技术联盟(SIG)分配的编号相对应。
    • 这些编号在蓝牙技术联盟的官方文档中有所记录,并可用于识别设备的制造商。
  • Subversion 字段
    • 该字段包含蓝牙控制器实现的唯一值,用于区分同一制造商生产的不同实现或修订版本。
    • 子版本号有助于设备在建立连接时识别对方的实现细节,从而优化通信过程。

3.14.2. 注意事项

  • 在解读LL_VERSION_IND报文时,设备应确保遵循BLE协议的最新版本和相关规范。
  • 版本号并不总是指示规范的更新程度或功能丰富性;因此,在比较不同设备的版本时,应谨慎评估其实际功能和兼容性。
  • 公司标识符和子版本号提供了有关设备制造商和实现细节的有用信息,有助于在设备间进行更精确的兼容性检查和功能协商。

3.14.3. 应用场景

LL_VERSION_IND报文在BLE设备间建立连接时非常有用。通过交换链路层版本、制造商公司标识符和子版本信息,设备可以了解彼此的兼容性和特性支持情况。这有助于设备在连接过程中进行功能协商和优化通信参数,从而提高通信效率和可靠性。

LL_VERSION_IND报文是BLE协议中用于交换链路层版本信息的重要报文。通过正确解读和处理该报文中的字段信息,设备可以建立更稳定、更高效的BLE连接。

3.14. LL_REJECT_IND

在BLE协议中,LL_REJECT_IND(链路层拒绝指示)报文用于通知对方设备,其发出的请求已被拒绝,并给出拒绝的原因。该报文包含一个CtrData字段,其中ErrorCode子字段用于指明请求被拒绝的具体原因。

3.14.1. CtrData 字段格式

LL_REJECT_IND报文的CtrData字段格式如下图所示:

  • ErrorCode:这是一个重要的子字段,用于详细说明请求被拒绝的原因。ErrorCode的值与蓝牙核心规范中定义的控制器错误码相对应,这些错误码在蓝牙文档的官方规范中有详细的描述和解释。蓝牙Controller错误代码全面概览_rejected due to limited resource-CSDN博客

3.14.2. 应用场景

LL_REJECT_IND报文在BLE设备间通信时非常有用,特别是在以下场景中:

  • 当一个设备尝试与另一个设备建立连接,但连接参数不兼容或无效时。
  • 当一个设备尝试发起加密会话,但加密密钥不正确或设备不支持加密时。
  • 当一个设备收到一个它不支持或无法处理的请求时。

在这些情况下,LL_REJECT_IND报文允许拒绝方设备明确地通知请求方设备拒绝的原因,从而有助于调试和故障排除。

3.14.3. 注意事项

  • 在处理LL_REJECT_IND报文时,设备应检查ErrorCode字段以确定拒绝的具体原因,并据此采取相应的措施。
  • 设备应确保遵循BLE协议的最新版本和相关规范,以正确解释和处理ErrorCode字段中的值。
  • 在设计BLE设备时,应考虑如何优雅地处理被拒绝的请求,并为用户提供清晰的反馈。

LL_REJECT_IND报文是BLE协议中用于通知请求被拒绝的重要报文。通过正确解释和处理ErrorCode字段中的值,设备可以了解请求被拒绝的具体原因,并据此采取相应的措施来优化通信过程。

3.15. LL_PERIPHERAL_FEATURE_REQ

在BLE协议中,LL_PERIPHERAL_FEATURE_REQ(周边设备链路层特性请求)报文是一种用于查询周边设备支持的链路层特性的机制。该报文由中心设备发送至周边设备,以请求获取周边设备链路层所支持的特性集(FeatureSet)。

3.15.1. CtrData 字段格式

LL_PERIPHERAL_FEATURE_REQ报文的CtrData字段的格式如下图 所示:

  • FeatureSet:这是一个重要的字段,用于请求周边设备提供其链路层所支持的特性集。特性集通常是一个位掩码(bitmask),其中每一位代表一个特定的链路层特性。这些特性在BLE协议的官方规范中有详细的定义和描述。

特性集(FeatureSet)是BLE协议中用于描述设备链路层支持哪些特性的一个关键概念。每个特性通常都与链路层的一个特定功能或行为相关联。例如,某些特性可能表示设备支持连接参数请求(Connection Parameter Request)功能,而其他特性可能表示设备支持加密或隐私保护等高级功能。在LL_PERIPHERAL_FEATURE_REQ报文中,中心设备通过请求周边设备提供其特性集,可以了解周边设备支持哪些链路层特性,从而在进行连接和通信时做出相应的优化和决策。

3.15.2. 应用场景

LL_PERIPHERAL_FEATURE_REQ报文在BLE设备间通信时非常有用,特别是在以下场景中:

  • 当中心设备需要与周边设备建立连接,并希望了解周边设备支持的链路层特性时。
  • 当中心设备需要根据周边设备支持的特性来优化连接参数或通信行为时。
  • 当中心设备需要验证周边设备是否符合特定的BLE规范版本或功能要求时。

3.15.3. 注意事项

  • 在处理LL_PERIPHERAL_FEATURE_REQ报文时,周边设备应检查其链路层支持的特性集,并构建相应的响应报文(如LL_FEATURE_RSP),以告知中心设备其支持的特性。
  • 设备应确保遵循BLE协议的最新版本和相关规范,以正确解释和处理特性集中的位掩码。
  • 在设计BLE设备时,应考虑如何有效地利用链路层特性来优化连接和通信过程,提高设备的性能和用户体验。

LL_PERIPHERAL_FEATURE_REQ报文是BLE协议中用于查询周边设备链路层特性的一种重要机制。通过正确解释和处理特性集中的信息,设备可以了解彼此支持的链路层特性,从而在进行连接和通信时做出更明智的决策。

3.16. LL_CONNECTION_PARAM_REQ

在BLE协议中,LL_CONNECTION_PARAM_REQ(连接参数请求)报文用于一方设备(通常是中心设备)向另一方设备(通常是周边设备)提出更改当前连接参数的请求。这些连接参数包括连接间隔(connInterval)、从设备延迟(connPeripheralLatency)、监督超时(connSupervisionTimeout)以及首选周期性(PreferredPeriodicity)和偏移量(Offset0Offset5)。

3.16.1. CtrData 字段格式

其 CtrData 字段的格式如下图所示:

  • Interval_Min:指示请求的最小连接间隔。实际连接间隔(connInterval)通过connInterval = Interval_Min × 1.25ms计算得出。通过设置 Interval_Min 字段的值,可以间接确定 connInterval 所能取到的最小数值,这对于界定连接间隔的下限范围至关重要,有助于确保连接的稳定性和性能,例如避免连接间隔过小导致资源过度占用或通信过于频繁等问题。
  • Interval_Max:指示请求的最大连接间隔。同样,实际连接间隔通过connInterval = Interval_Max × 1.25 ms计算。该值不得小于Interval_Min。通过设置 Interval_Max 字段,可以明确 connInterval 的上限范围,与 Interval_Min 字段配合,能够精准限定 connInterval 的取值区间,从而合理规划连接的周期性和资源分配等情况。
  • Latency:指示请求的从设备延迟(connPeripheralLatency),即从设备可以跳过多少个连接事件而不被视为丢失连接。其设置方式较为直接:connPeripheralLatency = Latency。该字段的值直接等同于 connPeripheralLatropy 值,在链路层连接中,connPeripheralLatency 与外围设备的延迟特性相关,通过设置 Latency 字段的值可以直接控制这一参数,进而影响连接的性能和稳定性,比如在处理外围设备响应延迟方面起到重要作用。
  • Timeout:指示请求的监督超时(connSupervisionTimeout),即两个连续接收到的有效数据包之间的最大允许时间间隔。具体设置关系为:connSupervisionTimeout = Timeout × 10 ms。connSupervisionTimeout 在链路层连接监督方面起着重要作用,通过设置 Timeout 字段的值,可以根据上述公式准确设定 connSupervisionTimeout 的值,以确保链路层连接在超时方面的合理控制,例如防止连接因长时间无响应而中断等情况。
  • PreferredPeriodicity:指示首选周期性,即连接间隔最好是此值的倍数。它以1.25 ms为单位。例如,如果PreferredPeriodicity设置为100,则连接间隔最好是125 ms的倍数。值为0表示没有偏好。PreferredPeriodicity应小于或等于Interval_Max。通过设置该字段,可以根据实际需求对 connInterval 的取值进行一定的倾向性设定,以满足特定的应用场景或性能要求,比如在某些对连接周期性有特定要求的应用中,通过设置合适的 PreferredPeriodicity 来优化连接的规律性。
  • ReferenceConnEventCount:指示 connEventCounter 的值,所有有效的 Offset0 至 Offset5 字段都是相对于这个值来计算的。需要注意的是,该字段与 LL_CONNECTION_UPDATE_IND PDU 中的 Instant 字段是相互独立的。通过设置 ReferenceConnEventCount 字段,为后续计算连接参数更新相关的偏移量提供了一个基准参考值,使得连接参数的更新能够基于一个明确的参照点进行准确计算和调整。
  • Offset0Offset5:这些字段指示更新后的连接参数下,LE连接锚点的可能位置相对于ReferenceConnEventCount的值。它们以1.25 ms为单位,并按偏好程度递减排序;即Offset0是最优选项,其次是Offset1,依此类推。Offset0Offset5应小于Interval_Max。值为0xFFFF表示无效。有效的Offset0Offset5字段应包含唯一值,且有效字段始终位于无效字段之前。通过设置这些字段,可以精确地确定在连接参数更新后,连接锚点相对于基准参考值的可能位置,从而实现对连接状态和性能的精细化调整,比如根据不同的应用需求和通信环境,选择最合适的连接锚点位置来优化连接的稳定性和效率。

3.16.2. 应用场景与注意事项

  • 应用场景:当中心设备希望优化与周边设备的连接参数(例如,为了降低功耗或提高数据传输速率)时,它会发送LL_CONNECTION_PARAM_REQ报文。
  • 注意事项
    • 周边设备在收到请求后,可以决定是否接受这些新的连接参数。如果接受,它将通过发送LL_CONNECTION_UPDATE_IND报文来确认,并包含实际采用的连接参数。
    • 在设计BLE设备时,应考虑连接参数的合理范围,以确保设备的性能和兼容性。
    • 偏移量字段(Offset0Offset5)提供了灵活性,允许设备在更新连接参数时协调其时间调度。
    • 设备应确保遵循BLE协议的最新版本和相关规范,以正确解释和处理这些连接参数。

LL_CONNECTION_PARAM_REQ报文是BLE协议中用于协商和更新连接参数的重要机制。通过正确解释和处理这些参数,设备可以优化其连接和通信过程,从而提高性能和用户体验。

3.17. LL_CONNECTION_PARAM_RSP

在BLE协议中,LL_CONNECTION_PARAM_RSP(连接参数响应)协议数据单元(PDU)的格式与LL_CONNECTION_PARAM_REQ(连接参数请求)PDU的格式完全相同。这意味着这两个PDU在结构上具有相同的字段和布局,但它们用于不同的目的和在不同的上下文中交换。

3.17.1. LL_CONNECTION_PARAM_RSP 的用途

当一方设备(通常是周边设备)接收到另一方设备(通常是中心设备)发送的LL_CONNECTION_PARAM_REQ PDU时,需要根据自己的能力和偏好来决定是否接受请求的连接参数。如果周边设备接受这些参数,它将使用相同的格式(即LL_CONNECTION_PARAM_RSP PDU)来回复中心设备,并在相应的字段中填充实际接受的参数值。

尽管LL_CONNECTION_PARAM_RSP PDU的格式与LL_CONNECTION_PARAM_REQ相同,但在LL_CONNECTION_PARAM_RSP中,这些字段的含义略有不同:

  • Interval_Min 和 Interval_Max:在响应中,这些字段表示周边设备实际接受的最小和最大连接间隔。
  • Latency:表示周边设备接受的从设备延迟。
  • Timeout:表示周边设备接受的监督超时。
  • PreferredPeriodicity:如果周边设备有特定的周期性偏好,它可以在此字段中指示。然而,在响应中,这个字段通常不是必需的,因为请求方已经提出了它的偏好。如果周边设备没有特定的周期性要求,它可以忽略此字段或将其设置为0。
  • ReferenceConnEventCountOffset0 至 Offset5:这些字段在响应中通常不用于指示新的偏移量或参考连接事件计数。相反,它们可能被周边设备用来确认它理解了请求中的这些值,或者在某些情况下,如果周边设备希望提出自己的偏移量建议(这不太常见),它可以在这些字段中这样做。然而,在标准的连接参数协商过程中,这些字段在响应中通常保持不变或被视为不相关。

3.17.2. 注意事项

  • 周边设备在发送LL_CONNECTION_PARAM_RSP时,应确保它接受的连接参数值在BLE规范定义的合理范围内,并且与中心设备请求的值兼容。
  • 如果周边设备不接受请求的连接参数,它可以选择不发送响应(即隐式拒绝),或者发送一个包含它认为不可接受的参数值的响应(这取决于具体实现和协议版本)。
  • 在某些情况下,中心设备和周边设备可能需要多次交换连接参数请求和响应PDU,直到双方就一组可接受的参数达成一致。

LL_CONNECTION_PARAM_RSP PDU是BLE协议中用于协商连接参数的关键机制之一。通过正确解释和处理这些PDU,设备可以确保它们之间的连接是高效、可靠且符合规范的。

3.18. LL_REJECT_EXT_IND

在BLE协议中,LL_REJECT_EXT_IND(扩展拒绝指示)是一个重要的链路层控制协议数据单元(PDU),用于当一方设备不支持或无法处理另一方设备发送的特定链路层控制PDU时,向发送方提供明确的拒绝指示。

3.18.1. PDU结构

LL_REJECT_EXT_IND PDU的CtrData字段的格式如下图所示:

该PDU主要包含两个关键字段:

  • RejectOpcode:此字段包含被拒绝的链路层控制PDU的操作码(Opcode)字段值。通过此字段,接收方可以明确指出它不支持或无法处理的PDU类型。
  • ErrorCode:此字段包含拒绝该链路层控制PDU的原因。错误代码列表和描述可以在BLE协议的[Vol 1] Part F部分(即控制器错误代码部分)中找到。这些错误代码提供了关于为何PDU被拒绝的具体信息。蓝牙Controller错误代码全面概览_rejected due to limited resource-CSDN博客

3.18.2. 使用条件

LL_REJECT_EXT_IND PDU的发送应满足以下条件:

  • 当远程链路层支持扩展拒绝指示链路层特性(如BLE规范第4.6节所述)时,应使用LL_REJECT_EXT_IND PDU。
  • 如果远程链路层不支持此特性,则应使用LL_REJECT_IND PDU(如BLE规范第2.4.2.14节所述)作为替代。

3.18.3. 重要性

LL_REJECT_EXT_IND PDU在BLE协议中扮演着重要角色,因为它提供了一种标准化的方式来处理不支持或无法处理的链路层控制PDU。通过发送此PDU,接收方可以明确地告知发送方其不支持的PDU类型,并给出拒绝的原因。这有助于发送方了解问题所在,并可能采取适当的措施来解决问题,例如重新发送一个受支持的PDU或终止连接。

3.18.4. 应用场景

LL_REJECT_EXT_IND PDU可能应用于以下场景:

  • 当一方设备尝试与另一方设备建立连接,但发送了对方不支持的链路层控制PDU时。
  • 在连接建立后,一方设备尝试修改连接参数或执行其他链路层操作,但发送了对方不支持的PDU时。

LL_REJECT_EXT_IND PDU是BLE协议中用于处理不支持或无法处理的链路层控制PDU的重要机制。通过正确理解和使用此PDU,设备可以确保它们之间的通信是高效、可靠且符合规范

的。

3.19. LL_PING_REQLL_PING_RSP

在BLE协议中,LL_PING_REQLL_PING_RSP是两个重要的链路层控制协议数据单元(PDU),它们用于检测连接的有效性。

3.19.1. LL_PING_REQ PDU

  • 特点LL_PING_REQ PDU不包含CtrData字段,意味着它仅用于触发连接状态的检查,而不携带任何额外的控制数据。
  • 用途:当一方设备希望确认与另一方设备的连接仍然有效时,可以发送LL_PING_REQ PDU。这通常用于检测连接是否因某种原因(如信号干扰、设备故障等)而中断。
  • 响应:接收方设备在收到LL_PING_REQ PDU后,应回复LL_PING_RSP PDU以确认连接的有效性。

3.19.2. LL_PING_RSP PDU

  • 特点:与LL_PING_REQ类似,LL_PING_RSP PDU也不包含CtrData字段。它仅作为对LL_PING_REQ PDU的响应,用于确认连接的有效性。
  • 用途LL_PING_RSP PDU是接收方设备对LL_PING_REQ PDU的回应。通过发送此PDU,接收方设备表明它仍然在线并准备好继续通信。
  • 发送时机:接收方设备应在收到LL_PING_REQ PDU后尽快发送LL_PING_RSP PDU,以最小化连接状态检测的时间延迟。

3.19.3. 重要性

LL_PING_REQLL_PING_RSP PDU在BLE协议中扮演着重要角色,因为它们提供了一种简单而有效的方法来检测连接的有效性。这对于维护稳定的BLE连接至关重要,特别是在存在潜在干扰或设备故障的情况下。

3.19.4. 应用场景

这两个PDU可能应用于以下场景:

  • 连接监控:设备可以定期发送LL_PING_REQ PDU以监控连接状态,并在必要时采取纠正措施(如重新连接)。
  • 故障检测:如果设备在发送LL_PING_REQ PDU后未能在预期时间内收到LL_PING_RSP PDU,则可能表明连接已中断或存在其他问题。此时,设备可以采取适当的故障恢复措施。

LL_PING_REQLL_PING_RSP PDU是BLE协议中用于检测连接有效性的重要机制。通过正确理解和使用这两个PDU,设备可以确保它们之间的通信是稳定且可靠的。

3.20. LL_LENGTH_REQ和LL_LENGTH_RSP

在BLE协议中,LL_LENGTH_REQ和LL_LENGTH_RSP是用于协商数据链路层(LL)数据包最大长度和传输时间的PDU(协议数据单元),对于LL_LENGTH_REQ和LL_LENGTH_RSP这两个PDU,其CtrData字段的格式如下图所示:

  • MaxRxOctets
    • 含义:表示接收方能够接收的最大数据长度(以字节为单位)。
    • 设置:应设置为发送方的connMaxRxOctets值,该值在蓝牙规范第4.5.10节中定义。
    • 要求:该字段的值不应小于27字节
  • MaxRxTime
    • 含义:表示接收方能够接收的最大数据时间(以微秒为单位)。
    • 设置:应设置为发送方的connMaxRxTime值,该值在蓝牙规范4.5.10节中定义。
    • 要求:该字段的值不应小于328微秒
  • MaxTxOctets
    • 含义:表示发送方能够发送的最大数据长度(以字节为单位)。
    • 设置:应设置为发送方的connMaxTxOctets值,该值在蓝牙规范4.5.10节中定义。
    • 要求:该字段的值不应小于27字节
  • MaxTxTime
    • 含义:表示发送方能够发送的最大数据时间(以微秒为单位)。
    • 设置:应设置为发送方的connMaxTxTime值,该值在蓝牙规范4.5.10节中定义。
    • 要求:该字段的值不应小于328微秒

LL_LENGTH_REQ和LL_LENGTH_RSPPDU用于在BLE连接中协商数据包的最大长度和传输时间。通过设置这些参数,BLE设备可以优化数据传输效率和功耗。重要的是,这些参数的值需要满足一定的最小值要求,以确保通信的稳定性和可靠性。

3.21. LL_PHY_REQ和LL_PHY_RSP

在蓝牙技术中,LL_PHY_REQ(链路层物理层请求)和LL_PHY_RSP(链路层物理层响应)是用于协商物理层(PHY)参数的协议数据单元(PDU)。这些PDU的CtrData字段格式通常用于指示发送方偏好的发射(TX)和接收(RX)物理层。

3.21.1. CtrData字段格式

  • TX_PHYS:用于指示发送方偏好的发射物理层。它由8位组成,至少有一位应设置为1。被设置为1的位表示发送方偏好的物理层。
  • RX_PHYS:用于指示发送方偏好的接收物理层。它同样由8位组成,并且至少有一位应设置为1。被设置为1的位表示发送方偏好的物理层。

TX_PHYS和RX_PHYS字段各由8位组成,意味着它们可以表示最多8种不同的物理层选项。在实际应用中,可能并不会用到所有的8位,但至少应有一位被设置为1以表示至少有一个偏好的物理层。

  • 偏好设置:通过将这些字段中的位设置为1,发送方可以明确指示它偏好的物理层。例如,如果TX_PHYS的第0位被设置为1,而其他位被设置为0,则表示发送方偏好使用第0种物理层进行发射。
  • 响应与协商:在接收到LL_PHY_REQ后,接收方会根据其能力和偏好设置LL_PHY_RSP中的相应字段。如果双方有共同的偏好物理层,则它们可以使用该物理层进行通信。

3.21.2. 注意事项

  • 物理层选项:蓝牙技术定义了多种物理层选项,如1M PHY、2M PHY、Coded PHY等。这些选项具有不同的数据速率、范围和功耗特性。
  • 协商过程:LL_PHY_REQ和LL_PHY_RSP是蓝牙链路层协商物理层参数的一部分。它们允许设备在建立连接之前或连接期间动态地更改物理层设置。
  • 兼容性:不是所有的蓝牙设备都支持所有的物理层选项。因此,在协商过程中,设备需要确保其偏好的物理层选项是对方也支持的。

LL_PHY_REQ和LL_PHY_RSP中的CtrData字段格式是蓝牙链路层协商物理层参数的重要组成部分。通过正确地设置这些字段,设备可以确保其通信使用的物理层是双方都偏好且支持的。

3.22. LL_PHY_UPDATE_IND

LL_PHY_UPDATE_IND是一个在BLE通信中使用的链路层(Link Layer)PDU(协议数据单元),它用于指示物理层(PHY)的更新。这个PDU允许中央设备(Central)和外设(Peripheral)之间协商并更新它们之间通信所使用的PHY。

3.22.1. CtrData字段格式

CtrData字段是LL_PHY_UPDATE_IND PDU中的一个关键部分,它包含了关于PHY更新的具体信息。这个字段的格式如下图所示:

  • PHY_C_TO_P:用于指示从中央设备到外设发送数据包时应使用的PHY。它由8位组成,每一位代表一个可能的PHY。如果某个PHY正在被更改,则对应位应设置为1,其余位设置为0。如果PHY保持不变,则整个字段应设置为0。
  • PHY_P_TO_C:这个字段与PHY_C_TO_P类似,但用于指示从外设到中央设备发送数据包时应使用的PHY。

3.22.2. 字段设置规则

  • 如果正在更改PHY,则根据下表2.23中指定的新PHY,将对应位设置为1,其余位设置为0。通过这种设置方式,能够明确告知接收方从中心设备发往外围设备的数据包在物理层方面的使用情况,以便接收方做好相应的接收准备,比如调整接收端的物理层配置以匹配发送方的设置。

  •  如果PHY保持不变,则PHY_C_TO_PPHY_P_TO_C字段应分别设置为0。这样可以让中心设备清楚知道从外围设备发往自身的数据包将使用何种物理层,从而做好接收准备或根据需要调整自身的物理层配置。

3.22.3. Instant字段

  • Instant字段用于指示在蓝牙规范5.1.10节中描述的某个特定时刻。
  • 如果PHY_C_TO_PPHY_P_TO_C字段都为0,则表示没有特定的时刻,此时Instant字段保留供未来使用。

LL_PHY_UPDATE_IND PDU的CtrData字段通过PHY_C_TO_PPHY_P_TO_C字段允许中央设备和外设在BLE通信中协商并更新它们之间通信所使用的PHY。这些字段的设置遵循特定的规则,以确保通信的顺利进行。

3.23. LL_MIN_USED_CHANNELS_IND

LL_MIN_USED_CHANNELS_IND是BLE通信中的一个链路层(Link Layer)PDU,用于指示外设(Peripheral)在特定物理层(PHY)上所需的最小使用信道数。这个PDU允许外设向中央设备(Central)传达其通信需求,以确保连接的稳定性和性能。

3.23.1. CtrData字段格式

CtrData字段是LL_MIN_USED_CHANNELS_IND PDU的核心部分,它包含了关于外设所需最小信道数的具体信息。这个字段的格式如下图所示:

  • PHYS字段:
    • 功能:PHYS字段用于指示外设对哪个或哪些PHY有最小使用信道数的要求。

    • 组成:PHYS字段由8位组成,每一位代表一个可能的PHY。这些PHY在上表2.23中有详细规定。

    • 设置规则:至少有一位应被设置为1,以指示至少有一个PHY有最小使用信道数的要求。

  • MinUsedChannels字段:
    • 功能:MinUsedChannels字段包含了在指定的PHY上所需的最小信道数。

    • 值域:这个字段的值应在2到37之间。这意味着外设可以请求在特定的PHY上使用至少2个到37个信道。

3.23.2. 使用场景

  • 当外设希望确保在特定PHY上有足够的信道用于通信时,它会发送LL_MIN_USED_CHANNELS_IND PDU。
  • 中央设备在接收到这个PDU后,可以根据其能力和当前的网络状况来决定是否满足外设的要求。
  • 如果中央设备能够满足外设的要求,它可能会调整其信道分配策略,以确保在指定的PHY上有足够数量的信道被分配给外设使用。

LL_MIN_USED_CHANNELS_IND PDU的CtrData字段通过PHYS和MinUsedChannels字段允许外设向中央设备传达其在特定PHY上所需的最小使用信道数。这有助于确保BLE连接的稳定性和性能。

3.24. LL_CTE_REQ

LL_CTE_REQ(链路层CTE请求)是用于在BLE的某些扩展功能中请求远程设备发送特定类型和长度的持续音调扩展(CTE, Constant Tone Extension)的指令。这里的CTE是一种用于提高定位精度和其他高级功能的技术。

其CtrData字段的格式如下图所示:

  • MinCTELenReq:表示请求远程设备发送的CTE的最小长度,单位是8微秒(8µs)。其值应在2到20之间,意味着CTE的最小长度可以从16微秒(28µs)到160微秒(208µs)不等。

  • CTETypeReq:这个字段指定请求远程设备发送的CTE的类型。CTE的类型在在下表定义:

  • 包括不同类型的CTE,例如用于距离测量的AOA(到达角)CTE或AOD(离开角)CTE,以及其他可能的CTE类型。

CTE在蓝牙LE的高级应用中非常重要,特别是在实现高精度定位和角度测量方面。通过发送和接收CTE,设备可以计算出它们之间的相对位置或角度,这对于室内导航、资产跟踪和增强现实(AR)等应用来说是非常有用的。

LL_CTE_REQ是一种用于请求远程设备发送特定类型和长度的CTE的指令。CTE的长度和类型通过MinCTELenReqCTETypeReq字段指定,这对于实现BLE的高级功能至关重要。理解这些字段和CTE的用途对于开发基于BLE的高精度定位和导航应用至关重要。

3.25. LL_CTE_RSP

LL_CTE_RSP是用于PAWR(带响应的周期广播)的PDU类型。它不包含CtrData字段,这是其与其他类型PDU的一个显著区别。

3.25.1. PDU结构

虽然LL_CTE_RSP没有CtrData字段,但其结构通常包含以下关键部分:

  • PDU Header:协议头,包含PDU类型、信道选择算法标志位、发送与接收地址类别等信息。
  • Payload:数据荷载,对于LL_CTE_RSP来说,主要承载与CTE(Constant Tone Extension,恒定音调扩展)相关的响应数据。
  • MIC(Message Integrity Code,消息完整性校验码):用于确保数据在传输过程中的完整性。

3.25.2. 功能与应用

  • LL_CTE_RSP主要用于响应LL_CTE_REQ(恒定音调扩展请求包),在蓝牙AOA/AOD(Angle of Arrival/Angle of Departure,到达角/出发角)精准定位技术中发挥着重要作用。
  • 通过LL_CTE_RSP,设备可以确认接收到CTE请求,并返回相应的定位数据或状态信息。

3.25.3. 使用场景

  • 在蓝牙精准定位系统中,LL_CTE_RSP被用于辅助设备完成定位测量。
  • 当一个设备发起CTE请求时,另一个设备会响应LL_CTE_RSP,从而完成一次定位测量过程。

3.25.4. 注意事项

  • 在使用LL_CTE_RSP时,需要确保设备支持蓝牙AOA/AOD精准定位技术。
  • 同时,还需要注意PDU的格式和字段定义,以确保数据的正确传输和解析。

LL_CTE_RSP PDU是蓝牙协议中用于响应恒定音调扩展请求的重要数据包类型。它在蓝牙精准定位技术中发挥着关键作用,通过承载与CTE相关的响应数据,辅助设备完成定位测量。在使用时,需要确保设备支持相关技术,并注意PDU的格式和字段定义。

3.26. LL_PERIODIC_SYNC_IND

LL_PERIODIC_SYNC_IND PDU(协议数据单元)在BLE的周期性广播和同步机制中扮演着重要角色,并且该字段也嵌入在 LL_PERIODIC_SYNC_WR_IND PDU 中。其CtrData字段的格式如下图所示:

  • ID:由主机提供的标识符,供高层协议使用,本规范未指定或使用该值。
  • SyncInfo:具有蓝牙规范2.3.4.6节中规定的意义和格式,但同步包窗口偏移的参考点是具有指定计数器值的最近连接事件的锚点,且零偏移没有特殊含义。
  • connEventCount:连接事件计数器值,需满足currEvent - 2^14 < connEventCount < currEvent + 2^14(模65536)的条件,其中currEvent是传输(或重传)LL_PERIODIC_SYNC_IND PDU时的连接事件计数器值。
  • lastPaEventCounter:对于LL_PERIODIC_SYNC_IND PDU,它应设置为用于确定SyncInfo内容的AUX_SYNC_IND PDU的paEventCounter值;对于嵌入在LL_PERIODIC_SYNC_WR_IND PDU中的情况,它应设置为用于确定SyncInfo内容的子事件0中的AUX_SYNC_SUBEVENT_IND PDU的paEventCounter值。
  • SID:指向周期性广播的广播集的广播SID子字段。
  • AType:如果AdvA字段包含公共地址,则设置为0;如果包含随机地址,则设置为1。
  • SCA:指示发送此PDU的设备的睡眠时钟准确性,表示方式与CONNECT_IND PDU相同。
  • PHY:指示周期性广播使用的物理层(PHY),对应PHY的位设置为1,其余位设置为0。
  • AdvA:如果指向周期性广播的广播集中的广播主地址是可解析的私有地址,则应设置为使用相同IRK生成的任何可解析私有地址;否则,应设置为广播集中的广播主地址。
  • syncConnEventCount:发送设备在确定此PDU内容时使用的连接事件的连接事件计数器。这应是发送设备从它将发送LL_PERIODIC_SYNC_IND PDU的设备接收到数据包的连接事件,并且如果发送设备是包含这两个设备的微微网中的外围设备,则它使用接收到的数据包来同步其锚点。意味着在传输此PDU之前必须建立连接。

3.26.1. 功能与应用

LL_PERIODIC_SYNC_IND PDU主要用于周期性广播的同步指示。它允许设备通过广播事件来同步其定时,这对于实现低功耗、高精度的设备间通信至关重要。该PDU的发送方通常是周期性广播的源设备,而接收方则是希望与该设备同步的其他设备。

3.26.2. 使用场景

在BLE网络中,当设备需要定期广播数据(如传感器读数、位置信息等)时,可以使用周期性广播。此时,其他设备可以使用LL_PERIODIC_SYNC_IND PDU来同步其接收定时,从而更高效地接收和处理广播数据。

3.26.3. 注意事项

  • 在使用LL_PERIODIC_SYNC_IND PDU时,需要确保设备支持BLE的周期性广播和同步功能。
  • 发送方和接收方需要正确设置和使用CtrData字段中的各个子字段,以确保同步的准确性和可靠性。
  • 由于LL_PERIODIC_SYNC_IND PDU的传输依赖于现有的BLE连接,因此在传输此PDU之前必须建立连接。

3.27. LL_CLOCK_ACCURACY_REQ and LL_CLOCK_ACCURACY_RSP

LL_CLOCK_ACCURACY_REQ和LL_CLOCK_ACCURACY_RSP这两个PDU(协议数据单元),它们主要用于指示中央(Central)或外围(Peripheral)设备最差睡眠时钟精度(Sleep Clock Accuracy,SCA)。

  • LL_CLOCK_ACCURACY_REQ:是一个由设备发送的请求PDU,用于请求对方设备报告其睡眠时钟精度。这有助于确保两端设备在通信过程中能够保持同步,避免因时钟漂移而导致的通信问题。
  • LL_CLOCK_ACCURACY_RSP:是对LL_CLOCK_ACCURACY_REQ的响应PDU,包含发送设备的睡眠时钟精度信息。

它们的 CtrData 字段的格式如下图所示:

  • 位置与格式:SCA字段的格式与CONNECT_IND PDU中的SCA字段相同。它用于指示发送设备的最差睡眠时钟精度。

  • 作用:SCA字段的值对于确定设备在睡眠模式下的时钟稳定性至关重要。通过了解对方的SCA,设备可以调整其通信策略,以应对可能的时钟漂移,从而保持通信的稳定性和可靠性。

  • 发送方

    • 当PDU由中央设备发送时,SCA字段表示中央设备的睡眠时钟精度(centralSCA)。
    • 当PDU由外围设备发送时,SCA字段表示外围设备的睡眠时钟精度(peripheralSCA)。

3.27.1. 使用场景

在BLE通信中,设备可能需要长时间处于低功耗的睡眠模式。然而,当设备需要通信时,它们必须迅速唤醒并建立连接。由于设备的时钟在睡眠模式下可能会漂移,因此了解对方的睡眠时钟精度对于确保通信的同步性至关重要。通过发送LL_CLOCK_ACCURACY_REQ和接收LL_CLOCK_ACCURACY_RSP,设备可以获取对方的睡眠时钟精度信息,并根据这些信息调整其通信策略。

3.27.2. 注意事项

  • 设备应定期更新其睡眠时钟精度信息,以确保通信的稳定性和可靠性。
  • 在处理LL_CLOCK_ACCURACY_REQ和LL_CLOCK_ACCURACY_RSP时,设备应遵循BLE协议规定的时序和格式要求。

LL_CLOCK_ACCURACY_REQ和LL_CLOCK_ACCURACY_RSP是BLE协议中用于指示设备睡眠时钟精度的两个重要PDU。通过它们,设备可以获取对方的睡眠时钟精度信息,并根据这些信息调整其通信策略,从而确保通信的稳定性和可靠性。

3.28. LL_CIS_REQ

LL_CIS_REQ是BLE中用于请求建立或配置持续同步信道(CIS,Continuous Isochronous Stream)的PDU。CIS允许两个设备之间以固定的时间间隔和物理层(PHY)参数传输数据,非常适合于需要低延迟和恒定速率数据传输的应用,如音频和视频流。其 CtrData 字段的格式如下图所示:

以下是LL_CIS_REQ PDU中CtrData字段的各个字段的说明:

  • CIG_ID:设置为CIS所属的CIG(Continuous Isochronous Group)的标识符。CIG是多个CIS的集合,它们共享相同的连接间隔和锚点。

  • CIS_ID:设置为CIS的标识符,用于区分同一CIG中的不同CIS。

  • PHY_C_To_PPHY_P_To_C:分别指示从中央到外围和从外围到中央通信时使用的物理层(PHY)。这些字段根据前面的表2.23设置,且每个字段只能设置一个比特位。

  • Max_SDU_C_To_PMax_SDU_P_To_C:分别设置从中央主机到外围主机和从外围主机到中央主机的最大服务数据单元(SDU)大小(以字节为单位)。

  • Framed:设置为0表示使用未分帧的数据PDU,设置为1表示使用分帧的数据PDU。

  • Framing_Mode:对于分帧的数据PDU,设置为0表示使用可分段模式,设置为1表示使用未分段模式。对于未分帧的数据PDU,此字段保留未使用(RFU)。

  • SDU_Interval_C_To_PSDU_Interval_P_To_C:分别设置从中央主机到外围主机和从外围主机到中央主机的连续SDU之间的时间间隔(以微秒为单位)。值应在255到1048575之间。

  • Max_PDU_C_To_PMax_PDU_P_To_C:分别设置从中央到外围和从外围到中央的最大有效载荷大小(以字节为单位)。值应在0到251之间,且当相应的BN字段设置为0时,此字段也应设置为0。

  • NSE:设置每个CIS事件中的最大子事件数。值应在1到31之间。

  • Sub_Interval:设置同一CIS事件中,同一CIS的相邻子事件开始之间的时间(以微秒为单位)。如果NSE字段设置为1,则此值应设置为0;否则,值应至少为400µs且小于ISO_Interval。

  • BN_C_To_PBN_P_To_C:分别设置从中央到外围和从外围到中央的BN(Block Number)参数值。值应在0到15之间。

  • FT_C_To_PFT_P_To_C:分别设置从中央到外围和从外围到中央的FT(Flush Timeout)参数值。值应在1到255之间。

  • ISO_Interval:设置两个连续CIS锚点之间的时间,单位为1.25ms。值应在4到3200之间(即5ms到4s)。

  • CIS_Offset_MinCIS_Offset_Max:分别设置提议的最小和最大时间(以微秒为单位),从具有等于connEventCount的连接事件计数器值的ACL锚点到第一个CIS锚点。CIS_Offset_Max应大于或等于CIS_Offset_Min且小于connInterval。

  • connEventCount:设置满足要求的连接事件计数器值,该值应位于当前事件的前后一定范围内(模65536)。此值应大于LL_CIS_REQ PDU首次传输时的事件的currEvent值。

这些字段共同定义了CIS的参数,包括物理层、数据大小、时间间隔、子事件等,从而确保两个设备之间能够以同步的方式高效地传输数据。

3.29. LL_CIS_RSP

在BLE协议中,LL_CIS_RSP(连接间隔和从设备延迟响应)是用于响应LL_CIS_REQ(连接间隔和从设备延迟请求)的PDU(协议数据单元)。这里的PDU是BLE通信中用于交换信息的基本单位。其 CtrData 字段的格式如下图所示:

LL_CIS_RSPCtrData字段的格式中,每个字段的意义与LL_CIS_REQ PDU中同名字段的意义相同。意味着,如果在LL_CIS_REQ中请求了某些参数(比如连接间隔、从设备延迟等),LL_CIS_RSP则会以相同的字段格式返回这些参数的确认或修改后的值。

LL_CIS_RSP中,这些字段的值要么与LL_CIS_REQ中请求的值相同(如果请求被接受),要么表示一个修改后的值或拒绝原因(如果请求被拒绝)。

请注意,BLE协议规范中对于每个字段的确切格式和大小有详细的定义,开发者需要遵循这些规范来确保设备之间的正确通信。

3.30. LL_CIS_IND

LL_CIS_IND(Connectionless ISOCHronous Stream Indication,连接间隔同步指示)是BLE技术中用于指示无连接同步流(CIS)的一个协议数据单元(PDU)。其CtrData 字段的格式如下图 所示:

  • Access Address (AA):此字段应设置为CIS的接入地址,该地址由链路层根据Core 2.1.2节中规定的规则生成。接入地址是蓝牙通信中用于区分不同连接或数据包的唯一标识符。

  • CIS_Offset:此字段表示从ACL(异步连接链路)锚点到CIS锚点的时间偏移量,单位为微秒。ACL锚点是指ACL连接事件中的固定时间点,而CIS锚点则是CIS事件中的对应时间点。CIS_Offset用于确定CIS事件相对于ACL连接事件的精确时间位置。

  • CIG_Sync_Delay:此字段应设置为CIG(连接间隔组)同步延迟的值,单位为微秒。CIG_Sync_Delay用于指示CIS事件与CIG中其他事件之间的同步延迟。

  • connEventCount:此字段应设置为一个连接事件计数器值,该值满足条件currEvent – 2^14 < connEventCount < currEvent + 2^14 (mod 65536)。其中,currEvent是传输LL_CIS_IND PDU时的ACL连接事件计数器值。connEventCount应设置为大于LL_CIS_IND PDU首次传输时的事件计数器值的一个值。这个字段用于确保LL_CIS_IND PDU与正确的ACL连接事件相关联。

这些字段共同构成了LL_CIS_IND PDU的CtrData部分,用于在BLE设备间传递无连接同步流的相关信息。

3.31. LL_CIS_TERMINATE_IND

LL_CIS_TERMINATE_IND(连接间隔同步终止指示)是BLE技术中的一个协议数据单元(PDU),用于通知对等设备(peer device)某个特定的连接间隔同步(CIS)即将被终止。其CtrData字段格式如下图所示:

  • CIG_ID
    • 设置要求:应设置为包含即将被终止的 CIS 的 CIG(Coded Isochronous Group,编码同步组)的标识符。这个标识符用于唯一标识特定的 CIG,以便接收方能够确定是哪个 CIG 中的 CIS 正在被终止。
    • 作用:通过这个参数,接收方可以了解到终止操作所涉及的 CIG,从而在必要时采取相应的后续处理措施,例如更新其内部的 CIG 和 CIS 状态管理信息。
  • CIS_ID
    • 设置要求:应设置为正在被终止的 CIS 的标识符。与 CIG_ID 类似,这个标识符唯一标识特定的 CIS。
    • 作用:明确指出具体是哪个 CIS 即将被终止,接收方可以根据这个标识符来精确地处理与该 CIS 相关的资源释放、状态更新等操作。
  • ErrorCode
    • 设置要求:设置为一个值,用于告知对等设备 CIS 即将被终止的原因。具体的错误码列表和描述可以参考 [Vol 1] Part F(蓝牙核心规范的第一卷 F 部分)中的 “Controller Error Codes”(控制器错误码)。蓝牙Controller错误代码全面概览_蓝牙错误代码-CSDN博客
    • 作用:提供了终止 CIS 的原因信息,有助于接收方理解为什么 CIS 被终止,以便进行适当的错误处理和后续操作。例如,如果错误码表示资源不足导致 CIS 终止,接收方可能会尝试释放一些资源或者调整其对 CIS 的请求。

通过发送LL_CIS_TERMINATE_IND PDU,BLE设备可以优雅地终止一个CIS,同时向对等设备提供终止原因。这对于维护BLE网络的稳定性和可靠性至关重要,因为它允许设备在不再需要CIS时能够正确地释放资源。

在实际应用中,BLE设备可能会因为多种原因终止CIS,例如:

  • 资源不足,无法继续维持CIS。
  • 检测到CIS的通信质量下降,无法满足应用需求。
  • 用户或应用程序请求终止CIS。

无论原因是什么,BLE设备都应该通过发送LL_CIS_TERMINATE_IND PDU来通知对等设备,并提供相应的错误代码来解释终止原因。

3.32. LL_POWER_CONTROL_REQ

LL_POWER_CONTROL_REQ(链路层功率控制请求)是BLE技术中的一个协议数据单元(PDU),用于在BLE设备之间请求调整发射功率。其CtrData字段格式如下图所示:

  • PHY 参数
    • 设置要求:用于指示请求所针对的物理层(PHY)。根据下表 2.25 中对不同 PHY 的规定,将与请求的 PHY 对应的位设置为 1,其余位设置为 0。例如,如果请求针对特定的BLE物理层,那么对应的位会被设置为 1,以明确表示该请求与这个特定的 PHY 相关。
    • 作用:通过设置 PHY 参数,接收方可以确定请求是针对哪个物理层的,从而能够正确地处理功率控制请求。不同的 PHY 可能具有不同的功率特性和要求,因此明确指定 PHY 对于确保正确的功率调整至关重要。

  • Delta 参数
    • 设置要求:Delta 参数表示针对指定 PHY,接收方的发射功率水平所需的变化量,以 dB 为单位。它是一个有符号整数,具体含义如下:
      • 正值表示请求增加发射功率水平。
      • 负值表示请求降低发射功率水平。
      • 零表示不请求任何变化。
      • 值为 0x7F 表示请求将发射功率增加到最大水平。
    • 作用:Delta 参数允许发送方请求接收方调整其发射功率,以适应不同的通信环境和需求。例如,如果发送方发现信号强度较弱,可以发送一个正值的 Delta 参数请求接收方增加发射功率,以提高通信质量。
  • TxPower 参数
    • 设置要求:TxPower 参数表示发送方在指定 PHY 上的发射功率水平,以 dBm 为单位,用有符号整数表示。当设置为 127 时,表示该值不可用。并且不应设置为 126。
    • 作用:接收方可以通过这个参数了解发送方的发射功率水平,这对于评估通信链路的质量和进行相应的功率调整决策可能是有用的。例如,如果接收方发现发送方的发射功率过高或过低,可能会根据自身情况和通信需求做出相应的调整。

通过发送LL_POWER_CONTROL_REQ PDU,BLE设备可以请求对等设备调整其发射功率,以优化通信质量、减少功耗或满足其他应用需求。例如,如果设备检测到通信链路的质量下降,它可能会请求对等设备增加其发射功率以提高接收信号的强度。

在实际应用中,BLE设备可能会根据多种因素来决定是否发送LL_POWER_CONTROL_REQ PDU,这些因素包括通信链路的质量、设备的电池电量、当前的环境条件等。通过动态调整发射功率,BLE设备可以在保持通信质量的同时,尽可能地减少功耗和干扰。

3.33. LL_POWER_CONTROL_RSP 

LL_POWER_CONTROL_RSP(链路层功率控制响应)是BLE技术中的一个协议数据单元(PDU),用于响应之前接收到的LL_POWER_CONTROL_REQ PDU。其CtrData字段格式如下图所示:

  • Min 参数
    • 设置要求:如果发送方当前处于最小支持功率水平,则设置 Min 参数。
    • 作用:这个参数向接收方传达发送方的功率状态信息。如果 Min 被设置,接收方可以知道发送方已经在最小功率水平下运行,这可能会影响到后续的通信决策,例如是否需要调整通信参数以适应较低的功率情况。
  • Max 参数
    • 设置要求:如果发送方当前处于最大支持功率水平,则设置 Max 参数。
    • 作用:与 Min 参数类似,Max 参数向接收方表明发送方的功率状态。如果 Max 被设置,接收方知道发送方在最大功率水平下运行,这也可能影响到通信策略,比如是否需要考虑功率控制以避免干扰或节省能源。
    • 注意事项:如果 Min 和 Max 都被设置,那么说明发送方具有单一固定的发射功率水平。这意味着发送方不能调整功率,接收方在这种情况下需要根据这个固定功率水平来进行通信规划。
  • Delta 参数
    • 设置要求:Delta 参数表示发送方针对请求的 PHY 实际做出的发射功率水平变化量,以 dB 为单位。它是一个有符号整数,正值表示功率增加,负值表示功率降低,零表示没有变化。
    • 作用:这个参数向接收方反馈发送方对功率控制请求的响应情况。接收方可以根据这个变化量来评估通信链路的质量变化以及进一步调整功率控制策略。
  • TxPower 参数
    • 设置要求:TxPower 参数表示发送方在请求的 PHY 上的发射功率水平,以 dBm 为单位,用有符号整数表示。当设置为 127 时,表示该值不可用。当设置为 126 时,表示发送方当前没有为请求的 PHY 进行功率管理,在这种情况下,其他所有字段都应被忽略。
    • 作用:接收方通过这个参数可以确切了解发送方在特定 PHY 上的实际发射功率水平,有助于评估通信质量和进行功率控制决策。
  • APR(Acceptable Power Reduction)参数
    • 设置要求:APR 参数表示对于请求的 PHY,发送方能够接受的对等设备辐射发射功率水平的最大降低量,以 dB 为单位。当设置为 0xFF 时,表示发送方无法确定一个值。
    • 作用:这个参数为接收方提供了发送方对对等设备功率降低的可接受程度信息。在进行功率控制协商时,接收方可以考虑这个值来调整自己的发射功率,以满足双方的通信需求和功率限制。

通过发送LL_POWER_CONTROL_RSP PDU,BLE设备可以通知对等设备它是否已根据之前的请求调整了发射功率,以及调整了多少。此外,它还可以提供关于其当前发射功率级别、是否处于最小或最大支持级别以及可接受的对等设备功率降低量的信息。

在实际应用中,BLE设备可能会根据多种因素来决定是否调整其发射功率,这些因素包括通信链路的质量、设备的电池电量、当前的环境条件以及对等设备的请求等。通过动态调整发射功率,BLE设备可以在保持通信质量的同时,尽可能地减少功耗和干扰。

3.34. LL_POWER_CHANGE_IND 

LL_POWER_CHANGE_IND(链路层功率变化指示)是BLE技术中的一个协议数据单元(PDU),用于通知对等设备发送方的发射功率级别已经改变。其CtrData字段格式如下图所示:

  • PHY 参数
    • 设置要求:PHY 参数用于指示功率水平发生变化的物理层(PHY)。如果多个物理层的其他字段具有相同的值,可以设置 PHY 字段的多个位。
    • 作用:明确指出哪些物理层的功率水平发生了变化,接收方可以根据这个信息针对特定的物理层进行相应的处理和调整。
  • Min 参数
    • 设置要求:如果发送方当前处于最小支持功率水平,则设置 Min 参数。
    • 作用:向接收方传达发送方在特定物理层上的功率状态信息,有助于接收方了解发送方的功率限制情况,以便调整通信策略。
  • Max 参数
    • 设置要求:如果发送方当前处于最大支持功率水平,则设置 Max 参数。
    • 作用:与 Min 参数类似,表明发送方在特定物理层上的功率上限状态,为接收方提供功率控制的参考信息。
    • 注意事项:如果 Min 和 Max 都被设置,说明发送方在该物理层上具有单一固定的发射功率水平。
  • Delta 参数
    • 设置要求:Delta 参数表示发送方在指示的物理层上的发射功率水平变化量(如果有变化),以 dB 为单位。正值表示功率增加,负值表示功率降低,零表示没有变化。
    • 作用:反馈发送方在特定物理层上的功率变化情况,接收方可以根据这个变化量评估通信质量的变化,并决定是否需要采取相应的调整措施。
  • TxPower 参数
    • 设置要求:TxPower 参数表示发送方在指示的物理层上的发射功率水平,以 dBm 为单位,用有符号整数表示。当设置为 127 时,表示该值不可用。当设置为 126 时,表示发送方已停止对指示的物理层进行功率管理,在这种情况下,其他所有字段都应被忽略。
    • 作用:提供发送方在特定物理层上的实际发射功率水平信息,接收方可以据此判断通信链路的功率状况,并进行相应的功率控制决策。

通过发送LL_POWER_CHANGE_IND PDU,BLE设备可以主动通知对等设备其发射功率级别的变化,而无需等待对等设备的请求。这有助于对等设备了解当前通信链路的质量,并可能根据需要调整其自己的发射功率级别。在实际应用中,BLE设备可能会根据多种因素来决定是否发送LL_POWER_CHANGE_IND PDU,这些因素包括通信链路的质量、设备的电池电量、当前的环境条件等。

3.35. LL_SUBRATE_REQ 

LL_SUBRATE_REQ(链路层子速率请求)是BLE技术中的一个协议数据单元(PDU),用于请求更改当前连接的数据传输子速率。通过降低数据传输速率(即子速率),BLE设备可以在保持连接的同时减少功耗,这对于那些对功耗有严格要求的应用场景特别有用。其CtrData字段格式如下图所示:

  • SubrateFactorMin:此字段应设置为请求的最小connSubrateFactor值,该值定义了数据传输速率的下限。connSubrateFactor是一个比例因子,用于确定实际的数据传输速率相对于BLE标准速率(1Mbit/s)的降低程度。例如,如果connSubrateFactor为2,则实际数据传输速率为500kbit/s。

  • SubrateFactorMax:此字段应设置为请求的最大connSubrateFactor值,该值定义了数据传输速率的上限。与SubrateFactorMin类似,它也是一个比例因子,用于确定数据传输速率的最大降低程度。

  • Max_Latency:此字段应设置为请求的最大connPeripheralLatency值,该值定义了从主机发送数据包到从机响应数据包之间的最大允许延迟(以子速率事件为单位)。在子速率模式下,由于数据传输速率的降低,延迟可能会增加。因此,Max_Latency用于确保即使在子速率模式下,连接也能保持足够的响应性。

    注意:无论实际选择的子速率因子如何,都应应用相同的最大延迟。此外,SubrateFactorMax × (Max_Latency + 1)的值应小于或等于500,以确保连接的稳定性和可靠性。

  • ContinuationNumber:此字段应设置为请求的最小connContinuationNumber值,该值定义了在一个子速率事件中可以连续发送的数据包数量。这有助于优化数据传输效率,特别是在需要发送大量数据的情况下。

  • Timeout:此字段用于指示请求的connSupervisionTimeout值,该值定义了连接监督超时的时间长度。在BLE中,connSupervisionTimeout用于确保连接在一段时间内保持活动状态。如果在这段时间内没有接收到任何数据包,则连接将被视为已丢失。Timeout字段的值乘以10毫秒即可得到实际的connSupervisionTimeout值。

通过发送LL_SUBRATE_REQ PDU,BLE设备可以请求更改当前连接的数据传输子速率,以适应不同的应用场景和功耗要求。在实际应用中,BLE设备可能会根据多种因素来决定是否发送LL_SUBRATE_REQ PDU,这些因素包括当前连接的质量、设备的电池电量、以及用户或应用程序的需求等。

3.36. LL_SUBRATE_IND 

LL_SUBRATE_IND(链路层子速率指示)用于通知对等设备当前连接的数据传输子速率已经更改或即将更改。这个PDU通常由响应LL_SUBRATE_REQ(链路层子速率请求)PDU的设备发送,以确认子速率的更改。其CtrData字段格式如下图所示:

  • SubrateFactor:此字段应设置为新的connSubrateFactor值,该值定义了数据传输速率相对于BLE标准速率(1Mbit/s)的降低程度。connSubrateFactor是一个比例因子,用于确定实际的数据传输速率。例如,如果connSubrateFactor为2,则实际数据传输速率为500kbit/s。

  • SubrateBaseEvent:此字段应设置为新的connSubrateBaseEvent值,该值定义了子速率事件的基础时间间隔。在BLE中,子速率事件是用于数据传输的时间单位,其长度取决于connSubrateFactorconnInterval(连接间隔)的值。connSubrateBaseEvent用于计算子速率事件的实际发生时间。

  • Latency:此字段应设置为新的connPeripheralLatency值,在子速率模式下,该值定义了从主机发送数据包到从机响应数据包之间的最大允许延迟(以子速率事件为单位)。由于数据传输速率的降低,延迟可能会增加。因此,Latency用于确保即使在子速率模式下,连接也能保持足够的响应性。

  • ContinuationNumber:此字段应设置为新的connContinuationNumber值,该值定义了在一个子速率事件中可以连续发送的数据包数量。这有助于优化数据传输效率,特别是在需要发送大量数据的情况下。

  • Timeout:此字段用于指示新的connSupervisionTimeout值,该值定义了连接监督超时的时间长度。在BLE中,connSupervisionTimeout用于确保连接在一段时间内保持活动状态。如果在这段时间内没有接收到任何数据包,则连接将被视为已丢失。Timeout字段的值乘以10毫秒即可得到实际的connSupervisionTimeout值。

通过发送LL_SUBRATE_IND PDU,BLE设备可以通知对等设备当前连接的数据传输子速率已经更改或即将更改,并提供新的子速率参数。这有助于对等设备适应新的数据传输速率,并确保连接的稳定性和可靠性。在实际应用中,BLE设备可能会根据多种因素来决定是否发送LL_SUBRATE_IND PDU,这些因素包括当前连接的质量、设备的电池电量、以及用户或应用程序的需求等。

3.37. LL_CHANNEL_REPORTING_IND 

LL_CHANNEL_REPORTING_IND(链路层信道报告指示)是BLE技术中的一个协议数据单元(PDU),用于在BLE连接中启用或禁用信道分类报告功能,并设置相关的报告参数。这个功能允许从设备(Peripheral)向主设备(Central)报告它所检测到的信道状态,特别是哪些信道被认为是“好”的(即,具有较低的干扰和较高的数据传输成功率),哪些信道被认为是“坏”的(即,具有较高的干扰和较低的数据传输成功率)。其CtrData 字段的具体格式可如下图所示:

  • Enable:此字段用于指示是否需要启用或禁用信道分类报告功能。根据下表2.26的规定,当Enable字段设置为某个特定值时(通常是1或0),它将指示对等设备是否应该开始或停止发送LL_CHANNEL_STATUS_IND PDU(链路层信道状态指示PDU)来报告信道状态。

  • Min_Spacing:此字段用于设置发送连续LL_CHANNEL_STATUS_IND PDU之间的最小时间间隔,单位为200毫秒。这个值决定了从设备在发送一个LL_CHANNEL_STATUS_IND PDU之后,需要等待多长时间才能发送下一个PDU。Min_Spacing的值应在5(即1秒)到150(即30秒)之间。这个参数有助于防止信道状态报告过于频繁,从而减少对等设备的处理负担。

  • Max_Delay:此字段用于设置从设备检测到信道分类变化到生成并发送LL_CHANNEL_STATUS_IND PDU之间的最大时间延迟,单位同样为200毫秒。这个值决定了从设备在检测到信道状态变化后,有多少时间可以延迟发送信道状态报告。Max_Delay的值也应在5(即1秒)到150(即30秒)之间,并且必须大于或等于Min_Spacing的值。这个参数确保了从设备有足够的时间来处理信道状态变化,并在合理的时间内向主设备报告。

通过发送LL_CHANNEL_REPORTING_IND PDU,BLE设备可以启用或禁用信道分类报告功能,并设置相关的报告参数。这有助于主设备了解当前连接中的信道状态,从而做出更明智的决策,比如选择更好的信道进行数据传输,以提高连接的稳定性和可靠性。在实际应用中,BLE设备可能会根据多种因素来决定是否启用信道分类报告功能,这些因素包括当前连接的质量、设备的电池电量、以及用户或应用程序的需求等。

3.38. LL_CHANNEL_STATUS_IND 

LL_CHANNEL_STATUS_IND(链路层信道状态指示)用于从从设备(Peripheral)向主设备(Central)报告BLE连接中使用的各个数据信道的分类状态。这个功能允许主设备了解哪些信道是“好”的(即,数据传输成功率高,干扰低),哪些信道是“坏”的(即,数据传输成功率低,干扰高),从而可以做出更明智的决策来优化连接性能和稳定性。其CtrData字段格式如下图所示:

  • Channel_Classification:类型为 uint2[37],即一个包含 37 个无符号整数(2 位)的数组。每个元素对应一个BLE数据信道的分类状态。BLE定义了37个数据信道,编号从0到36。数组中的第n个元素(n从0开始编号)定义了编号为n的数据信道的分类状态。

    • 值0:表示该信道的分类状态未知。可能是因为从设备还没有足够的数据来对该信道进行分类,或者因为从设备被配置为不报告该信道的分类状态。

    • 值1:表示该信道被认为是“好”的。意味着在该信道上进行的数据传输通常具有较高的成功率,并且受到的干扰较少。

    • 值2:保留给未来使用。目前,这个值没有定义具体的含义,但从设备的实现应该忽略这个值,并且不应该将其解释为任何特定的信道分类状态。

    • 值3:表示该信道被认为是“坏”的。意味着在该信道上进行的数据传输通常具有较低的成功率,并且可能受到较大的干扰。

通过发送LL_CHANNEL_STATUS_IND PDU,从设备可以向主设备提供有关BLE连接中使用的各个数据信道分类状态的实时信息。主设备可以使用这些信息来优化连接,比如通过选择“好”的信道来发送关键数据,或者避免使用“坏”的信道来减少数据传输失败的可能性。这有助于提高BLE连接的稳定性和可靠性,特别是在存在大量干扰或信道条件变化的环境中。

3.39. LL_PERIODIC_SYNC_WR_IND

在BLE的周期性同步(Periodic Synchronization)特性中,LL_PERIODIC_SYNC_WR_IND(周期性同步写入指示)是一个重要的数据包类型,它允许设备配置周期性同步的参数。其CtrData 字段格式如下图所示:

CtrData字段的格式和意义与LL_PERIODIC_SYNC_IND(周期性同步指示)中的CtrData字段相同,通常包括用于周期性广播(Periodic Advertising)的同步信息,如同步值(Sync Value)、同步地址(Sync Address)等。

  • RspAA 字段
    • 含义:RspAA(响应访问地址)字段应设置为设备在传输响应数据包给周期性广播时所使用的访问地址。
    • 重要性:这个地址对于确保响应数据包能够被正确接收和识别至关重要。
  • numSubevents 字段
    • 含义:numSubevents(子事件数量)字段应设置为子事件的数量。
    • 重要性:这个字段定义了周期性同步期间将发生的子事件的数量,这对于确定同步的周期性和频率至关重要。
  • subeventInterval 字段
    • 含义:subeventInterval(子事件间隔)字段应设置为从一个子事件的开始到下一个子事件的开始的时间,单位为1.25毫秒。
    • 重要性:这个字段定义了子事件之间的时间间隔,从而决定了周期性同步的粒度。
  • responseSlotDelay 字段
    • 含义:responseSlotDelay(响应槽延迟)字段应设置为从一个子事件的开始到第一个响应槽的开始的时间,单位为1.25毫秒。
    • 重要性:这个字段定义了从子事件开始到可以开始发送响应数据包的时间延迟。
  • responseSlotSpacing 字段
    • 含义:responseSlotSpacing(响应槽间距)字段应设置为从一个响应槽的开始到下一个响应槽的开始的时间,单位为0.125毫秒。
    • 重要性:这个字段定义了连续响应槽之间的时间间隔,从而决定了响应数据包的发送速率。

LL_PERIODIC_SYNC_WR_IND数据包中的这些字段共同定义了周期性同步的参数,包括同步的访问地址、子事件的数量和间隔、以及响应数据包的发送时间和速率。这些参数对于实现BLE设备之间的可靠和高效的周期性通信至关重要。

3.40. LL_FEATURE_EXT_REQ and LL_FEATURE_EXT_RSP

在BLE协议中,LL_FEATURE_EXT_REQ(链路层特性扩展请求)和LL_FEATURE_EXT_RSP(链路层特性扩展响应)是用于交互双方设备支持的扩展特性的重要数据包类型。

3.40.1. LL_FEATURE_EXT_REQ(链路层特性扩展请求)

  • CtrData 字段格式:如下图所示:

  • MaxPage:此字段包含发送方特性集(FeatureSet)中最高页码的值,该页码至少包含一个被设置为1的位。这表示发送方支持的特性范围。
  • PageNumber(页码):应包含存储在FeaturePage中的页面编号,范围是 0x01 到 0x0A。这个字段指定了当前正在传输的特征页面的具体编号。在进行扩展功能的请求和响应过程中,可能需要分多个页面来传输完整的特征集信息,PageNumber 用于明确当前传输的是哪个页面。
  • FeaturePage(特性页):此字段包含发送方特性集中指定页码的特性集。这些特性是BLE协议栈中定义的可选功能,也称为特性(Feature)。

3.40.2. LL_FEATURE_EXT_RSP(链路层特性扩展响应)

  • CtrData 字段格式:与LL_FEATURE_EXT_REQ类似,也包含多个字段以表示响应的特性。
  • MaxPage:此字段同样包含响应方特性集中最高页码的值,表示响应方支持的特性范围。
  • PageNumber 和 FeaturePage:这些字段(如果包含)将指示响应方在特定页码上支持的特性集。

3.40.3. 交互过程

  • 发送请求:一方设备(通常称为Central)通过发送LL_FEATURE_EXT_REQ数据包来请求另一方设备(通常称为Peripheral)的特性集信息。
  • 接收响应:Peripheral接收到请求后,通过发送LL_FEATURE_EXT_RSP数据包来响应,其中包含其支持的特性集信息。
  • 特性集匹配:Central和Peripheral可以根据彼此支持的特性集来协商使用哪些特性,以实现更高效和可靠的通信。

3.40.4. 重要性

  • 扩展性:随着BLE技术的不断发展,新的特性不断被引入。LL_FEATURE_EXT_REQLL_FEATURE_EXT_RSP数据包允许设备交互其支持的扩展特性,从而确保双方能够充分利用最新的BLE功能。
  • 兼容性:通过特性集的交互,设备可以了解其通信伙伴支持哪些特性,从而避免使用不兼容的特性,确保通信的顺利进行。

LL_FEATURE_EXT_REQLL_FEATURE_EXT_RSP数据包在BLE协议中扮演着至关重要的角色,它们允许设备交互其支持的扩展特性,从而实现更高效、可靠和兼容的通信。

3.41. LL_CS_SEC_REQ

在BLE协议中,LL_CS_SEC_REQ(链路层连接安全请求)是一个重要的数据包类型,用于在BLE连接中建立或更新连接安全参数。

  • 目的:该数据包用于请求或确认连接安全参数,如加密密钥、初始化向量(IV)、实例化随机数(nonce)和个性化向量(PV)等。
  • 发送方:通常由Central(中心设备)发送,但也可能由Peripheral(外围设备)在特定情况下发送。

该数据包中CtrData字段的格式如下图所示:

  • CS_IV_C:此字段包含Central用于连接安全(CS)的初始化向量(IV)的部分。IV是加密过程中用于确保数据随机性和不可预测性的一个关键组件。
  • CS_IN_C:此字段包含Central用于CS的实例化随机数(nonce)的部分。Nonce是一个在加密过程中只使用一次的数值,用于增加加密的安全性。
  • CS_PV_C:此字段包含Central用于CS的个性化向量(PV)的部分。PV是一个与设备相关的固定值,用于在加密过程中增加额外的安全性。

3.41.1. 字段的重要性

  • CS_IV_C:确保加密过程中使用的IV是唯一的,从而防止攻击者通过重复加密相同的明文来破解加密密钥。
  • CS_IN_C:通过引入nonce,增加了加密过程的随机性,使得即使相同的明文被多次加密,也会产生不同的密文。
  • CS_PV_C:个性化向量与设备相关,使得即使两个设备使用相同的加密算法和密钥,它们的加密结果也是唯一的。这有助于防止攻击者在不同设备之间重用加密结果。

3.41.2. 连接安全过程

当Central发送LL_CS_SEC_REQ数据包时,它通常是在请求Peripheral确认或更新连接安全参数。Peripheral在接收到请求后,会根据自己的安全策略和已配置的参数来响应。如果双方成功协商并应用了新的安全参数,那么它们之间的通信将受到更强的保护。

LL_CS_SEC_REQ数据包在BLE连接安全过程中扮演着至关重要的角色。它允许Central和Peripheral协商并应用新的安全参数,从而确保它们之间的通信是安全、可靠和不可预测的。

3.42. LL_CS_SEC_RSP

在BLE协议中,LL_CS_SEC_RSP(链路层连接安全响应)是一个关键的数据包,用于响应LL_CS_SEC_REQ(链路层连接安全请求)数据包。

  • 目的:该数据包由Peripheral(外围设备)发送,用于响应Central(中心设备)的连接安全请求。它包含Peripheral用于连接安全(CS)的初始化向量(IV)、实例化随机数(nonce)和个性化向量(PV)的部分。
  • 发送时机:当Peripheral接收到Central的LL_CS_SEC_REQ数据包后,它会根据自己的安全策略和已配置的参数来生成相应的响应,并通过LL_CS_SEC_RSP数据包发送给Central。

LL_CS_SEC_RSP数据包中CtrData字段格式如下图所示:

  • CS_IV_P:此字段包含Peripheral用于CS的初始化向量(IV)的部分。IV是加密过程中用于确保数据随机性和不可预测性的一个关键组件。在BLE连接安全中,IV通常由Central和Peripheral共同生成,以确保加密的唯一性和安全性。
  • CS_IN_P:此字段包含Peripheral用于CS的实例化随机数(nonce)的部分。Nonce是一个在加密过程中只使用一次的数值,用于增加加密的安全性。在BLE中,nonce的引入有助于防止重放攻击和其他类型的加密攻击。
  • CS_PV_P:此字段包含Peripheral用于CS的个性化向量(PV)的部分。PV是一个与设备相关的固定值,用于在加密过程中增加额外的安全性。在BLE中,PV通常与设备的硬件或软件标识相关联,以确保即使在不同的连接中,加密结果也是唯一的。

3.42.1. 响应过程

当Central接收到Peripheral的LL_CS_SEC_RSP数据包后,它会检查响应中的安全参数是否与自己的期望相符。如果双方成功协商并应用了相同的安全参数,那么它们之间的通信将受到更强的保护。如果协商失败,Central和Peripheral可能需要重新尝试连接安全过程,或者放弃连接。

3.42.2. 安全性考虑

  • 初始化向量(IV):确保每次连接安全过程中使用的IV都是唯一的,以防止攻击者通过重复加密相同的明文来破解加密密钥。
  • 实例化随机数(nonce):通过引入nonce,增加了加密过程的随机性,使得即使相同的明文被多次加密,也会产生不同的密文。
  • 个性化向量(PV):与设备相关的PV有助于确保加密结果的唯一性,即使在不同的连接中也是如此。

LL_CS_SEC_RSP数据包在BLE连接安全过程中起着至关重要的作用。它允许Central和Peripheral协商并确认连接安全参数,从而确保它们之间的通信是安全、可靠和不可预测的。

3.43. LL_CS_CAPABILITIES_REQ and LL_CS_CAPABILITIES_RSP

LL_CS_CAPABILITIES_REQ(链路层信道状态信息能力请求)和 LL_CS_CAPABILITIES_RSP(链路层信道状态信息能力响应)是蓝牙的链路层(Link Layer)能力请求的数据包,用于设备之间交换信道状态信息相关的能力信息,以确定在蓝牙通信中可以使用的信道状态信息(CS)模式、功能和参数。其数据包中CtrData字段格式如下图所示:

  • Mode_Types 字段

    • 一个位字段,用于指示链路层支持哪些可选的CS模式(如模式3)。
    • 设备应支持文档中提到的与模式3相关的部分。

  • RTT_Capability 字段

    • 指示设备满足哪些往返时间(RTT)精度要求。

    • 各个位对应于不同的RTT类型和精度要求(如10ns或150ns)。
    • 如果位设置为1,则对应的“N”值满足10ns精度要求;如果设置为0,则满足150ns要求或不支持该类型。
  • RTT_AA_Only_N、RTT_Sounding_N 和 RTT_Random_Sequence_N 字段

    • 由产品制造商指定的值,用于满足RTT精度要求。
    • 如果支持可选的PHY,则这些字段应设置为在所有强制和可选PHY上测试得出的最高“N”值。

  • NADM_Sounding_Capability 和 NADM_Random_Sequence_Capability 字段

    • 位映射字段,用于指示设备是否支持归一化攻击检测器度量(NADM)。
    • 这些字段应用于CS_SYNC接收时的特定情况。

  • CS_SYNC_PHY_Capability 字段

    • 位映射字段,指示链路层支持哪些可选的发送和接收PHY用于CS_SYNC交换。
    • 支持LE 2M PHY或LE 2M 2BT PHY的设备应遵守相应的文档部分。

  • Num_Ant 字段:应设置为可用于 CS 音调交换的天线元件数量,取值范围在 1 到 4 之间。每个天线元件由本地设备按照特定顺序排列,这个顺序是特定于实现的,但应保持不变。

  • Max_Ant_Path 字段:应设置为设备在 CS 音调交换中支持的最大天线路径数量,取值范围在 1 到 4 之间,并且应大于或等于 Num_Ant 字段的值。

  • Role 字段

    • 设置为链路层支持的CS角色选项(如发起者或反射器)。
    • 至少应设置一个位。

  • No_FAE 位

    • 如果设备在反射器角色下仅支持0的FAE(频率调整误差),则设置为1。
    • 否则,设置为0。
  • Channel Selection Algorithm #3c bit:如果支持信道选择算法 #3c,则该位应设置为 1。

  • Sounding_PCT_Estimate bit:如果支持从探测序列中估计百分比吞吐量(Percentile Throughput,PCT)且 RTT_Sounding_N 设置为大于 0 的值,则该位应设置为 1。
  • Num_Configs 字段:应设置为发送此 PDU 的链路层针对此特定 ACL(Asynchronous Connectionless Link)连接支持的独立 CS 配置数量。取值应大于 0 且小于或等于 4。Max_Procedures_Supported 字段:应设置为发送此 PDU 的链路层对于 N_PROCEDURE_COUNT 值支持的最大可能值,如 Section 4.5.18.1 中所述。取值应大于或等于 0,其中 0 表示能够运行 CS 过程重复直到被终止。
  • T_SW 字段:应设置为以微秒为单位的天线切换周期的有效持续时间,当在有源传输期间执行天线切换时,如 [Vol 6] Part H 的 Section 4.7 中所述。
  • T_IP1_Capability、T_IP2_Capability、T_FCS_Capability、T_PM_Capability 字段:这些字段分别包含对 T_IP1、T_IP2、T_FCS 和 T_PM 参数的支持的可选持续时间。每个支持的持续时间由根据相应参数的索引定义的位表示。位值为 0 表示不支持特定的持续时间,位值为 1 表示支持。超出最大索引的位位置保留供将来使用。
  • TX_SNR_Capability 字段:包含对调制传输的支持的可选 TX 信噪比(Signal-to-Noise Ratio,SNR)控制级别。每个支持的级别由根据 SNR 输出索引定义的位表示。位值为 0 表示不支持特定的 SNR 输出级别,位值为 1 表示支持。超出最大 SNR 输出索引的位位置保留供将来使用。

注意事项梳理:

  • 兼容性
    • 确保发送和接收设备都支持相同的CS模式和RTT类型。
    • 检查PHY兼容性,确保双方都能理解并使用相同的物理层。
  • 精度要求
    • 根据应用需求选择合适的RTT精度(10ns或150ns)。
    • 如果需要高精度,请确保设备支持并配置了相应的“N”值。
  • 天线和路径配置
    • 根据设备的天线数量和可用路径配置Num_Ant和Max_Ant_Path字段。
    • 确保这些配置与设备的实际能力相匹配。
  • 角色和FAE配置
    • 根据设备在CS过程中的角色(发起者或反射器)正确设置Role字段。
    • 如果设备在反射器角色下有限制(如仅支持0的FAE),请确保No_FAE位正确设置。
  • 文档支持
    • 确保设备支持文档中提到的所有相关部分,特别是与CS能力相关的部分。
    • 如果设备支持可选功能(如多天线、高精度RTT等),请确保遵守相应的文档要求。

通过遵循这些注意事项,可以确保设备在信道探测过程中正确配置并有效通信。

3.44.  LL_CS_CONFIG_REQ

LL_CS_CONFIG_REQ是BLE链路层中的一个特定请求消息,用于配置信道状态信息(CS)相关的参数。该请求消息的格式由特定的控制数据(CtrData)字段定义,如下图所示:

  • Config_ID 字段:应设置为正在配置的特定信道状态信息配置标识符,这个标识符用于唯一标识特定的 CS 配置。

  • Action 字段:指示此特定配置标识符是正在创建还是正在删除,如果此字段设置为 “removed”(删除),则除了 Config_ID 和 Action 字段之外,此协议数据单元(PDU)中的所有其他字段均为保留供将来使用(RFU)。

  • ChM 字段:包含信道映射,指示在 CS 过程中哪些信道应被使用和哪些信道应不被使用。每个信道由根据蓝牙规范 [Vol 6] Part H, Section 1 中定义的 CS 信道索引定位的位表示。最低有效位(LSB)代表 CS 信道索引 0,位 78 代表 CS 信道索引 78。超出此索引范围的 ChM 位为 RFU。位值为 1 表示该信道应被使用,位值为 0 表示该信道不应被使用。至少应有 15 个信道被标记为使用状态。一些信道在 CS 过程中被排除使用,如 [Vol 2] Part A, Section 2 中所述,这些信道应被标记为未使用状态。

  • ChM_Repetition 字段:应指示在 CS 过程中的非模式 0 步骤中,ChM 字段应循环的次数。该值应大于或等于 1。

  • Main_Mode 和 Sub_Mode 字段:应设置为指示在 CS 过程中要使用的 CS 模式。

  • Main_Mode_Min_Steps 和 Main_Mode_Max_Steps 字段:应设置为在 CS 过程中,在执行子模式步骤之前要执行的主模式步骤的范围。如果 Sub_Mode 字段已设置为 “None”,则这两个字段保留供将来使用。否则,Main_Mode_Min_Steps 应大于或等于 1 且小于或等于 N_STEPS_MAX - 1,Main_Mode_Max_Steps 应大于或等于 Main_Mode_Min_Steps 且小于或等于 N_STEPS_MAX - 1。

  • Main_Mode_Repetition 字段:应设置为在 CS 子事件的最后一个模式 0 步骤之后,从最后一个 CS 子事件的末尾开始,在下一个 CS 子事件的开头重复的主模式步骤的数量,该字段应设置为 0 到 3 之间的值。

  • Mode_0_Steps 字段:应设置为在每个 CS 子事件开头要包含的模式 0 步骤的数量。Mode_0_Steps 应大于或等于 1 且小于或等于 3。

  • CS_SYNC_PHY 字段:应设置为在模式 0、模式 1 和模式 3 步骤中用于 CS_SYNC 交换的发送和接收物理层(PHY)。对应于该 PHY 的位( [Vol 6] Part B, Table 2.23 中所指定)应设置为 1,其余位应设置为 0。

  • RTT_Type 字段:应设置为指示在 CS 过程中要使用的飞行时间(RTT)变体。

  • Role 字段:应设置为发送此 PDU 的链路层应使用的 CS 角色。

  • ChSel 字段:应设置为在 CS 过程中的非模式 0 步骤中要使用的信道选择算法。

  • Ch3cShape 字段:应设置为当使用信道选择算法 #3c 时要呈现的所选形状,仅当 ChSel 字段已设置为信道选择算法 #3c 时,此字段有效;否则,该字段保留供将来使用。
  • Ch3cJump 字段:应设置为 [Vol 6] Part H 的 Section 4.5.8.3.2 中定义的有效 CSChannelJump 值之一。仅当 ChSel 字段已设置为信道选择算法 #3c 时,此字段有效;否则,该字段保留供将来使用。
  • T_IP1、T_IP2、T_FCS、T_PM 字段:分别应设置为 T_IP1 索引、T_IP2 索引、T_FCS 索引和 T_PM 索引,这些索引分别显示了在 RTT 数据包之间、CS 音调之间、频率变化和 CS 音调的相位测量期间所使用的选定持续时间。

功能和作用:这些字段共同定义了蓝牙低功耗设备在信道状态信息配置请求中的具体参数,使设备能够根据不同的应用需求和通信环境来调整 CS 过程的行为。通过设置这些字段,设备可以选择合适的信道、模式、时间参数等,以实现优化的通信性能、可靠性和适应性。例如,通过选择特定的信道映射和模式,可以避免干扰信道并提高信号质量;通过设置适当的时间参数,可以控制通信的时序和效率。

3.45. LL_CS_CONFIG_RSP

在BLE规范中,LL_CS_CONFIG_RSP(链路层连接状态配置响应)是一个用于响应连接状态配置请求(LL_CS_CONFIG_REQ)的协议数据单元(PDU)。这个响应PDU的CtrData字段的格式如下图所示:

Config_ID字段在LL_CS_CONFIG_RSP中具有与LL_CS_CONFIG_REQ(链路层连接状态配置请求)PDU中的Config_ID字段相同的含义。Config_ID通常用于标识特定的配置请求或响应,以便在多个配置请求和响应之间进行匹配或区分。

简单来说,LL_CS_CONFIG_RSP是用来告诉请求方(通常是发起连接状态配置请求的设备)其请求的配置是否已被成功接受或拒绝。Config_ID字段在这里起到了关键作用,它确保了响应能够正确地与请求相匹配。

在实际应用中,LL_CS_CONFIG_REQLL_CS_CONFIG_RSP用于动态调整蓝牙连接的一些参数,比如连接间隔、从设备延迟、监控超时等,以优化连接的性能或满足特定的应用需求。

3.46. LL_CS_REQ

LL_CS_REQ(链路层信道探测请求)是一个在BLE连接中用于发起信道探测(Channel Sounding, CS)过程的协议数据单元(PDU)。这个过程允许设备评估无线信道的特性,以便优化数据传输。LL_CS_REQ PDU中CtrData字段的格式如下图所示:

  • Config_ID:用于选择一个已创建的信道探测过程配置参数集。这个ID确保了请求与特定的配置参数集相关联。

  • connEventCount:连接事件计数器值,用于指定信道探测过程开始时的连接事件。这个值必须在当前事件(currEvent)的一个特定范围内,以确保探测过程在合适的时机开始。

  • Offset_Min 和 Offset_Max:分别表示从连接事件的ACL(异步连接逻辑)锚点到第一个信道探测子事件开始的提议最小和最大时间(以微秒为单位)。这些值确保了信道探测过程在连接事件的合适窗口内进行。

  • Max_Procedure_Len:信道探测过程的最大持续时间(以625微秒为单位)。这个值相当于从第一个信道探测步骤的传输开始到最后一个信道探测步骤的传输结束的时间跨度。

  • Event_Interval:两个连续信道探测事件之间的时间间隔(以连接间隔为单位)。这个值决定了信道探测过程的频率。

  • Subevents_Per_Event:每个信道探测事件中包括的信道探测子事件数量。这个值决定了每个连接事件中可以进行多少次信道探测。

  • Subevent_Interval:从同一个ACL锚点开始的两个连续信道探测子事件之间的间隔(以625微秒为单位)。这个字段仅在每个事件中有多个子事件时有效。

  • Subevent_Len:每个信道探测子事件的最大持续时间(以微秒为单位)。这个值确保了每个子事件都能在给定的时间限制内完成。

  • Procedure_Interval:连续信道探测过程之间的时间间隔(以连接间隔为单位)。这个值决定了信道探测过程的重复频率。如果设置为0,则过程只运行一次。

  • Procedure_Count:要调用的连续信道探测过程的数量。如果设置为0,则过程将持续进行,直到被终止。

  • ACI(天线配置指示符):在信道探测过程中要使用的首选ACI。这个值指示了发起者和响应者应该使用哪种天线配置。

  • Preferred_Peer_Ant:一个位映射字段,指示对等设备在由ACI字段表示的天线配置中应使用的首选对等设备排序的天线元素。

  • PHY:指示远程设备的传输物理层(Tx PHY),该PDU中的Pwr_Delta字段适用于该PHY。这个字段确保了信道探测过程使用正确的物理层。

  • Pwr_Delta:远程设备用于信道探测音调和RTT数据包的发射功率级与PHY字段指示的PHY的发射功率级之间的差异(以dB为单位)。这个值允许设备调整其发射功率以适应信道条件。

  • TX_SNR_I 和 TX_SNR_R:分别指示发起者和反射器在模式1和模式3步骤中使用的所有CS_SYNC数据包传输中的信噪比(SNR)输出索引。这些字段允许设备控制其SNR输出,以优化信道探测过程的性能。

这些字段共同定义了信道探测过程的各个方面,包括何时开始、持续多久、使用哪种天线配置和物理层、以及发射功率和SNR控制等。通过这些参数,设备可以灵活地适应不同的无线信道条件,从而提高数据传输的可靠性和效率。

3.47. LL_CS_RSP

在BLE协议中,LL_CS_RSP(链路层连接更新响应)是一个用于回应连接参数更新请求的PDU(协议数据单元)。在这个上下文中,CtrData字段的格式和内容对于理解LL_CS_RSP的作用至关重要。LL_CS_RSPCtrData字段的格式如下图所示:

LL_CS_RSPCtrData字段中的各个字段与LL_CS_REQ(链路层连接更新请求)PDU的CtrData字段中的字段具有相同的含义。这意味着,如果在LL_CS_REQ中请求了特定的连接参数(如连接间隔、从机延迟、监控超时等),那么在LL_CS_RSP中,这些参数将被用于确认是否接受这些更改,或者提供新的参数值(如果请求被拒绝并建议使用不同的参数)。

字段值的选定通常涉及以下几个方面的考虑:

  • 连接间隔:两个连续连接事件之间的时间间隔。
  • 从机延迟:从机在接收到主机发送的数据包后,可以延迟响应的最长时间。
  • 监控超时:在连接丢失之前,两个连续连接事件之间的最大允许时间间隔。
  • 信道映射:用于连接事件的跳频序列。
  • CRC初始值:用于数据包的循环冗余校验(CRC)计算的初始值。

LL_CS_RSPCtrData字段通过复制LL_CS_REQ中的字段结构,并可能更新其值,来确认或拒绝连接参数的更新请求。理解这些字段的含义和它们是如何被选定的,对于实现和调试BLE设备之间的有效通信至关重要。

3.48. LL_CS_IND

在BLE中,LL_CS_IND 是一种链路层控制指示(Link Layer Control Indication)PDU(协议数据单元),用于在连接状态下向对等设备指示连接参数的变化或进行连续同步(CS)的相关配置。其CtrData字段的格式如下图所示:

  • Config_ID:配置标识符,用于标识CS配置。
  • connEventCount用于指示一个连接事件计数器值,该值满足以下条件:
    • ​​​​​​​​​​​​​​currEvent – 2^14 < connEventCount < currEvent + 2^14(模65536)其中,currEvent是包含此字段的PDU正在发送或重传的连接事件的计数器值。connEventCount的值应设置为大于首次传输LL_CS_IND时对应事件的currEvent值。这个字段用于确保接收方能够正确地关联CS配置与特定的连接事件。
  • OffsetOffset字段设置为从由connEventCount引用的连接事件的ACL锚点到第一个CS子事件开始的时间(以微秒为单位)。这个偏移量对于接收方来说很重要,因为它需要知道何时开始处理CS子事件。
  • Event_Interval:事件间隔,表示连续两个连接事件之间的时间间隔。
  • Subevents_Per_Event:每个连接事件中的子事件数量。
  • Subevent_Interval:子事件间隔,表示连续两个子事件之间的时间间隔。
  • Subevent_Len:子事件长度,表示每个子事件的持续时间。
  • ACI:接入类别标识符,用于标识CS配置的优先级。
  • PHY:物理层配置,指定使用哪种物理层(如1M、2M或S=2编码)。
  • Pwr_Delta:功率变化,表示与默认功率相比的功率调整量。

LL_CS_IND中的CtrData字段通过connEventCountOffset等字段,为接收方提供了关于如何正确理解和处理CS配置的重要信息。这有助于在BLE连接中维持和优化连续同步,从而提高数据传输的效率和可靠性。

3.49. LL_CS_TERMINATE_REQ and LL_CS_TERMINATE_RSP

在BLE通信中,LL_CS_TERMINATE_REQLL_CS_TERMINATE_RSP是链路层(Link Layer)用于终止连续同步(Continuous Synchronization,简称CS)过程的请求和响应协议数据单元(PDU)。

3.49.1. LL_CS_TERMINATE_REQ PDU

当需要终止一个已经开始的CS过程重复时,会发送LL_CS_TERMINATE_REQ PDU。其CtrData字段格式如下图所示:

  • Config_ID字段

    • 用途:用于标识要终止的CS过程重复所使用的CS过程配置参数。
    • 说明:每个CS过程配置都有一个唯一的Config_ID,该ID在CS过程开始时由发起方分配,并在整个CS过程重复期间保持不变。
  • ProcCount字段

    • 设置值:应设置为发送此PDU时CS过程计数器(CSProcCount)的值。
    • 说明:CSProcCount是一个内部计数器,用于跟踪CS过程的重复次数。当发送LL_CS_TERMINATE_REQ时,该计数器的当前值被复制到ProcCount字段中,以便接收方可以确认要终止的是哪一个CS过程重复。
  • ErrorCode字段

    • 设置值:应设置为一个错误代码,以告知对等方为什么要终止CS过程重复。
    • 说明:错误代码列表和描述可以在蓝牙核心规范的第一卷([Vol 1])的F部分中找到。这些错误代码包括各种可能的终止原因,如资源不足、参数错误等。

3.49.2. LL_CS_TERMINATE_RSP PDU

当接收到LL_CS_TERMINATE_REQ PDU时,接收方会发送LL_CS_TERMINATE_RSP PDU作为响应。其CtrData字段格式同LL_CS_TERMINATE_REQ 。

  • Config_IDProcCount字段:这些字段的值应与接收到的LL_CS_TERMINATE_REQ PDU中的相应字段值相匹配,以确认响应是针对正确的CS过程重复。

  • ErrorCode字段

    • 如果接收方成功终止了CS过程重复,则ErrorCode应设置为0(表示成功)。
    • 如果接收方无法终止CS过程重复(例如,由于内部错误或资源不足),则应设置一个非零的错误代码来指示失败原因。

LL_CS_TERMINATE_REQLL_CS_TERMINATE_RSP PDU通过CtrData字段中的Config_IDProcCountErrorCode字段,为BLE设备提供了一种机制来终止不再需要的CS过程重复。这有助于优化资源使用,并确保BLE连接的稳定性和可靠性。

3.50. LL_CS_FAE_REQ

在BLE协议中,LL_CS_FAE_REQ PDU(协议数据单元)是用于发起连续同步(Continuous Synchronization,简称CS)的快速适应过程(Fast Adaptation for CS,简称FAE)的请求。这种请求旨在优化BLE连接中的数据传输效率和可靠性,特别是在需要快速调整CS参数以适应环境变化时。LL_CS_FAE_REQ PDU特点:

  • CtrData字段LL_CS_FAE_REQ PDU不包含CtrData字段,意味着它不需要额外的控制数据来指定CS配置或参数。相反,它可能依赖于之前已经协商或建立的CS配置,或者通过其他机制(如BLE连接参数请求)来动态调整CS参数。
  • 快速适应:FAE过程的目的是实现CS参数的快速适应,以应对环境变化或数据传输需求的变化。通过发送LL_CS_FAE_REQ PDU,BLE设备可以请求对等方开始FAE过程,以优化CS参数,从而提高数据传输的效率和可靠性。
  • 协商机制:虽然LL_CS_FAE_REQ PDU本身不包含具体的CS参数,但它可能触发一系列协商机制,以确定新的CS参数。这些协商可能涉及对等方之间的通信,以及根据当前的网络条件和设备能力来动态调整参数。
  • 应用场景:​​​​​​​LL_CS_FAE_REQ PDU在需要快速调整CS参数以适应环境变化或数据传输需求变化的BLE应用中非常有用。例如,在音频流传输、实时数据监控或需要低延迟和高可靠性的其他应用中,FAE过程可以帮助优化CS参数,从而提高整体性能。

LL_CS_FAE_REQ PDU是BLE协议中用于发起CS快速适应过程的请求。它不包含CtrData字段,而是依赖于之前已经协商或建立的CS配置,或者通过其他机制来动态调整CS参数。通过FAE过程,BLE设备可以优化CS参数,以应对环境变化或数据传输需求的变化,从而提高数据传输的效率和可靠性。

3.51. LL_CS_FAE_RSP

在BLE协议中,LL_CS_FAE_RSP PDU(协议数据单元)是对LL_CS_FAE_REQ PDU的响应,用于在连续同步(Continuous Synchronization,简称CS)过程中提供快速适应(Fast Adaptation for CS,简称FAE)的反馈。LL_CS_FAE_RSP PDU的CtrData字段格式如下图所示:

  • 含义ChFAE字段包含了本地控制器(Controller)的每个通道的mode-0 FAE表。这个表用于指定在CS过程中,每个允许使用的通道的频率适应(Frequency Adaptation)值。
  • 表示方法:每个通道的mode-0 FAE值由一个8位有符号整数表示,这些值根据CS通道索引表(在蓝牙规范[Vol 6] Part H, Section 1中定义)进行定位。只有允许的通道才会在表中表示,未允许的通道索引则不会出现在表中,而是通过将允许的通道向下移动来填补这些空缺。
  • 范围与分辨率:每个FAE值的范围是[-4, +3.96875] ppm(parts per million,百万分之几),分辨率为0.03125 ppm。意味着FAE值可以非常精确地调整频率,以适应环境变化或优化数据传输。
  • 编码方式:FAE值乘以32后,四舍五入到最接近的整数值,并在有符号整数范围[-128, 127]内表示。因此,一个值-128代表-4 ppm,而值127代表3.96875 ppm。值0则代表一个范围-0.015625 ppm到0.015625 ppm。
  • FAE的定义与用途:
    • 定义:FAE是BLE协议中定义的一种机制,用于在CS过程中快速调整频率,以适应环境变化或优化数据传输。它在蓝牙规范[Vol 6] Part A, Section 3.5.1中进行了详细描述。
    • 用途:通过调整频率,FAE可以帮助BLE设备在保持连接稳定性的同时,优化数据传输的效率和可靠性。这对于需要低延迟和高可靠性的应用尤为重要,如音频流传输、实时数据监控等。

LL_CS_FAE_RSP PDU中的CtrData字段包含了用于CS过程的FAE信息,特别是ChFAE字段,它提供了每个允许使用的通道的mode-0 FAE表。这些FAE值用于精确调整频率,以适应环境变化或优化数据传输。通过FAE机制,BLE设备可以在保持连接稳定性的同时,提高数据传输的效率和可靠性。

3.52. LL_CS_CHANNEL_MAP_IND

LL_CS_CHANNEL_MAP_IND是一个控制PDU,用于在BLE连接建立后,向对端设备指示信道图(Channel Map)的更新。通过更新信道图,设备可以优化通信性能,减少干扰,并确保数据在正确的信道上传输。LL_CS_CHANNEL_MAP_IND中的CtrData字段格式如下图所示:

  • ChM字段:

    • 功能ChM字段表示信道图(Channel Map),它指示了在CS过程中哪些信道应被使用,哪些信道不应被使用。
    • 格式ChM字段的格式与LL_CS_CONFIG_REQ PDU(见蓝牙规范第2.4.2.45节)中的ChM字段相同。每个信道都由一个位来表示,该位的位置根据CS信道索引在蓝牙规范[Vol 6] Part H, Section 1中确定。
    • 应用:在BLE通信中,信道图用于确保设备在正确的信道上发送和接收数据,从而优化通信性能和减少干扰。
  • Instant字段:

    • 功能Instant字段用于设置一个连接事件计数器值,该值满足特定要求,以确保LL_CS_CHANNEL_MAP_IND PDU在适当的时机被传输或重传。
    • 要求Instant字段的值应设置为满足以下条件的连接事件计数器值:currEvent - 2^14 < Instant < currEvent + 2^14(模65536),其中currEvent是包含此字段的PDU正在传输或重传的连接事件的计数器值。
    • 设置建议Instant字段的值应设置为大于首次传输LL_CS_CHANNEL_MAP_IND时的currEvent值,以确保PDU在正确的连接事件中被处理。

LL_CS_CHANNEL_MAP_IND PDU中的CtrData字段包含ChMInstant等关键字段,它们共同用于在BLE的持续同步过程中传递信道使用和连接事件计数器信息。ChM字段指示哪些信道应被使用,而Instant字段则确保PDU在适当的时机被传输或重传。这些字段的准确设置对于确保BLE通信的可靠性和性能至关重要。

3.53. LL_FRAME_SPACE_REQ

LL_FRAME_SPACE_REQ是蓝牙v6.0中引入的一个新特性,用于链路层(Link Layer)更新帧间隔(Frame Space)。帧间隔是指两个连续帧之间的时间间隔,它在蓝牙通信中起着重要的作用,可以影响通信的效率和可靠性。LL_FRAME_SPACE_REQ的CtrData字段包含多个关键字段,用于指定请求的帧间隔参数。

  • FS_Min:请求的最小帧间隔。

    • 单位:微秒(μs)。
    • 设置要求:应设置为控制器请求的最小帧间隔值。
  • FS_Max:请求的最大帧间隔。

    • 单位:微秒(μs)。
    • 设置要求:应设置为控制器请求的最大帧间隔值,且该值应大于等于FS_Min,同时不应大于10毫秒(ms)。
  • PHYs:请求更新帧间隔对应的物理层方案。

    • 设置要求:应设置为指示请求正在针对哪些物理层(PHY)进行。对于每个正在请求的PHY(如表2.23中指定),其对应的位应设置为1,其余位应设置为0。至少应有一个位被设置为1。
  • Spacing_Types:请求更新的帧间隔类型。

    • 设置要求:应设置为指示正在请求哪种帧间隔(如第4.1节中定义)。对于每个正在请求的帧间隔类型(如下表2.40中指定),其对应的位应设置为1,其余位应设置为0。至少应有一个位被设置为1。

LL_FRAME_SPACE_REQ通常用于以下场景:

  • 在蓝牙通信中,根据通信需求和链路质量,动态调整帧间隔以提高通信效率或可靠性。
  • 在多设备连接或复杂通信环境中,通过调整帧间隔来减少干扰和冲突。

使用LL_FRAME_SPACE_REQ时,应确保满足以下要求:

  • 正确设置FS_Min和FS_Max字段的值,以确保请求的帧间隔在合理的范围内。
  • 正确设置PHYs字段,以指示请求正在针对哪些物理层进行。
  • 正确设置Spacing_Types字段,以指示正在请求哪种帧间隔类型。

LL_FRAME_SPACE_REQ是蓝牙v6.0中引入的一个重要特性,用于在链路层请求更新帧间隔。通过正确设置其CtrData字段的格式和值,可以实现动态调整帧间隔,从而优化蓝牙通信的性能和可靠性。

3.54. LL_FRAME_SPACE_RSP

LL_FRAME_SPACE_RSP是BLE协议栈中用于调整帧间隔的响应PDU。帧间隔是指两个连续数据包之间的时间间隔,它对于确保数据包的正确接收和处理至关重要。通过调整帧间隔,可以优化通信性能,减少数据包冲突和丢失的可能性。

FS字段:表示控制器选择的帧间隔值。

  • 单位:微秒(μs)。
  • 设置要求:当控制器收到LL_FRAME_SPACE_REQ请求后,它会根据请求中的FS_Min和FS_Max字段以及当前的通信环境和需求,选择一个合适的帧间隔值,并将其设置在响应PDU的FS字段中。

PHYS字段:指示响应正在针对哪些物理层(PHY)发送。

  • 设置要求
    • 对于每个正在响应的PHY,其对应的位应设置为1。
    • 如果某个PHY的所有帧间隔值都将保持不变,则对应的位应设置为0。
    • 剩余位也应设置为0,以表示它们不对应于正在响应的PHY。

Spacing_Types字段:指示响应将设置的帧间隔类型。

  • 设置要求
    • 对于每个正在响应的帧间隔类型,其对应的位应设置为1。
    • 如果某个帧间隔类型的所有帧间隔值都将保持不变,则对应的位应设置为0。
    • 剩余位也应设置为0,以表示它们不对应于正在响应的帧间隔类型。

这些字段通常用于以下场景:

  • 控制器在收到LL_FRAME_SPACE_REQ请求后,根据请求中的参数和当前通信条件,选择合适的帧间隔值,并通过响应PDU将这些值告知请求方。
  • 请求方可以根据响应PDU中的FS、PHYS和Spacing_Types字段,了解控制器选择的帧间隔值以及这些值适用的物理层和帧间隔类型。

在使用这些字段时,应确保满足以下要求:

  • 正确设置FS字段的值,以表示控制器选择的帧间隔。
  • 正确设置PHYS字段,以指示响应正在针对哪些物理层发送。
  • 正确设置Spacing_Types字段,以指示响应将设置的帧间隔类型。

通过这些字段的设置和使用,可以实现蓝牙通信中帧间隔的动态调整,从而优化通信性能和可靠性。

四、总结

蓝牙链路层数据物理通道PDU是蓝牙通信中的关键数据包,包含Header、Payload、MIC等关键部分,确保数据正确传输。PDU类型多样,包括广播、数据和同步物理信道PDU,满足不同通信需求。在传输过程中,PDU经过封装、传输和解封装,确保数据完整性和正确性。PDU在蓝牙技术中发挥着重要作用,广泛应用于音频设备、可穿戴设备、智能家居及车载蓝牙等领域。

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

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

相关文章

动态规划子数组系列(二) 环形子数组的最大和

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public int maxSubarraySumCircular(int[] nums) {int sum 0;int n nums.length;int[] f new int[n1];int[] g new int[n1];int ret 0, fmax -0x3f3f3f3f, gmin Integer.MAX_VALUE;for(int i 1; i < n; i)…

网络工程师教程第6版(2024年最新版)

网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。 相关信息: 出版社: 清华大学出版社 ISBN:9787302669197 内容简介: 本书是工业和信息化部教育与考试中心组织编写的考试用书。本书 根据…

数据结构C语言描述3(图文结合)--双链表、循环链表、约瑟夫环问题

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…

7.高可用集群架构Keepalived双主热备原理

一. 高可用集群架构Keepalived双主热备原理 (1)主机+备机keepalived配置(192.168.1.171) ! Configuration File for keepalivedglobal_defs {# 路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_101 } #计算机节点(主机配置) vrrp_instance VI_1 {</

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

TypeScript简介:TypeScript是JavaScript的一个超集

官方描述&#xff1a;TypeScript 是 JavaScript 的一个超集 GitHub官网&#xff1a;https://github.com/Microsoft/TypeScript TypeScript is a superset of JavaScript that compiles to clean JavaScript output. TypeScript 是 JavaScript 的一个超集&#xff0c;支持 EC…

【计算机网络】UDP网络程序

一、服务端 1.udpServer.hpp 此文件负责实现一个udp服务器 #pragma once#include <iostream> #include <string> #include <cstdlib> #include <cstring> #include <functional> #include <strings.h> #include <unistd.h> #incl…

【启明智显分享】5G CPE与5G路由器到底有什么区别?

5G路由器和5G CPE在功能和应用场景上存在很明显的差异&#xff0c;小编做了详细比较&#xff0c;希望能帮助到你进一步了解他们的区别及应用。 一、定义与功能 5G路由器 5G路由器是一个将5G网络连接转换为Wi-Fi信号的设备&#xff0c;使多个Wi-Fi设备可以通过5G网络进行连接…

对称加密与非对称加密:密码学的基石及 RSA 算法详解

对称加密与非对称加密&#xff1a;密码学的基石及 RSA 算法详解 在当今数字化的时代&#xff0c;信息安全至关重要。对称加密和非对称加密作为密码学中的两种基本加密技术&#xff0c;为我们的数据安全提供了强大的保障。本文将深入探讨对称加密和非对称加密的特点、应用场景&…

爬虫——数据解析与提取

第二节&#xff1a;数据解析与提取 在网络爬虫开发中&#xff0c;获取网页内容&#xff08;HTML&#xff09;是第一步&#xff0c;但从这些内容中提取有用的数据&#xff0c;才是爬虫的核心部分。HTML文档通常结构复杂且充满冗余信息&#xff0c;因此我们需要使用高效的解析工…

我们是如何实现 TiDB Cloud Serverless 的 - 成本篇

作者&#xff1a; shiyuhang0 原文来源&#xff1a; https://tidb.net/blog/fbedeea4 背景 Serverless 数据库是云原生时代的产物&#xff0c;它提供全托管&#xff0c;按需付费&#xff0c;自动弹性的云数据库服务&#xff0c;让客户免于繁重的数据库运维工作。关于 Serve…

Linux——环境基础开发工具使用2(正在更新中...)

1.自动化构建-make/Makefile 1.1 认识make和Makefile make是一个命令&#xff1b; Makefile是一个文件。 1.2 理解 其中在第一个图片中&#xff0c;第一行的 mytest:test.c 叫做依赖关系&#xff1b;第二行的 gcc test.c -o mytest 叫做依赖方法。 依赖关系和依赖方法共同…

微服务链路追踪skywalking安装

‌SkyWalking是一个开源的分布式追踪系统&#xff0c;主要用于监控和分析微服务架构下的应用性能。‌ 它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案&#xff0c;特别适用于微服务、云原生架构和基于容器的环境&#xff08;如Docker、K8s、Mesos&…

品牌如何利用大数据工具,进行消费者洞察分析?

存量竞争的时代&#xff0c; 消费者聆听是品牌持续增长的关键&#xff0c;借助大数据的消费者数据洞察&#xff0c;可以帮助品牌分析消费者的所思所想及行为特征&#xff0c;获取消费者对产品的需求痛点、使用感受&#xff0c;对品牌的评价口碑等&#xff0c;从而帮助品牌更好地…

模拟实现优先级队列

目录 定义 特点 构造函数 常用方法 关于扩容的问题 关于建堆的问题 向上调整和向下调整的比较 &#xff08;向上调整&#xff09;代码 &#xff08;向下调整&#xff09;代码 关于入队列和出队列问题 模拟实现优先级队列代码 关于堆排序的问题 堆排序代码 关于对…

【4】GD32H7xx ADC采样

目录 1. GD32H7xx ADC1.1 ADC外设资源1.2 采样时间1.3 片上硬件过采样 2. ADC DMA规则多通道采样程序3. 程序测试 1. GD32H7xx ADC 1.1 ADC外设资源 GD32H7xx 有3个ADC外设&#xff1a; ADC0 20个外部通道&#xff0c;1个内部通道&#xff08;DAC0_OUT0通道&#xff09;32位…

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知&#xff0c;GitLab 的升级必须要严格遵循升级路径&#xff0c;否则就会出现问题&#xff0c;导致升级失败。因此&#xff0c;在 GitLab 升级之前需要做好两件事情&#xff1a; 当前版本的确认升级路径的确认 极狐GitLa…

【咕泡P5人工智能CV 技术NLP项目实战】

人工智能核心代码&#xff1a; 一、什么是人工智能技术&#xff1a; 人工智能&#xff08;Aritificial Intelligence&#xff09;&#xff0c;英文缩写AI&#xff0c;人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智…

R门 - rust第一课陈天 -内存知识学习笔记

内存 #mermaid-svg-1NFTUW33mcI2cBGB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1NFTUW33mcI2cBGB .error-icon{fill:#552222;}#mermaid-svg-1NFTUW33mcI2cBGB .error-text{fill:#552222;stroke:#552222;}#merm…

C# x Unity 从玩家控制类去分析命令模式该如何使用

本文部分内容出自游戏编程模式一书,游戏编程模式,有兴趣的小伙伴可以去看看,虽然不是unity x c#写的 但是思路挺好的 目录 目录 0.先说结论 发现问题 命令模式如何解耦 打个断点更利于分析 怎么实现延迟命令? 如何撤销命令? 脚本整体一览 不足分析(AI) 0.先说结论 …