BLE core 内容整理解释

本文内容比较杂散,只是做记录使用,后续会整理的有条理些

在这里插入图片描述

link layer

基本介绍

**Link Layer Control(链路层控制)**是蓝牙低功耗(BLE)协议栈的核心部分,负责实现设备间可靠、安全、低功耗的数据传输和控制。它是蓝牙协议栈的基础,在 BLE 的操作中承担了许多关键功能。

以下是 BLE Link Layer Control 的整体内容详细解析:


1. 概述

链路层(Link Layer, LL)位于 BLE 协议栈的控制部分,与物理层(PHY)直接交互,是数据链路的核心组件。其主要职责包括:

  • 连接建立和管理
  • 数据传输
  • 安全控制
  • 状态管理

2. 链路层状态

链路层支持以下几种状态,每种状态对应不同的操作模式:

  • Standby(待机状态):设备处于非活动状态,不执行任何操作。
  • Advertising(广播状态):设备以广播包形式发送数据,允许其他设备扫描或连接。
  • Scanning(扫描状态):设备接收广播包,用于发现其他设备。
  • Initiating(发起状态):设备尝试与广播设备建立连接。
  • Connected(连接状态):设备成功建立连接,进入数据传输模式。

3. 核心功能

链路层控制的核心功能分为以下几个模块:

(1) 设备发现
  • 广播(Advertising):
    • 广播设备发送广播包,表明其可用性。
    • 支持多种广播类型(如可连接、不可连接、定向广播等)。
  • 扫描(Scanning):
    • 扫描设备接收广播包,提取设备信息(如地址、名称等)。
(2) 连接管理
  • 连接建立
    • 发起设备通过 CONNECT_REQ 数据包与广播设备建立连接。
  • 连接维护
    • 定期通过 连接事件(Connection Events) 交换数据包。
    • 支持主设备和从设备间的双向通信。
  • 连接参数更新
    • 包括连接间隔、超时时间、主从时延等参数的调整。
    • 通过 Connection Update Procedure 完成。
(3) 信道管理
  • BLE 使用 40 个信道:
    • 3 个广播信道(37、38、39)。
    • 37 个数据信道(0-36)。
  • 信道选择算法
    • BLE 通过信道跳频避免干扰,提高通信可靠性。
  • 信道映射更新
    • 使用 Channel Map Update Procedure 动态调整信道。
(4) 数据传输
  • 数据包结构
    • 包括 Preamble(前导符)、Access Address(访问地址)、Header(头部)、Payload(负载)等。
    • 数据包通过 AES-CCM 加密保障安全性。
  • 分片与重组
    • 长数据分片后通过多个 PDU(Protocol Data Unit)传输。
(5) 安全管理
  • 加密过程
    • 使用 LTK(Long Term Key)进行会话加密。
    • 加密过程包括密钥分发、验证等。
  • 身份验证
    • 通过配对(Pairing)或绑定(Bonding)确保设备间的可信连接。
(6) 低功耗特性
  • 支持

    低功耗模式:

    • 通过调整连接间隔、监听窗口等参数降低功耗。
  • 主从切换:

    • 主设备可以动态调整连接频率以节省资源。

4. 链路层控制过程

链路层定义了多种控制过程(Control Procedures)以管理连接和数据传输:

控制过程描述
Connection Update调整连接参数(间隔、超时等)。
Channel Map Update更新信道映射以避免干扰。
Encryption Procedure启用或关闭加密以保障数据安全。
Feature Exchange主从设备交换支持的功能特性。
Version Exchange主从设备交换蓝牙版本信息。
PHY Update更新物理层速率(如 1 Mbps 到 2 Mbps 切换)。
Terminate Procedure主动终止连接,释放资源。

5. 链路层 PDU(Protocol Data Unit)

链路层数据单元(PDU)是链路层通信的基本单位,分为以下两种类型:

  • 控制 PDU:用于执行链路层控制过程。
  • 数据 PDU:用于传输应用层数据。

每个 PDU 包括以下字段:

  • Header:标识 PDU 类型和长度。
  • Payload:实际的数据或控制信息。
  • MIC(可选):消息完整性检查,用于验证数据的完整性。

6. 链路层与其他层的交互

  • 与物理层(PHY):
    • 直接管理射频信道的切换和数据包发送接收。
  • 与主机层(Host Layer):
    • 提供基础数据传输服务(如 ACL 数据通道)。
    • 通过 HCI(Host Controller Interface)与主机层通信。

7. 链路层的特点

  • 高效:支持数据分片、信道跳频和错误恢复。
  • 安全:内置加密和验证机制,保障通信安全。
  • 灵活:多种状态和过程支持复杂的 BLE 应用场景。
  • 低功耗:通过优化连接参数和数据传输,延长电池寿命。

链路层是 BLE 协议栈的核心模块,其功能覆盖了连接、数据传输、安全管理等关键领域。如果需要更深入的某一部分解析(如广播过程或加密机制),请告诉我!

Connection Update procedure

在这里插入图片描述

这张图展示了 BLE(蓝牙低功耗)设备在连接参数更新时的连接事件时序图(Connection Event Timing)。它描述了主设备(Central)和从设备(Peripheral)在旧连接参数和新连接参数切换时的时间关系。


图中关键部分解释

  1. Last Event Transmitted with Old Connection Parameters
    • 描述:
      • 这是主设备(C)和从设备(P)之间使用旧的连接参数(connInterval_old)完成的最后一次数据传输。
    • 特点:
      • 此时仍按照旧的连接间隔 connInterval_old 进行通信。

  1. Transmit Window (传输窗口)
    • 位置:在 Instant 时间点后出现。
    • 定义:
      • Transmit Window 是连接参数更新的关键,它标志着新连接参数(connInterval_new)生效的开始。
      • 主设备将在 transmitWindowOffsettransmitWindowOffset + transmitWindowSize 之间开始第一个连接事件。
    • 限制条件:
      • 主设备(C)必须在此窗口内发送数据包,从设备(P)需监听该窗口,以便完成参数更新后的第一次连接。

  1. First Event Transmitted with New Connection Parameters
    • 描述:
      • Transmit Window 中,主设备和从设备首次使用新的连接参数进行通信。
      • 具体的连接间隔变为 connInterval_new,后续事件也将按此间隔执行。
    • 特点:
      • 新的连接事件开始按照 connInterval_new 重新计算定时。

  1. Second Event Transmitted with New Connection Parameters
    • 描述:
      • 在第一个使用新参数的连接事件后,设备继续按照 connInterval_new 的时间间隔执行后续连接事件。

  1. 关键时间参数
    • connInterval_old:
      • 旧连接参数下的连接事件间隔。
    • transmitWindowOffset:
      • Instant 时间点后,新参数生效的延迟时间。
    • transmitWindowSize:
      • 定义新参数开始生效时主设备的传输窗口大小。
    • connInterval_new:
      • 更新后的新连接事件间隔。
    • T_IFS:
      • T_IFS 表示设备之间数据包的间隔(Inter-Frame Space)。

图的实际意义

  • 这是 BLE 中 连接参数更新过程 的标准行为,确保主从设备在切换参数时不会失去同步。
  • 使用 transmitWindowOffsettransmitWindowSize,主设备可以在规定的窗口内完成新连接参数的切换,而从设备只需监听这一窗口即可。
  • 应用场景:
    • 调整连接间隔(connInterval)以优化功耗或响应速度。
    • 提高通信效率,满足实时性或低功耗的需求。

总结

这张图展示了 BLE 连接参数更新中的定时关系:

  1. 主从设备使用旧参数完成最后一次通信。
  2. 主设备进入 Transmit Window,开始按照新参数通信。
  3. 新的连接事件间隔生效,并持续使用新参数进行通信。

主机连接流程

在这里插入图片描述

这两张图展示了 BLE(蓝牙低功耗)连接建立过程 的两种不同场景:使用 CONNECT_INDAUX_CONNECT_REQ 建立连接。

上图(Figure 4.45):Central’s view of LL connection setup with CONNECT_IND

描述:
  1. Advertising Packet(广播包):
    • 从 Peripheral(外设)发送广播包。
    • Central(中心设备)监听广播频道接收这个包。
  2. CONNECT_IND:
    • Central 在接收到广播包后,通过广播频道发送一个 CONNECT_IND 数据包,表示请求建立连接。
  3. Transmit Window:
    • Peripheral 和 Central 在 Transmit Window 时间段内开始通信。
    • TransmitWindowOffsetTransmitWindowSize 决定了数据传输的起始时间和窗口大小。
  4. Connection Interval:
    • 数据传输进入周期性模式,每隔 Connection Interval 时间开始一个连接事件。
  5. 数据传输:
    • 通信以 C->P(Central 发向 Peripheral)和 P->C(Peripheral 发向 Central)为交替模式进行,确保数据双向传输。

下图(Figure 4.46):Central’s view of LL connection setup with AUX_CONNECT_REQ

描述:
  1. AUX_ADV_IND(辅助广播包):
    • Peripheral 通过辅助广播频道发送 AUX_ADV_IND 包,提供更多的广播数据。
    • 这是 BLE 的扩展广播(Extended Advertising)功能。
  2. AUX_CONNECT_REQ:
    • Central 在接收到 AUX_ADV_IND 后,通过辅助频道发送 AUX_CONNECT_REQ 包,表示建立连接的请求。
  3. AUX_CONNECT_RSP:
    • Peripheral 接收到 AUX_CONNECT_REQ 后,通过辅助频道发送响应包 AUX_CONNECT_RSP,确认连接建立。
  4. Transmit Window:
    • 与 CONNECT_IND 一样,连接建立后进入 Transmit Window 阶段,按照 TransmitWindowOffsetTransmitWindowSize 的约定开始传输数据。
  5. Connection Interval:
    • 数据传输也按照设定的 Connection Interval 周期进行。

两种方式的区别:

  1. 通信信道:
    • CONNECT_IND 使用的是 主广播信道
    • AUX_CONNECT_REQ 使用的是 辅助广播信道,适用于扩展广播场景。
  2. 使用场景:
    • CONNECT_IND 适合传统的广播连接。
    • AUX_CONNECT_REQ 则是 BLE 5.0 引入的特性,支持更多广播数据和更灵活的连接方式。

总结:

这两张图分别展示了 BLE 在传统广播和扩展广播模式下,如何从连接请求到数据传输建立的全过程。核心流程相似,主要区别在于所使用的广播信道不同。

NESN和SN什么意思

在蓝牙低功耗(BLE)通信中,NESN(Next Expected Sequence Number)和 SN(Sequence Number)是链路层(Link Layer)用于实现数据包序列控制和可靠通信的重要机制。这两个字段帮助 BLE 设备管理数据包的接收、确认和重传。


1. NESN(Next Expected Sequence Number)

  • 定义:指接收端期望从发送端接收到的下一个数据包的序列号。
  • 作用:
    • 表明发送端已经接收到哪些数据包。
    • 用于确认当前数据包的可靠传输,并指示发送端可以继续发送新的数据。
  • 值的取值范围:通常是一个 1-bit 字段(值为 0 或 1),按顺序切换。
    • 0 表示期望接收序列号为 0 的数据包。
    • 1 表示期望接收序列号为 1 的数据包。

2. SN(Sequence Number)

  • 定义:指发送端发送的数据包的当前序列号。
  • 作用:
    • 标识当前发送的数据包是否与前一个数据包不同。
    • 帮助接收端判断是否是新的数据包,防止重复接收或丢包。
  • 值的取值范围:也是一个 1-bit 字段(值为 0 或 1,按顺序切换。)
    • 0 表示当前发送的数据包序列号为 0
    • 1 表示当前发送的数据包序列号为 1

3. NESN 和 SN 的关系

  • 数据包传输流程

    1. 发送端 将数据包的 SN 设置为当前序列号。

    2. 接收端

      检查数据包中的 SN,判断是否是期望的包(与自己的 NESN 匹配)。

      • 如果 SN 与 NESN 相符,说明数据包接收正确,接收端更新 NESN(切换到下一个值)。
      • 如果 SN 与 NESN 不符,说明包重复或错误,接收端不会更新 NESN。
    3. 接收端 在返回的确认包(ACK/NACK)中设置自己的 NESN,告知发送端当前的接收状态。

  • 可靠性保障

    • NESN 和 SN 确保每个数据包在 BLE 链路上传输时都能被正确接收或重传。
    • 如果数据包丢失,发送端会根据接收端返回的 NESN 重传丢失的数据。

4. 示例

假设 A 和 B 两个设备在通信:

  1. 初始状态
    • A 的初始 SN = 0
    • B 的初始 NESN = 0
  2. 数据包传输
    • A 发送一个数据包,SN = 0。
    • B 收到数据包,发现 SN = NESN(都是 0),说明包正确。
    • B 更新 NESN = 1,并返回 ACK。
  3. 继续发送
    • A 收到 ACK 后,更新自己的 SN = 1,发送下一个数据包。
    • B 收到新的数据包,检查 SN = 1,匹配自己的 NESN,继续传输。
  4. 错误处理
    • 如果某个数据包丢失或重复,NESN 和 SN 不匹配,接收端不会更新 NESN,发送端据此判断需要重传。

5. 总结

  • NESN(Next Expected Sequence Number):接收端告知发送端下一个期望的序列号,用于确认是否成功接收。
  • SN(Sequence Number):发送端标识当前数据包的序列号,用于确认数据包的唯一性和顺序。

这种简单的机制通过 1-bit 序列号实现了高效的包顺序管理和丢包重传,非常适合 BLE 的低功耗和低复杂度设计目标。

连接参数更新instant的作用

在 BLE (Bluetooth Low Energy)中,连接参数更新的 instant 是一个重要的机制,确保在连接参数更新时,主设备(Central)和从设备(Peripheral)能以同步的方式应用新的连接参数。


Instant 的作用

  1. 同步连接参数的生效时刻
    • BLE 的连接是基于时间片(连接事件)的,每个事件都有唯一的事件计数(Event Count)。
    • Instant 是一个特定的事件计数,指明连接参数更新将在那个时刻开始生效。
    • 通过 Instant,主设备和从设备可以在同一连接事件上同时切换到新参数,避免切换过程中的不一致。
  2. 防止通信中断
    • 如果主从设备在不同步的情况下切换参数,可能导致连接失败。
    • Instant 确保在指定时刻之前,双方仍使用旧参数通信,在指定时刻同时切换到新参数。
  3. 提供足够的准备时间
    • Instant 通常是当前事件计数加上一段安全的延迟(例如 6 个连接事件)。
    • 这段时间允许设备完成必要的准备工作,例如调整硬件定时器或通信调度。

连接参数更新流程中的 Instant

  1. 主设备发送更新请求

    • 主设备通过 L2CAP 的

      Connection Parameter Update Request
      

      向从设备提议新的连接参数,包括:

      • 新的连接间隔(Interval
      • 新的从设备延迟(Slave Latency
      • 新的超时时间(Timeout
      • Instant(表示参数更新的生效时刻)
  2. 从设备响应更新请求

    • 从设备根据自身能力接受或拒绝请求。
    • 如果接受,从设备会记录 Instant,并继续使用旧参数直到 Instant 时刻。
  3. 双方同步参数更新

    • 在 Instant 指定的事件计数到达时,主从设备同时切换到新的连接参数。

Instant 的具体计算

  • Instant 的值:

    • Instant 是一个 16-bit 的计数值,取自 BLE 链路层的事件计数(Event Counter)。
    • 它通常设定为当前事件计数加上一个固定的偏移量。例如:
      • 当前事件计数 = 100
      • Instant = 100 + 6 = 106(即 6 个事件之后生效)
  • 偏移量的作用:

    • 给设备提供足够的时间来完成切换准备,例如:
      • 重新配置定时器
      • 校准新的参数

关键点

  1. 双方必须遵守 Instant
    • 无论是主设备还是从设备,只有在 Instant 指定的时刻才会切换到新的参数。
  2. 瞬态点的检查
    • 在连接参数更新逻辑中,双方都会检查当前事件计数与 Instant 的差值(gap)。
    • 如果 gap == 0 或发生溢出(gap >= 32767),说明 Instant 到达,开始切换。
  3. 失败处理
    • 如果主设备或从设备在 Instant 到达之前断开连接,参数更新将无法完成。

总结

  • Instant 的核心作用是为 BLE 连接参数的更新提供一个同步的切换点。
  • 它通过事件计数保证主从设备在同一时刻应用新参数,防止因参数不同步而导致的通信错误。
  • 这一机制对于 BLE 的低功耗设计至关重要,因为它能在不频繁通信的情况下仍保持通信的可靠性和一致性。

LL_CONNECTION_UPDATE_INDLL_CONNECTION_PARAM_REQ 是蓝牙低功耗(BLE)链路层中两种用于连接参数更新的链路层消息,主要区别在于用途、触发条件和使用场景。


LL CONNECTION UPDATE IND和LL_CONNECTION_PARAM_REQ有什么区别

1. LL_CONNECTION_PARAM_REQ

LL_CONNECTION_PARAM_REQ 是主机用来请求从机更新连接参数的链路层消息,属于 Connection Parameter Request Procedure

主要特点

  1. 消息发送方主机
    • 该消息由主机发起,目的是向从机请求更新连接参数(例如连接间隔、超时时间和从机延迟等)。
  2. 响应机制
    • 从机会根据本地的支持情况响应,可以:
      • 接受请求,并继续协商更新参数。
      • 拒绝请求,并通过 LL_REJECT_IND 返回拒绝原因。
  3. 适用场景
    • 主机检测到当前连接参数不适合应用需求(如延迟过高或功耗过高)。
    • 主机需要优化连接性能。
    • 典型使用场景包括主设备需要更高效的数据传输或降低能耗。
  4. 协议支持
    • 此消息仅在从机支持 Connection Parameter Request Procedure 的情况下使用。
    • 主机会通过 Feature Exchange Procedure 确认从机是否支持该过程。

2. LL_CONNECTION_UPDATE_IND

LL_CONNECTION_UPDATE_IND 是链路层更新连接参数的通知消息,属于 Connection Update Procedure

主要特点

  1. 消息发送方主机或从机
    • 该消息既可以由主机发送,也可以由从机发送,具体取决于设备角色。
    • 用于通知对方连接参数更新的结果。
  2. 触发机制
    • 当主从设备协商好新的连接参数后,LL_CONNECTION_UPDATE_IND 用于指示更新参数的生效时间和内容。
    • 包含字段如:新的连接间隔、超时时间、从机延迟以及更新生效的时间点。
  3. 适用场景
    • 协商更新连接参数后,用于通知双方。
    • 应用场景包括完成 LL_CONNECTION_PARAM_REQ 流程后,更新连接参数。
  4. 协议要求
    • 无需确认特性支持,任何 BLE 设备都能使用 Connection Update Procedure

3. 二者的关键区别

特性LL_CONNECTION_PARAM_REQLL_CONNECTION_UPDATE_IND
作用请求更新连接参数通知连接参数的最终更新
消息发送方主机主机或从机
触发条件需要协商新的连接参数新的连接参数已经协商好
从机特性支持要求要求从机支持 Connection Parameter Request Procedure无需特性支持要求
典型用途主机希望调整连接性能(延迟、功耗等)连接参数更新过程的最后一步
响应消息从机会通过 LL_CONNECTION_UPDATE_INDLL_REJECT_IND 响应无需回应(作为通知消息发送)
协议依赖Connection Parameter Request ProcedureConnection Update Procedure

4. 二者的协作关系

  • LL_CONNECTION_PARAM_REQ 是用于主机发起参数更新请求的初始消息,目标是与从机协商合适的参数。
  • 在完成协商后,通过 LL_CONNECTION_UPDATE_IND 指定新参数的生效时间和内容。

5. 示例流程

以下是主机通过链路层更新连接参数的完整流程:

  1. Feature Exchange:主机与从机确认是否支持 Connection Parameter Request Procedure

  2. 主机发送请求:主机通过 LL_CONNECTION_PARAM_REQ 请求从机更新参数。

  3. 从机处理请求:

    • 从机接受:协商新的连接参数。
    • 从机拒绝:通过 LL_REJECT_IND 通知主机。
  4. 参数更新通知:

    • 如果从机接受并协商完成,则由主机发送 LL_CONNECTION_UPDATE_IND,通知从机新的参数及生效时间。

6. 总结

  • LL_CONNECTION_PARAM_REQ 用于请求更新连接参数,是参数协商流程的开始。
  • LL_CONNECTION_UPDATE_IND 用于通知新参数的生效,是参数协商流程的结束。

如果有其他问题或需要更深入的协议分析,可以继续讨论!

Channel Map Update procedure

在 BLE(蓝牙低功耗)通信中,Channel Map Update Procedure 是一种更新连接通道映射的机制,用于优化通信质量和减少干扰。这一机制在 BLE 链接中非常重要,因为它确保了数据传输的可靠性和效率。

以下是对 Channel Map Update Procedure 的详细解析:


1. 背景与目的

BLE 使用 2.4 GHz ISM 频段,有 40 个射频信道:

  • 3 个信道用于广播(advertising channels):37、38、39。
  • 37 个信道用于数据通信(data channels):0 到 36。

由于干扰(如 Wi-Fi 或其他蓝牙设备)或硬件问题(如某些频段受阻),某些数据通道可能无法可靠地传输数据。因此,Channel Map Update 允许主设备(Central)通知从设备(Peripheral)使用哪些信道进行通信,以避免干扰。


2. 过程详解

Channel Map Update Procedure 是主从设备间的协商机制,主要步骤如下:

(1) 触发更新
  • 主设备发起:主设备(Central)监测数据传输质量,如发现某些通道通信质量较差,会决定更新通道映射表。
  • 触发时机:
    • 周围环境发生变化(如新增干扰源)。
    • 通信失败率升高。
(2) Channel Map Indication

主设备通过 Link Layer 数据包中的 Channel Map Indication 向从设备发送新的通道映射表。

  • 内容

    • Channel Map(37 位):表示每个数据通道是否被启用(1 = 启用,0 = 禁用)。
    • Instant:表示更新生效的时间点(单位为连接事件)。
  • 实例

    Channel Map: 1111111111111100111111111100000000000
    Instant: 12345
    

    上述映射表示禁用了几个数据通道,Instant 指定了更新将在连接事件计数达到 12345 时生效。

(3) 更新生效
  • 双方设备在 Instant 指定的连接事件时刻,同时切换到新的通道映射。
  • 如果从设备在更新中丢失或未收到指令,会中断连接。

3. 优点

  • 动态调整:根据实时环境变化优化通信通道。
  • 减少干扰:避开被占用或干扰严重的信道,提高连接稳定性。
  • 节能:避免重传数据,延长设备电池寿命。

4. 注意事项

  • 主设备决定通道更新:从设备只能被动接受。
  • 必须使用至少两个通道:通道映射中必须至少有两个通道被启用,否则协议不允许更新。
  • 即时同步:主从设备需要在 Instant 同步更新,否则可能导致通信中断。

5. 典型场景

  • 拥挤环境:如办公楼中有多个蓝牙设备,Channel Map Update 会关闭干扰通道。
  • 动态环境:如移动中的 BLE 设备(手环、耳机),可能需要随时调整信道映射。

Encryption procedure

在蓝牙低功耗(BLE)中,**Encryption Procedure(加密过程)**是用于确保数据传输安全的关键步骤。它在主设备(Central)和从设备(Peripheral)之间协商并建立一个加密会话,从而保护通信内容不被窃听或篡改。

以下是对 BLE Encryption Procedure 的详细解析:


1. 加密的必要性

BLE 的加密提供以下功能:

  • 数据保密性:防止未授权的第三方窃听数据。
  • 数据完整性:确保传输数据未被篡改。
  • 身份验证:验证通信设备的身份。

加密过程依赖于设备配对时生成的共享密钥(LTK,Long Term Key)。


2. 加密过程的参与者

加密过程涉及以下关键实体:

  • LTK(Long Term Key):配对时生成的长时密钥,用于数据加密和解密。
  • EDIV(Encrypted Diversifier)RAND:用来标识和验证 LTK。
  • STK(Short Term Key):在未分发 LTK 的情况下,用于临时加密。
  • IV(Initialization Vector):初始化向量,用于加密过程中的随机化。

3. 加密过程详解

(1) 启动加密过程
  1. Central 发送加密请求

    • 在连接建立后,Central 向 Peripheral 发送 LL_ENC_REQ 数据包。

    • 包含:

      • RAND:随机数,用于标识 LTK。
      • EDIV:加密多样化标识符,匹配 LTK。
      • SKDmIVm:主设备的会话密钥分量和初始化向量。

在这里插入图片描述

  1. Peripheral 响应

    • Peripheral 接收到 LL_ENC_REQ 后,发送 LL_ENC_RSP
    • 包含:
      • SKDsIVs:从设备的会话密钥分量和初始化向量。

    在这里插入图片描述


(2) 生成会话密钥(Session Key)
  • 主从设备共同生成会话密钥(sk)

    SK = E(SKD, LTK)
    
    • SKD = SKDm || SKDs(合并主从设备的会话密钥分量)。
    • E 是 AES-128 加密算法。
    • LTK 是共享密钥,用于生成 SK

(3) 启用加密
  1. 双方生成会话密钥后,使用共享的 IV 初始化加密引擎。
  2. 加密引擎基于会话密钥对数据包进行加密和解密。
  3. Central 向 Peripheral 发送 LL_START_ENC_REQ 指令以开始加密。

在这里插入图片描述

  1. Peripheral 响应 LL_START_ENC_RSP,确认启用加密。

在这里插入图片描述


(4) 密钥验证
  • 双方使用 RANDEDIV 确保使用的 LTK 是一致的。
  • 如果验证失败,则加密过程终止,连接可能会断开。

(5) 通信加密

一旦加密启用:

  • 所有数据包都通过会话密钥和 AES-CCM(Counter Mode with CBC-MAC)算法进行加密。
  • 数据包包含:
    • 加密的数据负载。
    • MIC(Message Integrity Check)字段,用于验证数据完整性。

4. 加密模式

BLE 支持以下两种加密模式:

  1. Legacy Pairing:
    • 使用 STK 作为会话密钥(适用于蓝牙 4.0)。
    • 安全性较低。
  2. LE Secure Connections:
    • 使用 LTK 作为会话密钥(适用于蓝牙 4.2+)。
    • 基于 ECC(椭圆曲线密码学),安全性更高。

5. 常见问题

  • 加密失败
    • LTK 不匹配。
    • 环境中存在干扰或数据包丢失。
    • 配对过程中未成功分发 LTK。
  • 安全漏洞
    • Legacy Pairing 存在中间人攻击(MITM)风险。
    • 建议使用 LE Secure Connections。

Feature Exchange procedure

Feature Exchange Procedure 是蓝牙低功耗(BLE)链路层中的一项控制过程,用于在主设备(Central)和从设备(Peripheral)之间交换各自支持的功能特性。这一过程确保设备能够根据共同支持的功能进行通信,避免使用对方不支持的功能而导致错误。

以下是 Feature Exchange Procedure 的详细解析:


1. 目的与作用

  • 目的
    • 确定主从设备共同支持的功能特性。
    • 为后续的链路层操作(如加密、信道更新、物理层切换)奠定基础。
  • 作用
    • 避免使用对方设备不支持的功能。
    • 提高设备间的兼容性和互操作性。

2. 过程详解

(1) 触发时机
  • Feature Exchange Procedure 通常在 连接建立后 自动启动。
  • 也可以通过其他链路层事件(如功能更新需求)手动触发。
(2) 消息交互

Feature Exchange Procedure 基于链路层控制数据包进行消息交互,包括以下步骤:

  1. Feature Request
    • 主设备发送 LL_FEATURE_REQ 数据包。
    • 数据包中包含主设备支持的功能特性(用位字段表示)。
  2. Feature Response
    • 从设备接收到请求后,发送 LL_FEATURE_RSP 数据包。
    • 数据包中包含从设备支持的功能特性。
  3. 功能协商
    • 主设备根据双方的特性列表,选择双方都支持的功能集。

(3) 数据包结构

每个 Feature Exchange 数据包的主要字段:

  • Opcode:操作码,标识这是 LL_FEATURE_REQLL_FEATURE_RSP
  • Features:一个 64 位字段,用于表示设备支持的功能特性。

例如:

Features = 0x000000000000002F

其中每个位对应一个功能:

  • 第 0 位:LE Encryption
  • 第 1 位:Connection Parameters Request Procedure
  • 第 2 位:Extended Reject Indication
  • 第 3 位:Slave-initiated Features Exchange
  • 第 4 位:LE Ping
  • 第 5 位:LE Data Packet Length Extension

3. 常见支持功能

以下是 BLE 协议中一些常见的功能特性:

功能特性描述
LE Encryption支持加密功能,保护数据安全。
Connection Parameters Request Procedure支持连接参数更新过程。
Extended Reject Indication支持扩展拒绝指示,用于提供更详细的错误信息。
Slave-initiated Features Exchange从设备可以主动发起 Feature Exchange Procedure。
LE Ping支持 LE Ping 功能,确保长连接状态下的链接有效性。
LE Data Packet Length Extension支持数据包长度扩展,增加传输效率。
LE 2M PHY支持 2 Mbps 数据传输速率。
LE Coded PHY支持编码物理层(长距离通信)。
Periodic Advertising支持周期性广播,用于同步多个设备。

设备可能会根据硬件和软件支持情况实现这些特性中的一部分。


4. 后续操作

Feature Exchange Procedure 完成后,链路层可以根据双方支持的功能执行其他操作:

  • 如果双方都支持加密,则可以启用 Encryption Procedure
  • 如果支持数据包长度扩展,则可以启动 Data Length Update Procedure
  • 如果支持物理层切换,则可以启动 PHY Update Procedure

5. 注意事项

  • 兼容性问题
    • 如果两个设备功能支持不一致,则只能使用共同支持的功能集。
    • 如果从设备不支持 Feature Exchange,则主设备可能会降级功能。
  • 错误处理
    • 如果从设备无法处理 LL_FEATURE_REQ 数据包,则可能会发送 LL_UNKNOWN_RSP 响应。
  • 低功耗影响
    • Feature Exchange 的数据包占用少量连接事件,不会显著增加功耗。

6. 应用场景

  • 物联网设备:确保设备之间的互操作性,尤其是在具有不同硬件能力的设备之间。
  • 低功耗传感器:协商支持的最低功能集,以优化功耗和性能。
  • 蓝牙耳机或音频设备:根据主设备的功能调整传输速率和模式(如 LE Audio)。

总结

Feature Exchange Procedure 是 BLE 链路层中的重要步骤,用于功能协商,确保设备之间的兼容性。它是 BLE 协议栈中实现动态适配和优化的重要机制之一。如果需要了解具体的实现方式或调试示例,请告诉我!

一些常见概念和名词

ble的T_IFS表示什么

BLE(Bluetooth Low Energy) 通信中,T_IFS 表示 Inter-Frame Space,即帧间隔时间。

T_IFS的含义:

  • T_IFS 是两个连续 BLE 数据包之间的间隔时间。
  • 根据 BLE 规范,T_IFS 的标准值为 150 µs(微秒)。
  • 这个时间是固定的,用于确保 BLE 链路上两个设备之间数据包交换的稳定性和一致性。

BLE 协议栈中的作用:

  1. 发送方与接收方之间:在 BLE 通信中,设备在发送数据包后,需要等待一个 T_IFS 时间后才能发送下一个数据包或进行回应。
  2. 保持时间同步:T_IFS 保证 BLE 通信双方时间间隔的准确性,以避免冲突。
  3. 协议要求:BLE 协议严格规定了这个时间,如果 T_IFS 时间违反(比如超过或不足 150 µs),通信可能会出错。

从你的截图中看到:

  • T_IFS = 146.875 µs,比标准的 150 µs 短了约 1.125 µs
  • T_IFS Violation 显示了 “1.125 µs too short”,这意味着时间间隔不符合 BLE 协议要求。

可能的影响:

T_IFS 违规可能会导致:

  1. 数据包无法被对端设备正确接收。
  2. 通信链路出现问题,甚至导致连接断开。
  3. T_IFS 的不规范(如过短)可能导致手机无法检测到广播包。这是因为 BLE 设备严格依赖标准协议进行通信。建议尽快修复 T_IFS 定时问题,确保时间间隔符合 150 µs 标准,从而保证广播的正常解析和连接的稳定性。

解决方法:

  • 检查发送端和接收端的时间同步机制。
  • 确保通信栈或硬件中 T_IFS 定时器的实现符合 BLE 协议的要求(150 µs)。

在这里插入图片描述

在这里插入图片描述

instant概念

BLE(Bluetooth Low Energy) 通信中,instant 是一个用于表示 特定时刻 的概念,主要用于 链路层(Link Layer) 的控制命令中,确保通信双方在约定的时刻同步执行特定操作。


Instant 点的定义

  • Instant 是链路层控制消息(如连接参数更新、信道映射更新等)中的一个字段,用于指定 何时 应执行所请求的操作。
  • 这个时间点基于 连接事件计数器(Connection Event Counter),即 BLE 链路层通信中事件的计数。

Instant 的作用场景

  1. 连接参数更新(Connection Parameter Update)
    • 当主设备(Master)请求修改连接间隔、超时时间等参数时,会通过 LL_CONNECTION_PARAM_REQ 消息传递新参数,并设置一个 Instant 点。
    • 从设备(Slave)在 Instant 指定的连接事件时刻开始使用新参数。
  2. 信道映射更新(Channel Map Update)
    • 信道映射表更新也使用 Instant 点,确保双方在相同的连接事件时刻开始使用新的信道映射。
  3. 跳频与时钟同步
    • Instant 确保主从设备在指定的时刻同步更新参数,避免主从设备之间出现跳频或时钟偏移导致的通信失步。

Instant 的特点

  1. 基于连接事件计数器
    • BLE 链路层通过 连接事件计数器 追踪每次通信的事件编号。
    • Instant 是一个 未来的事件编号,通常在当前事件之后的几次连接事件发生时触发。
  2. 确保同步执行
    • Instant 允许 BLE 设备双方预先知道何时应用新的设置,确保同步执行操作,而不会导致通信中断。
  3. 错误处理
    • 如果从设备错过了 Instant(例如设备进入睡眠状态,或无法在指定事件完成更新),会导致链路断开,通信失败。

连接参数更新流程中的 Instant

  1. 主设备发送更新请求

    • 主设备通过 L2CAP 的

      Connection Parameter Update Request
      

      向从设备提议新的连接参数,包括:

      • 新的连接间隔(Interval
      • 新的从设备延迟(Slave Latency
      • 新的超时时间(Timeout
      • Instant(表示参数更新的生效时刻)
  2. 从设备响应更新请求

    • 从设备根据自身能力接受或拒绝请求。
    • 如果接受,从设备会记录 Instant,并继续使用旧参数直到 Instant 时刻。
  3. 双方同步参数更新

    • 在 Instant 指定的事件计数到达时,主从设备同时切换到新的连接参数。

Instant 的具体计算

  • Instant 的值:

    • Instant 是一个 16-bit 的计数值,取自 BLE 链路层的事件计数(Event Counter)。
    • 它通常设定为当前事件计数加上一个固定的偏移量。例如:
      • 当前事件计数 = 100
      • Instant = 100 + 6 = 106(即 6 个事件之后生效)
  • 偏移量的作用:

    • 给设备提供足够的时间来完成切换准备,例如:
      • 重新配置定时器
      • 校准新的参数

关键点

  1. 双方必须遵守 Instant
    • 无论是主设备还是从设备,只有在 Instant 指定的时刻才会切换到新的参数。
  2. 瞬态点的检查
    • 在连接参数更新逻辑中,双方都会检查当前事件计数与 Instant 的差值(gap)。
    • 如果 gap == 0 或发生溢出(gap >= 32767),说明 Instant 到达,开始切换。
  3. 失败处理
    • 如果主设备或从设备在 Instant 到达之前断开连接,参数更新将无法完成。

总结

  • Instant 的核心作用是为 BLE 连接参数的更新提供一个同步的切换点。
  • 它通过事件计数保证主从设备在同一时刻应用新参数,防止因参数不同步而导致的通信错误。
  • 这一机制对于 BLE 的低功耗设计至关重要,因为它能在不频繁通信的情况下仍保持通信的可靠性和一致性。

LL_CONNECTION_UPDATE_INDLL_CONNECTION_PARAM_REQ 是蓝牙低功耗(BLE)链路层中两种用于连接参数更新的链路层消息,主要区别在于用途、触发条件和使用场景。

示例

假设主设备发送一个连接参数更新请求:

  • 当前 连接事件计数器 为 100。
  • 主设备在请求中指定 Instant = 110,表示在 第 110 次连接事件 时,主从设备都开始使用新连接参数。
  • 从设备接收到这个请求后,等待 第 110 次连接事件,并在该时刻同步更新参数。

总结

  • Instant 是 BLE 链路层中一个表示未来时刻的概念,主要用于同步执行控制操作,如连接参数更新和信道映射更新。
  • 它基于 连接事件计数器,确保 BLE 通信双方在指定的连接事件中同步完成特定任务,保证通信的稳定性和一致性。

BLE(蓝牙低功耗)中的 1M、2M、S2、S8 是指蓝牙物理层(PHY)传输速率和编码方式的配置选项。这些模式影响传输速度、抗干扰能力和通信距离,是蓝牙5.0及更高版本引入的重要特性。以下是每个模式的详细说明:


ble 1m 2m s2 s8详解

1M PHY (1 Mbps PHY)

在这里插入图片描述

特性
  • 传输速率:1 Mbps(每秒1兆比特)。
  • 编码方式:没有特殊的编码,使用基本的高斯频移键控(GFSK)调制。
  • 范围:中等(通常10-50米,视环境和设备功耗而定)。
  • 抗干扰能力:一般,适用于常见的近距离低功耗通信。
应用场景
  • 是蓝牙低功耗的基础物理层速率,兼容性最广。
  • 适合大多数 BLE 设备,如智能手环、心率监测器等。

2M PHY (2 Mbps PHY)

特性
  • 传输速率:2 Mbps(每秒2兆比特)。
  • 编码方式:无特殊编码,依然使用 GFSK,但速率提升一倍。
  • 范围:比 1M PHY 略短(信号在高频传输下衰减较快)。
  • 抗干扰能力:略弱于 1M PHY,但仍适合低干扰环境。
应用场景
  • 高数据速率需求:如音频数据传输(LE Audio)、固件升级 (OTA)。
  • 低延迟应用:如游戏手柄、虚拟现实设备。

S2 (LE Coded PHY, 1:2)

特性
  • 传输速率:有效速率为 500 kbps(1 Mbps 的一半)。

  • 编码方式:使用前向纠错(FEC)编码,

    1:2 编码率。

    • 每1位数据用2位符号表示,提高数据冗余。
  • 范围:比 1M PHY 更远,适合复杂环境。

  • 抗干扰能力:显著提高,适用于嘈杂环境。

应用场景
  • 需要较远距离但不追求高数据速率的场景。
  • 工业物联网(IIoT)、资产跟踪设备(Asset Tracker)等。

S8 (LE Coded PHY, 1:8)

特性
  • 传输速率:有效速率为 125 kbps(1 Mbps 的八分之一)。
  • 编码方式:使用 FEC 编码,1:8 编码率。
    • 每1位数据用8位符号表示,极大增强冗余性。
  • 范围:最远的 PHY 模式(比 S2 和 1M PHY 都远)。
  • 抗干扰能力:最强,适用于极其复杂或干扰严重的环境。
应用场景
  • 超远距离通信:户外定位、农业物联网设备。
  • 恶劣环境:信号穿透力和抗干扰能力要求高的场景。

总结对比

PHY 模式传输速率范围抗干扰能力典型应用
1M PHY1 Mbps中等一般智能手环、低功耗设备
2M PHY2 Mbps略短较弱高速传输、LE Audio
S2500 kbps更远较强工业物联网、远距离设备
S8125 kbps最远最强超远距离通信、复杂环境

BLE PHY 模式的选择

  1. 优先范围:
    • 如果距离优先,选择编码模式(S2 或 S8)。
    • S8 最适合远距离且高可靠性要求的场景。
  2. 优先速率:
    • 高速需求(如音频传输)选择 2M PHY。
    • S2/S8 不适合大数据量传输,主要用于小数据包的可靠传输。
  3. 能耗权衡:
    • 编码模式(S2/S8)增加了冗余性,解码耗电更多,但通信距离延长。
    • 2M PHY 在速率提升的同时能耗变化不大。
  4. 环境干扰:
    • 干扰严重时,编码模式(S2/S8)可以显著提高通信稳定性。

如需更深入了解,或希望针对具体设备和使用场景进行分析,可以提供更多细节!

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

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

相关文章

【疑难杂症】 HarmonyOS NEXT中Axios库的响应拦截器无法拦截424状态码怎么办?

今天在开发一个HarmonyOS NEXT的应用的时候,发现http接口如果返回的状态码是424时,我在axios中定义的拦截器失效了。直接走到了业务调用的catch中。 问题表现: 我的拦截器代码如下: 解决办法: 先说解决办法&#xff…

聚类评价指标

聚类评价指标分为 内部指标 和 外部指标 两大类,用于评估聚类算法的性能。 一、内部评价指标 内部评价指标不依赖真实标签,主要通过聚类结果本身的紧凑性和分离性进行评估。 轮廓系数(Silhouette Coefficient, SC) 衡量数据点与其…

flask后端开发(1):第一个Flask项目

目录 一、Helloworddebug、host、port的配置 gitcode地址: https://gitcode.com/qq_43920838/flask_project.git 一、Helloword 一般是会创建两个文件夹和app.py app.py from flask import FlaskappFlask(__name__)app.route(/) def hello_world():return Hello…

一文复盘:RAG技术-大模型

原文:https://zhuanlan.zhihu.com/p/13962398269 RAG(Retrieval-Augmented Generation)之所以被关注,有两方面原因: 1、没有跑大模型的资源:大多数人没有GPU集群搞LLM的预训练。 2、大模型缺乏知识&…

使用 OpenCV 绘制线条和矩形

OpenCV 是一个功能强大的计算机视觉库,它不仅提供了丰富的图像处理功能,还支持图像的绘制。绘制简单的几何图形(如线条和矩形)是 OpenCV 中常见的操作。在本篇文章中,我们将介绍如何使用 OpenCV 在图像上绘制线条和矩形…

WinForm 美化秘籍:轻松实现 Panel 圆角虚线边框

文章目录 1、引言2、案例实现1、创建自定义 Panel 类2、定义圆角矩形3. 使用自定义 Panel4. 调整属性5、使用背景图片来实现5、拓展:使用 Panel 的 Paint重绘单独实现虚线边框效果 3、实现效果4、总结 1、引言 在 Winform 应用程序开发中,美化用户界面&…

Spring Cloud LoadBalancer (负载均衡)

目录 什么是负载均衡 服务端负载均衡 客户端负载均衡 Spring Cloud LoadBalancer快速上手 启动多个product-service实例 测试负载均衡 负载均衡策略 自定义负载均衡策略 什么是负载均衡 负载均衡(Load Balance,简称 LB) , 是高并发, 高可用系统必不可少的关…

OpenCloudOS简介

OpenCloudOS是一款开源的云操作系统,具有诸多特性和优势,广泛应用于多个领域。 一、项目背景 开源社区发起:由操作系统、云平台、软硬件厂商与个人共同倡议发起的操作系统社区项目,旨在打造全面中立、开放、安全、稳定易用、高…

NLP 中文拼写检测纠正论文 Automatic-Corpus-Generation

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…

区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】

区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 区块链安全常见的攻击合约和…

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 …

跨域请求问题

跨域请求简介 跨域请求:通过一个域的JavaScript脚本和另外一个域的内容进行交互 域的信息:协议、域名、端口号 同域:当两个域的协议、域名、端口号均相同 如下所示: 同源【域】策略:在浏览器中存在一种安全策略就是…

C++“STL之String”

​ 🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:C入门 目录 ​编辑 前言 一、STL简介 1.1 STL是什么? 1.2 STL的版本(这个不是很重要了解即可) 1.3 STL的六大组件 二…

2-199基于Matlab-GUI的混合粒子群算法求解TSP问题

基于Matlab-GUI的混合粒子群算法求解TSP问题,多种路径可选,可设置微粒数目、迭代次数,动态展示路径规划过程及迭代曲线,得到叫佳的路径,输出最优路径序列及最终距离。程序已调通,可直接运行。 2-199基于Ma…

【ArcGIS Pro】完整的nc文件整理表格模型构建流程及工具练习数据分享

学术科研啥的要用到很多数据,nc文件融合了时间空间数据是科研重要文件。之前分享过怎样将nc文件处理成栅格后整理成表格。小编的读者还是有跑不通整个流程的,再来做一篇总结篇,也分享下练习数据跟工具,如果还是弄不了的&#xff0…

VM虚拟机配置ubuntu网络

目录 桥接模式 NAT模式 桥接模式 特点:ubuntu的IP地址与主机IP的ip地址不同 第一部分:VM虚拟机给ubuntu的网络适配器,调为桥接模式 第二部分:保证所桥接的网络可以上网 第三部分:ubuntu使用DHCP(默认&…

评分模型在路网通勤习惯分析中的应用——启发式搜索(2)

接上文《评分模型在路网通勤习惯分析中的应用——提出问题(1)》,本文内容主要针对上文提出的问题解决思路,详细讨论每一步骤中的具体处理措施。 4、问题的详细解决过程 4.1、对地图数据进行结构化 地图的本质是一种有向加权图结…

Lecture 17

10’s Complement Representation 主要内容: 1. 10’s 补码表示: • 10’s 补码表示法需要指定表示的数字位数(用 n 表示)。 • 表示的数字取决于 n 的位数,这会影响具体数值的解释。 2. 举例: • 如果采用 3 位补码&…