BLE core 内容整理解释

news2024/12/27 12:36:55

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

在这里插入图片描述

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.coloradmin.cn/o/2266388.html

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

相关文章

DP动态规划+贪心题目汇总

文章目录 背包01背包416. 分割等和子集 完全背包279. 完全平方数322. 零钱兑换 两个字符串DPLCR 095. 最长公共子序列139. 单词拆分 单个数组字符串DP5. 最长回文子串300. 最长递增子序列53.最大子数组和152. 乘积最大子数组198. 打家劫舍 三角形120. 三角形最小路径和 贪心121…

传统网络架构与SDN架构对比

传统网络采用分布式控制,每台设备独立控制且管理耗时耗力,扩展困难,按 OSI 模型分层,成本高、业务部署慢、安全性欠佳且开放性不足。而 SDN 架构将控制平面集中到控制器,数据转发由交换机负责,可统一管理提…

CI/CD是什么?

CI/CD 定义 CI/CD 代表持续集成和持续部署(或持续交付)。它是一套实践和工具,旨在通过自动化构建、测试和部署来改进软件开发流程,使您能够更快、更可靠地交付代码更改。 持续集成 (CI):在共享存储库中自动构建、测试…

Vue中动态样式绑定+CSS变量实现切换明暗主题功能——从入门到进阶

1.直接借助Vue的动态绑定样式绑定 Vue动态样式绑定 在Vue中,动态样式绑定是一种强大的功能,它允许开发者根据数据的变化动态地更新元素的样式。以下是对Vue动态样式绑定的详细知识梳理与详解: 一、基础知识 Vue的动态样式绑定主要通过v-b…

科汛网校KesionEDU CheckOrder SQL注入漏洞复现

0x01 产品简介 科汛网校KesionEDU是KESION科汛开发的在线教育建站系统,支持在线直播教学、课程点播、录播授课等多种教学方式,满足不同场景下的教学需求。提供问答互动、学习点评、在线笔记等功能,增强学员与教师之间的互动交流。拥有在线考试系统,支持单选、多选、问答等…

Windows Subsystem for Linux——设置默认登录用户名

大纲 问题解法 问题 在《Windows Subsystem for Linux——安装多个相同的操作系统》一文中,我们实现了子系统的导出和导入,但是也带来了一个问题:登录到系统时,会使用root用户。在一些场景下,这并不符合我们的使用场景…

【编译原理】往年题汇总(山东大学软件学院用)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀编译原理_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

智慧农业物联网传感器:开启农业新时代

在当今科技飞速发展的时代,农业领域正经历着一场前所未有的变革,而智慧农业物联网传感器无疑是这场变革中的关键利器。它宛如农业的 “智慧大脑”,悄然渗透到农业生产的各个环节,为传统农业注入了全新的活力,让农业生产…

观察者模式和发布-订阅模式有什么异同?它们在哪些情况下会被使用?

大家好,我是锋哥。今天分享关于【观察者模式和发布-订阅模式有什么异同?它们在哪些情况下会被使用?】面试题。希望对大家有帮助; 观察者模式和发布-订阅模式有什么异同?它们在哪些情况下会被使用? 1000道 …

C# OpenCvSharp DNN 卡证检测矫正

目录 说明 效果 模型 项目 代码 下载 参考 说明 源码地址:https://modelscope.cn/models/iic/cv_resnet_carddetection_scrfd34gkps 在实人认证、文档电子化等场景中需要自动化提取卡证的信息,以便进一步做录入处理。这类场景通常存在两类问题&…

前端入门之VUE--ajax、vuex、router,最后的前端总结

前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。本人不是学前端的,这个是大一的时候上学的和做的笔记,那个时候学的也蒙,故这里对前端做一个总…

要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量

文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释: …

RocketMQ的集群架构是怎样的?

大家好,我是锋哥。今天分享关于【RocketMQ的集群架构是怎样的?】面试题。希望对大家有帮助; RocketMQ的集群架构是怎样的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RocketMQ 是阿里巴巴开源的分布式消息中间件,广泛用于处…

使用DynadotAPI查看域名清仓中的过期域名列表

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…

uni-app 中使用微信小程序第三方 SDK 及资源汇总

🎀🎀🎀uni-app 跨端开发系列 🎀🎀🎀 一、uni-app 组成和跨端原理 二、uni-app 各端差异注意事项 三、uni-app 离线本地存储方案 四、uni-app UI库、框架、组件选型指南 五、uni-app 蓝牙开发 六、uni-app …

探索 Pencils Swap 的叙事:为 DeFi 的再次爆发蓄力

Pencils Protocol 最初是 Scroll 生态上一个综合性的 DeFi 平台,以 Farming、Vaults 以及 Auction 等系列产品板块为基础,其不仅成为了 Scroll 上重要的流动性、收益枢纽,同时也是重要的 LaunchPad 市场以及流量池,为 Scroll 生态…

基于STM32单片机矿井矿工作业安全监测设计

基于STM32单片机矿井矿工作业安全监测设计 目录 项目开发背景设计实现的功能项目硬件模块组成设计思路系统功能总结使用的模块技术详情介绍总结 1. 项目开发背景 随着矿井矿工作业环境的复杂性和危险性逐渐增加,矿井作业安全问题引起了社会各界的广泛关注。传统的…

数学建模与数学建模竞赛

什么是数学建模? 数学建模是通过数学的方法和工具,对现实世界的一个特定对象,依据其内在规律,做出一些必要的简化假设,从而建立一个数学结构的过程。数学建模的历史和数学的起源几乎同步开始,2000多年前&a…

stm32四联七段数码管,LED8*8点阵

一、七段数码管的整体代码和仿真 1)代码 seg74.c #include "stm32f10x.h" // Device headervoid seg74_init(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(…

SpringCloudAlibaba技术栈-Dubbo

1、什么是Dubbo? 简单来说,dubbo就像是个看不见的手,负责专门从注册中心nacos调用注册到nacos上面的服务的,因为在微服务环境下不同的功能模块可能在不同的服务器上。dubbo调用服务就像是在调用本地的服务一样。 分布式调用与高并发处理 Du…