【链路层】空口数据包详解(4):数据物理通道协议数据单元(PDU)
目录
一、概述
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_IND或LL_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
字段中的 Rand
、EDIV
、SKD_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_RSP
的CtrData
字段中,发送方可以告知接收方(或上层协议)它遇到了一个它无法识别的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
)和偏移量(Offset0
至Offset5
)。
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 字段,为后续计算连接参数更新相关的偏移量提供了一个基准参考值,使得连接参数的更新能够基于一个明确的参照点进行准确计算和调整。
- Offset0至Offset5:这些字段指示更新后的连接参数下,LE连接锚点的可能位置相对于
ReferenceConnEventCount
的值。它们以1.25 ms为单位,并按偏好程度递减排序;即Offset0
是最优选项,其次是Offset1
,依此类推。Offset0
至Offset5
应小于Interval_Max
。值为0xFFFF表示无效。有效的Offset0
至Offset5
字段应包含唯一值,且有效字段始终位于无效字段之前。通过设置这些字段,可以精确地确定在连接参数更新后,连接锚点相对于基准参考值的可能位置,从而实现对连接状态和性能的精细化调整,比如根据不同的应用需求和通信环境,选择最合适的连接锚点位置来优化连接的稳定性和效率。
3.16.2. 应用场景与注意事项
- 应用场景:当中心设备希望优化与周边设备的连接参数(例如,为了降低功耗或提高数据传输速率)时,它会发送
LL_CONNECTION_PARAM_REQ
报文。 - 注意事项:
- 周边设备在收到请求后,可以决定是否接受这些新的连接参数。如果接受,它将通过发送
LL_CONNECTION_UPDATE_IND
报文来确认,并包含实际采用的连接参数。 - 在设计BLE设备时,应考虑连接参数的合理范围,以确保设备的性能和兼容性。
- 偏移量字段(
Offset0
至Offset5
)提供了灵活性,允许设备在更新连接参数时协调其时间调度。 - 设备应确保遵循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。
- ReferenceConnEventCount、Offset0 至 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_REQ
和LL_PING_RSP
在BLE协议中,LL_PING_REQ
和LL_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_REQ
和LL_PING_RSP
PDU在BLE协议中扮演着重要角色,因为它们提供了一种简单而有效的方法来检测连接的有效性。这对于维护稳定的BLE连接至关重要,特别是在存在潜在干扰或设备故障的情况下。
3.19.4. 应用场景
这两个PDU可能应用于以下场景:
- 连接监控:设备可以定期发送
LL_PING_REQ
PDU以监控连接状态,并在必要时采取纠正措施(如重新连接)。 - 故障检测:如果设备在发送
LL_PING_REQ
PDU后未能在预期时间内收到LL_PING_RSP
PDU,则可能表明连接已中断或存在其他问题。此时,设备可以采取适当的故障恢复措施。
LL_PING_REQ
和LL_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_P
和PHY_P_TO_C
字段应分别设置为0。这样可以让中心设备清楚知道从外围设备发往自身的数据包将使用何种物理层,从而做好接收准备或根据需要调整自身的物理层配置。
3.22.3. Instant字段
Instant
字段用于指示在蓝牙规范5.1.10节中描述的某个特定时刻。- 如果
PHY_C_TO_P
和PHY_P_TO_C
字段都为0,则表示没有特定的时刻,此时Instant
字段保留供未来使用。
LL_PHY_UPDATE_IND
PDU的CtrData
字段通过PHY_C_TO_P
和PHY_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的长度和类型通过MinCTELenReq
和CTETypeReq
字段指定,这对于实现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_P和PHY_P_To_C:分别指示从中央到外围和从外围到中央通信时使用的物理层(PHY)。这些字段根据前面的表2.23设置,且每个字段只能设置一个比特位。
-
Max_SDU_C_To_P和Max_SDU_P_To_C:分别设置从中央主机到外围主机和从外围主机到中央主机的最大服务数据单元(SDU)大小(以字节为单位)。
-
Framed:设置为0表示使用未分帧的数据PDU,设置为1表示使用分帧的数据PDU。
-
Framing_Mode:对于分帧的数据PDU,设置为0表示使用可分段模式,设置为1表示使用未分段模式。对于未分帧的数据PDU,此字段保留未使用(RFU)。
-
SDU_Interval_C_To_P和SDU_Interval_P_To_C:分别设置从中央主机到外围主机和从外围主机到中央主机的连续SDU之间的时间间隔(以微秒为单位)。值应在255到1048575之间。
-
Max_PDU_C_To_P和Max_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_P和BN_P_To_C:分别设置从中央到外围和从外围到中央的BN(Block Number)参数值。值应在0到15之间。
-
FT_C_To_P和FT_P_To_C:分别设置从中央到外围和从外围到中央的FT(Flush Timeout)参数值。值应在1到255之间。
-
ISO_Interval:设置两个连续CIS锚点之间的时间,单位为1.25ms。值应在4到3200之间(即5ms到4s)。
-
CIS_Offset_Min和CIS_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_RSP
的CtrData
字段的格式中,每个字段的意义与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 参数请求接收方增加发射功率,以提高通信质量。
- 设置要求:Delta 参数表示针对指定 PHY,接收方的发射功率水平所需的变化量,以 dB 为单位。它是一个有符号整数,具体含义如下:
- 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中,子速率事件是用于数据传输的时间单位,其长度取决于connSubrateFactor
和connInterval
(连接间隔)的值。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_REQ
和LL_FEATURE_EXT_RSP
数据包允许设备交互其支持的扩展特性,从而确保双方能够充分利用最新的BLE功能。 - 兼容性:通过特性集的交互,设备可以了解其通信伙伴支持哪些特性,从而避免使用不兼容的特性,确保通信的顺利进行。
LL_FEATURE_EXT_REQ
和LL_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_REQ
和LL_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_RSP
的CtrData
字段的格式如下图所示:
LL_CS_RSP
的CtrData
字段中的各个字段与LL_CS_REQ
(链路层连接更新请求)PDU的CtrData
字段中的字段具有相同的含义。这意味着,如果在LL_CS_REQ
中请求了特定的连接参数(如连接间隔、从机延迟、监控超时等),那么在LL_CS_RSP
中,这些参数将被用于确认是否接受这些更改,或者提供新的参数值(如果请求被拒绝并建议使用不同的参数)。
字段值的选定通常涉及以下几个方面的考虑:
- 连接间隔:两个连续连接事件之间的时间间隔。
- 从机延迟:从机在接收到主机发送的数据包后,可以延迟响应的最长时间。
- 监控超时:在连接丢失之前,两个连续连接事件之间的最大允许时间间隔。
- 信道映射:用于连接事件的跳频序列。
- CRC初始值:用于数据包的循环冗余校验(CRC)计算的初始值。
LL_CS_RSP
的CtrData
字段通过复制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配置与特定的连接事件。
-
- Offset:
Offset
字段设置为从由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
字段通过connEventCount
和Offset
等字段,为接收方提供了关于如何正确理解和处理CS配置的重要信息。这有助于在BLE连接中维持和优化连续同步,从而提高数据传输的效率和可靠性。
3.49. LL_CS_TERMINATE_REQ and LL_CS_TERMINATE_RSP
在BLE通信中,LL_CS_TERMINATE_REQ
和LL_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过程重复。
- 设置值:应设置为发送此PDU时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_ID
、ProcCount
字段:这些字段的值应与接收到的LL_CS_TERMINATE_REQ
PDU中的相应字段值相匹配,以确认响应是针对正确的CS过程重复。 -
ErrorCode
字段:- 如果接收方成功终止了CS过程重复,则
ErrorCode
应设置为0(表示成功)。 - 如果接收方无法终止CS过程重复(例如,由于内部错误或资源不足),则应设置一个非零的错误代码来指示失败原因。
- 如果接收方成功终止了CS过程重复,则
LL_CS_TERMINATE_REQ
和LL_CS_TERMINATE_RSP
PDU通过CtrData
字段中的Config_ID
、ProcCount
和ErrorCode
字段,为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
字段包含ChM
和Instant
等关键字段,它们共同用于在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在蓝牙技术中发挥着重要作用,广泛应用于音频设备、可穿戴设备、智能家居及车载蓝牙等领域。
相关文章:

【链路层】空口数据包详解(4):数据物理通道协议数据单元(PDU)
目录 一、概述 1.1. 头部(Header)结构 1.2. MIC字段的情况说明 1.3. 有效载荷(Payload)格式与LLID字段的关联 二、LL Data PDU 2.1. 定义与用途 2.2. 头部字段设置 2.3. 空PDU(Empty PDU ) 2.4. 数…...

数学分组求偶数和
问题描述 小M面对一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。 numbers: 一个由多个整数字符串组…...

机器学习基础02_特征工程
目录 一、概念 二、API 三、DictVectorize字典列表特征提取 四、CountVectorize文本特征提取 五、TF-IDF文本1特征词的重要程度特征提取 六、无量纲化预处理 1、MinMaxScaler 归一化 2、StandardScaler 标准化 七、特征降维 1、特征选择 VarianceThreshold 底方差…...
CSS Modules中的 :global
最近写需求遇到如下代码,我们来分析一番: .medicine-bot {:global(.cosd-site-vcard-card) {margin-top: -3px;}:global(.cosd-site-vcard-title-text) {font-size: var(--cos-text-headline-sm);}:global(.cosd-site-vcard-button) {background-color: …...

linux病毒编写+vim shell编程
学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 请一定遵循《网络空间安全法》!!! Linux目录介绍 /bin 二进制可执行文件(kali里面是工具一些文件)/etc 系统的管理和配置文…...

WinDefender Weaker
PPL Windows Vista / Server 2008引入 了受保护进程的概念,其目的不是保护您的数据或凭据。其最初目标是保护媒体内容并符合DRM (数字版权管理)要求。Microsoft开发了此机制,以便您的媒体播放器可以读取例如蓝光,同时…...
智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序5 架构for认知系统 总述 (架构全图)
本文提要 本文讨论的“智能工厂的设计软件” for认知系统的架构全图 ,这有别于前面所说的“智能工厂的设计软件”的“全景图”。两者在内容和侧重点上有所不同,但它们共同构成了对智能工厂设计软件的全面描述。 全景图是对智能工厂设计软件的整体概览&…...
vmware集群 vSAN HCL 数据库
HCL数据库升级 https://partnerweb.vmware.com/service/vsan/all.json VSAN版本目录升级 https://vcsa.vmware.com/ph/api/v1/results?deploymentId2d02e861-7e93-4954-9a73-b08692a330d1&collectorIdVsanCloudHealth.6_5&objectId0c3e9009-ba5d-4e5f6-bae8-f25ec5…...
人工智能引发直播革命:AI 技术塑造无人直播全新体验
在数字化浪潮席卷全球的今天,人工智能(AI)技术以其无与伦比的速度和广度,正深刻地改变着各行各业的面貌。其中,直播行业作为新媒体时代的宠儿,也迎来了由AI技术引领的颠覆性变革。这场由人工智能引发的直播…...
数据研发基础 | 什么是流批一体
流批一体的概念是可能出现在大厂的面试题中的,虽然就算大厂实习也没机会实操这样的高级操作,学一点概念,面试多少是能说上一两句的。大致就是希望一套代码能同时在批处理和流处理中运行(同时做离线计算和实时计算)。下…...

《Python网络安全项目实战》项目6 编写密码工具程序
《Python网络安全项目实战》项目6 编写密码工具程序 项目6 编写密码工具程序任务6.1 猜数字游戏任务描述任务分析任务实施6.1.1 编写基本的猜数字程序6.1.3 测试并修改程序6.1.4 给程序增加注释 任务拓展任务实施6.2.1 生成随机密码6.2.4 菜单功能 相关知识1. 密码字典2. 密码字…...
现代C++HTTP框架cinatra
文章目录 cinatra简介主要特点 快速上手编译器版本要求使用指南快速示例 项目地址 cinatra简介 cinatra是一个基于C20协程的高性能HTTP框架,它的目标是提供一个快速开发的C HTTP框架解决方案 它不仅支持HTTP/1.1和1.0,还支持SSL和WebSocket,…...

【功耗现象】com.gorgeous.lite后台Camera 使用2小时平均电流200mA耗电量400mAh现象
现象 轻颜相机(com.gorgeous.lite)后台Camera 使用2小时平均电流200mA(BugReport提供的电流参考数据),耗电量400mAh 即耗电占比(200mA*2h)/(12.83h*52.68mA )400mAh/623mAh62% CameraOct 10 202321:03:08 - 23:03:372h16m15s859ms to 4h16m44s984msactive duration: 2h 0m 29…...

06.VSCODE:备战大项目,CMake专项配置
娇小灵活的简捷配置不过是年轻人谈情说爱的玩具,帝国大厦的构建,终归要交给CMake去母仪天下。一个没有使用 CMake 的 C 项目,就像未来世界里的一台相声表演,有了德纲却无谦,观众笑着遗憾。—— 语出《双城记》作者&…...

还是小时候味道的麻辣片
麻辣片的诞生,源于人们对辣味的热爱和对丰富口感的追求。它将辣椒的火辣、香料的浓郁和豆制品的醇厚完美结合在一起,创造出了一种令人回味无穷的美食体验。无论是在学校的小卖部、街头的小吃摊,还是超市的货架上,麻辣片都以其鲜艳…...
GaussDB部署架构
GaussDB部署架构 云数据库GaussDB管理平台(TPOPS)基于B/S架构开发,由Web、管控Service、管控Agent三部分组成,软件结构如图1所示。 图1 各节点部署架构 Web:作为用户接入子系统,用于将用户在Web下发的操作…...

遥测数据采集工具Grafana Alloy
介绍 Alloy是Grafana产品公司旗下的一款新主推遥测数据采集工具,Grafana Alloy也是一个开源OpenTelemetry收集器,具有内置 Prometheus管道并支持指标、日志、跟踪和配置文件。Alloy支持为OTEL、Prometheus、Pyroscope、Loki等服务提供许多指标、日志、跟…...

线性数据结构
数组 数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。 数组…...

【ArcGIS微课1000例】0127:计算城市之间的距离
本文讲述,在ArcGIS中,计算城市(以地级城市为例)之间的距离,效果如下图所示: 一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析…...
【算法】二分
1. 找到有序区间中 x 最左边的数字的位置 static int getL(int a[], int l, int r, int x) {while (l < r) {int mid l r >> 1;if (x < a[mid]) {r mid;} else {l mid 1;}}if (a[l] ! x) return -1;return l;} 2. 找到有序区间中 x 最右边的数字的位置 stati…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...