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.rhkb.cn/news/497780.html

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

相关文章

【目标跟踪+人流计数+人流热图(Web界面)】基于YOLOV11+Vue+SpringBoot+Flask+MySQL

前言 本系统是基于YOLOv11SpringBootVueFlaskMySQL的人流计数、人流热图系统(包含YOLO全系列) 系统可以上传视频选择yolo模型进行人流计数。还支持自主划定检测区域,行人轨迹追踪、查看计数结果等功能。 可支持人流计数、人流热图以及人流热…

vuex - 第一天

思维逻辑 解决问题 代码能力2 vue2的项目 北京前端鸿蒙6期 语雀 vuex 在组件中使用 插件支持v2和v3 宏任务 和 微任务 多问问自己为什么 new的四步

什么是网络安全(Cybersecurity)?

不同组织机构对网络安全(Cybersecurity或Cyber Security)的定义不尽相同。从目标上来说,网络安全主要用于保护网络、计算机、移动设备、应用程序及数据等资产免受网络攻击,避免造成数据泄露、业务中断等安全问题。 网络钓鱼、勒索…

Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案

问题现象 小月妹妹近期在做RobotFrameWork自动化测试,并且使用Jenkins发送测试邮件的时候,发现报错Not sent to the following valid addresses,明明各个配置项看起来都没有问题,但是一到邮件发送环节,就是发送不出去,而且还不提示太多有用的信息,急的妹妹脸都红了,于…

虚拟机网络配置

【1】虚拟机提供的网络 桥接模式:可以联网,和主机不是同一个ip地址 NAT模式:可以联网,虚拟机和主机是同一个ip地址 仅主机模式:不能联网,可以实现虚拟机和主机之间的通信 【2】虚拟机是否能连接网络 …

STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器

STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器 1、按键控制 LED 按键:常见的输入设备,按下导通,松手断开 按键抖动:由子按键内部使用的是机械式弹簧片来进行通断的、所以在按下和松手的瞬间会伴随有一连串的抖动 按键控制LED接线图: 要有工程…

2024/12/29周报

文章目录 摘要Abstract粒子群优化文献研究背景污水处理面临的挑战现有优化方法的局限性 研究方法基于BSM1仿真平台的污水处理建模动态多目标粒子群优化算法(DMOPSO-CD)多目标优化控制架构(SOFNN) 研究过程研究结果与分析总结 摘要…

C#冒泡排序

一、冒泡排序基本原理 冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以一个简单的整数数…

科技云报到:人工智能时代“三大件”:生成式AI、数据、云服务

科技云报到原创。 就像自行车、手表和缝纫机是工业时代的“三大件”。生成式AI、数据、云服务正在成为智能时代的“新三大件”。加之全球人工智能新基建加速建设,成为了人类社会数字化迁徙的助推剂,让新三大件之间的耦合越来越紧密。从物理世界到数字世…

Node项目——从0开始构建且共享至Gitee

从0开始构建一个Node.js项目涉及多个步骤,包括设置开发环境、初始化项目、安装依赖、编写代码以及配置版本控制等。以下是一个详细的步骤指南: 1. 安装Node.js和npm 首先,确保你已经安装了Node.js和npm(Node Package Manager&am…

LabVIEW故障诊断中的无故障数据怎么办

在使用LabVIEW进行故障诊断时,可能会面临“无故障数据”的情况。这种情况下,缺乏明确的故障参考,使得系统难以通过传统对比法进行故障识别。本文将介绍应对无故障数据的关键策略,包括数据模拟、特征提取和基于机器学习的方法&…

3_TCP/IP连接三次握手与断开四次挥手

TCP/IP 通信是网络通信的基础协议,分为以下主要步骤: 1、建立连接(三次握手) 目的:保证双方建立可靠的通信连接。 过程: 1>客户端发送 SYN:客户端向服务器发送一个 SYN(同步&…

【黑马头条训练营】day02-黑马头条-App端文章展示

目录 描述app端首页从请求到数据显示的全部流程 描述文章微服务的组成及首页展示业务与实现 自己编写文章微服务关键逻辑 描述app端首页从请求到数据显示的全部流程 浏览器请求我们的app端 会通过nginx请求到我们app前端 app端输入手机号和密码 点击登录 请求 会到我们的…

算法进阶:贪心算法

贪心算法是一种简单而直观的算法思想,它在每一步选择中都采取在当前状态下最优的选择,以期望最终得到全局最优解。贪心算法通常适用于一些具有最优子结构的问题,即问题的最优解可以通过一系列局部最优解的选择得到。 贪心算法的基本思路是&a…

Windows 使用 非安装版MySQL 8

1.下载MySQL 8 https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.40-winx64.zip 2.创建my.ini 下载解压后,发现根目录没有my.ini文件,需手动创建 my.ini # For advice on how to change settings please see # http://dev.mysql.com/doc/refma…

hadoop搭建

前言 一般企业中不会使用master slave01 slave02来命名 vmware创建虚拟机 打开vmware软件,新建虚拟机 典型 稍后安装系统 选择centos7 虚拟机名称和安放位置自行选择(最小化安装消耗空间较少) 默认磁盘大小即可 自定义硬件 选择centos7的i…

教师管理系统

大概功能: 1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出 数据会保存到 txt 文件里面 姓名:必须是中文 手机号码:必须是11位,必须是数字 效果展示: 代码展示: Teache…

LLaMA详解

LLaMA 进化史 大规模语言模型(Large Language Model, LLM)的快速发展正在以前所未有的速度推动人工智能(AI)技术的进步。 作为这一领域的先行者, Meta在其LLaMA(Large Language Model Meta AI)系列模型上取得了一系列重大突破。 近日, Meta官方正式宣布推出LLaMA-3, 作为继LL…

BAPI_BATCH_CHANGE在更新后不自动更新批次特征

1、问题介绍 在CL03中看到分类特性配置了制造日期字段,并绑定了生产日期字段MCH1~HSDAT MSC2N修改批次的生产日期字段时,自动修改了对应的批次特性 但是通过BAPI:BAPI_BATCH_CHANGE修改生产日期时,并没有更新到批次特性中 2、BAPI…

JVM简介—3.JVM的执行子系统

大纲 1.Class文件结构 2.Class文件格式概述 3.Class文件格式详解 4.字节码指令 5.类的生命周期和初始化 6.类加载的全过程 7.类加载器 8.双亲委派模型 9.栈桢详解 11.方法调用详解 12.基于栈的字节码解释执行引擎 1.Class文件结构 (1)Java跨平台的基础 字节码是各…