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)可以显著提高通信稳定性。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HEIC 是什么图片格式?如何把 iPhone 中的 HEIC 转为 JPG?

在 iPhone 拍摄照片时,默认的图片格式为 HEIC。虽然 HEIC 格式具有高压缩比、高画质等优点,但在某些设备或软件上可能存在兼容性问题。因此,将 HEIC 格式转换为更为通用的 JPG 格式就显得很有必要。本教程将介绍如何使用简鹿格式工厂&#xf…

黑马商城项目—服务注册、服务发现

服务注册 我们把item-service注册到Nacos,步骤如下: 1.引入依赖 在item-service的pom.xml中添加依赖: 2.配置Nacos 在item-service的application.yml中添加nacos地址配置: 3.配置服务实例 为了测试一个服务多个实例的情况,我…

如何卸载和升级 Angular-CLI ?

Angular-CLI 是开发人员使用 Angular 的必备工具。然而,随着频繁的更新和新版本的出现,了解如何有效地卸载和升级 Angular-CLI 对开发人员来说至关重要。本指南提供了一个全面的、循序渐进的方法来帮助您顺利过渡到最新版本。 必备条件 确保您的系统上…

有道云笔记批量导出

前言 最近使用有道云笔记遇到打开过慢,导致笔记丢失,需要会员才能找回之前笔记问题。 决定改用思源,程序中的格式比较难于通过复制保留,即使导出成word 或者pdf,需要一个专门工具导出成Markdown格式,批量…

设计模式与游戏完美开发(2)

更多内容可以浏览本人博客:https://azureblog.cn/ 😊 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第四章 游戏主要类——外观模式(Facade) 一、游戏子功能的整合 一个游戏程序常常由内部数个不同的…

学习C++:变量

变量: 作用:给一段指定的内存空间起名,方便操作这段内容 (变量存在的意义:方便我们管理内存空间) 语法:数据类型 变量名 初始值; 实例:

electron-vite_18 设置系统音量loudness报错

loudness是一款控制系统音量输出的一款 Node.js 库;但是在electron-vite中直接使用编译的时候会报错;这个时候需要单独处理; 错误分析 error Error: spawn E:\xxx\out\main\adjust_get_current_system_volume_vista_plus.exe 查看编译后项目…

Chrome被360导航篡改了怎么改回来?

一、Chrome被360导航篡改了怎么改回来? 查看是否被360主页锁定,地址栏输入chrome://version,看命令行end后面(蓝色部分),是否有https://hao.360.com/?srclm&lsn31c42a959f 修改步骤 第一步&#xff1a…

微信小程序-基于Vant Weapp UI 组件库的Area 省市区选择

Area 省市区选择,省市区选择组件通常与 弹出层 组件配合使用。 areaList 格式 areaList 为对象结构,包含 province_list、city_list、county_list 三个 key。 每项以地区码作为 key,省市区名字作为 value。地区码为 6 位数字,前两…

如何用gpt来分析链接里面的内容(比如分析论文链接)和分析包含多个文件中的一块代码

如何用gpt来分析链接里面的内容,方法如下 这里使用gpt4里面有一个网路的功能 点击搜索框下面这个地球的形状即可启动搜索网页模式 然后即可提出问题在搜索框里:发现正确识别和分析了链接里面的内容 链接如下:https://arxiv.org/pdf/2009.1…

GitLab的卸载与重装

目录 一、GitLab的卸载 二、 GitLab的安装与配置 1. 创建安装目录 2. 安装 3. 使用 3.1 初始化 3.2 创建空白项目 ​编辑 3.3 配置SSH 3.3.1 配置公钥 ​编辑 3.3.2 配置私钥 3.4 配置本地git库 一、GitLab的卸载 1. 停止gitlab sudo gitlab-ctl stop 2. 卸载…

中文学习系统:成本效益分析与系统优化

2.1 SSM框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架是属于重量级…

牛客网刷题 ——C语言初阶——BC112小乐乐求和

1.牛客网刷题 ——C语言初阶 牛客网:BC112小乐乐求和 小乐乐最近接触了求和符号Σ,他想计算的结果。但是小乐乐很笨,请你帮助他解答。 输入描述: 输入一个正整数n (1 ≤ n ≤ 109) 输出描述: 输出一个值,为求和结果。 示例1 输…

计算机操作系统与安全复习笔记

1 绪论 操作系统目标: 方便性; 有效性; 可扩充性; 开放性. 作用: 用户与计算机硬件系统之间的接口; 计算机资源的管理者; 实现了对计算机资源的抽象; 计算机工作流程的组织者. 多道程序设计: 内存中同时存放若干个作业, 使其共享系统资源且同时运行; 单处理机环境下宏观上并行…

数据结构(哈希表(下)方法讲解)

前言: 在前一部分中,我们探讨了哈希表的基本原理、设计思想、优势与挑战,并了解了它在实际项目中的应用场景。哈希表作为一种高效的数据结构,在查找、插入和删除等操作上具有显著优势,但要真正掌握它的使用&#xff0…

OCR实践-Table-Transformer

前言 书接上文 OCR实践—PaddleOCR Table-Transformer 与 PubTables-1M table-transformer,来自微软,基于Detr,在PubTables1M 数据集上进行训练,模型是在提出数据集同时的工作, paper PubTables-1M: Towards comp…

【Maven】Maven打包机制详解

Maven打包的类型? 以下是几种常见的打包形式: 1、jar (Java Archive) 用途:用于包含 Java 类文件和其他资源(如属性文件、配置文件等)的库项目。特点: 可以被其他项目作为依赖引用。适合创建独立的应用程…

设备的分配与回收

目录 1、设备分配应考虑的因素 2、静态分配与动态分配 3、设备分配管理中的数据结构 (1)设备控制表 DCT (2)控制器控制表COCT (3)通道控制表CHCT (4)系统设备表SDT 4、分配过…

清空DNS 缓存

如果遇到修改了host文件,但是IP和域名的映射有问题的情况,可以尝试刷新DNS缓存。 ipconfig/flushdns win建加R建,然后输入cmd,然后回车 然后回车,或者点击确定按钮。 出现如下所示标识清空DNS 缓存成功。

Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明)

教程概述 本教程先是幽络源初步教学分析掌阅书籍的网络结构,最后提供完整的爬取源码与使用说明,并展示结果,切记勿将本教程内容肆意非法使用。 原文链接:Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明…