BLE 协议之链路层

news2024/11/14 15:14:22

目录

  • 一、前言
  • 二、状态和角色
  • 三、Air Interface Packets
    • 1、Preamble 字段
    • 2、Access Address 字段
      • 2.1 静态地址
      • 2.2 私有地址
    • 3、PDU 字段
      • 3.1 Advertising Channel PDU
        • 3.1.1 Header 字段
        • 3.1.2 Payload 字段
      • 3.2 Data Channel PDU
        • 3.2.1 Header 字段
        • 3.2.2 Payload 字段
    • 4、CRC 字段
  • 四、小结


一、前言

在 BLE 协议之物理层
一文中,我简单介绍了 BLE 的物理层。接下来就是链路层(Link Layer)了,它主要的功能,就是在这些 Physical Channel 上收发数据,与此同时,不可避免的需要控制 RF 收发相关的参数。除此之外,还要做到以下几个功能:

  • 通道共享Physical Layer 仅仅提供了有限的 40 个 Physical Channel,而 BLE 中参与通信的实体的数量,肯定不是这个数量级。 Link Layer 需要解决 Physical Channel 的共享问题
  • 抽象出逻辑链路 :通信是两个实体之间的事情,对这两个实体来说,它们希望看到一条为自己独享的传输通道(就是我们所熟悉的 逻辑链路,Logical Link)。这也是 Link Layer 需要解决的
  • 可靠传输Physical Channel 是不可靠的,任何数据传输都可能由于干扰等问题而损毁、丢失,这对有些应用来说,是接受不了的。因此 Link Layer 需要提供校验、重传等机制,确保数据传输的可靠性

接下来,就看一下链路层都做了哪些事。

二、状态和角色

BLE 协议在 Link Layer 层抽象出 5 种状态 :

  • Standby State待机状态,不发送数据,也不接收数据。该状态可以由任何状态进入,也可以切换到除 Connection State 外的任意一种状态。
  • Advertising State广播状态,可以发送,监听,响应广播通道包,由 Standby State 进入。
  • Scanning State扫描状态,能够监听广播设备发送的广播包,由 Standby State 进入。
  • Initiating State初始化状态,监听指定设备的广播通道包,并且响应广播包,并发送连接请求,以便和广播设备建立连接。当连接成功后, Initiater 和对应的 Advertiser 都会切换到 Connection State。该状态由 Standby State 进入。
  • Connection State :和某个实体建立了单独通道的状态,在通道建立之后,由 Initiating StateAdvertising State 进入。通道断开后,会重新回到 Standby State

进入 Connect State 后,又定义了两种角色 :

  • Master Role :由 Initiating State 进入的 Connect State ,连接成功后,变成了 Master Role
  • Slave Role :由 Advertising State 进入的 Connect State ,连接成功后,变成了 Slave Role

一个状态机在同一时刻有且只能处于一个状态。但是,一个 BLE 设备在同一时刻可以拥有多个独立的状态机!多个状态机并存的情况有限制条件。以下为几种有效的组合状态:

  • Connection + Advertising
  • Connection + Initiating
  • Connection(Master) + Connection(Master)

这也就意味着,BLE 协议栈是支持一主多从这种连接模式的。不过要注意,不支持一从多主模式,即一个从机同时与多个主机相连。并且,一个 BLE 设备在同一时刻不能同时为主机和从机角色。

三、Air Interface Packets

状态和角色定义完成后,剩下的事情就简单了,主要包括两类:

  • 提供某一状态下,和其它实体对应状态之间的数据交换机制 ;
  • 根据上层实体的指令,以及当前的实际情况,负责状态之间的切换 。

BLE 协议中,这些事情是由空中接口数据包(Air Interface Packets)完成的。

Air Interface Packets 定义了一种包的格式,主要用于描述 LE Uncoded PHYadvertising channeldata channel 的通信格式 。

其格式如下:

Core5.4 P2684

下面对各个字段继续详细分析。

1、Preamble 字段

Preamble(前导码): 是 0 和 1 的交替序列:

  • 当物理通道为 LE 1M PHY 时,前导码为 1Byte ;
  • 当物理通道码为 LE 2M PHY 时,前导码为 2Byte 。

2、Access Address 字段

Access Address :对于所有在广播通道发送的数据包,其值都为 0x8E89BED6

一旦链路层处于 Initiating State 状态时,会生成一个新的 Access Address 用于连接。该 Access Address 为一个 4Byte 的值。

蓝牙使用 Access Address 来标识不同的设,Access Address 可以是一个公共的地址,也可以是一个随机的地址 ,无论是哪一种类型的地址,均为 48bits 长度。

  • 公共地址 :官方定义的一些规范,通用的地址,这里不做解释。
  • 随机地址 :可能是静态地址 ,或者是私有地址 。

2.1 静态地址

Core5.4 P2679

静态地址一般都是随机生成的,但是需要满足下面的几点规则:

  • 地址的 两个最高有效位应该等于 1
  • 随机地址部分,至少有一位为 0
  • 随机地址部分,至少有一位为 1

大多数的设备(手机)都是在上电之后,初始化一次静态地址,一旦初始化后,静态地址就不变了;重新上电后,会生成新的静态地址。

2.2 私有地址

Core5.4 P2680

私有地址又分为 :不可解析私有地址和可解析的私有地址。

  1. 不可解析的私有地址

不可解析私有地址,遵守以下生成规则:

  • 地址的两个最高有效位应该等于 0
  • 随机地址部分,至少有一位为 0
  • 随机地址部分,至少有一位为 1
  • 不能与公共地址有冲突

  1. 可解析的私有地址

可解析的私有地址,说直白点就是带加密算法所生成的。设备需要有 Local Identity Resolving Key(IRK) 或者 the Peer Identity Resolving Key (IRK) 这两个密钥,生成 24bit 的号码,

可解析的私有地址,遵守以下规则:

  • 地址的 两个最高有效位为 0 和 1
  • 随机地址部分,至少有一位为 0
  • 随机地址部分,至少有一位为 1

总结最高有效位的前两位,代表了设备地址的类型

3、PDU 字段

前面介绍过,Physical Layer 将通道分为广播通道和数据通道,那么 Link Layer 也随之对应划分了两种 PDU 类型。

PDUPackage Data Unit) :分为两种:

  • 广播通道上传输(Advertising Channel PDU);
  • 数据通道上传输(Data Channel PDU),长度为 2-257 字节。

3.1 Advertising Channel PDU

广播通道 PDU ,包括 Advertising PDUScanning PDUInitiating PDU 三种类型。

广播通道的 PDU ,由 16bit 的数据头和 1-255Byte 的可变大小数据组成。

3.1.1 Header 字段

下面是 16bit 的数据头格式:

PDU Type 有多种,详细参考 core 5.0 P2690


  • ChSel :该位为 1,支持 LE Channel Selection Algorithm ,即 LE通道选择算法 ,反之,不支持。
  • TxAdd :该位为 0,表明 Payload 的 AdvA 字段为公共的;该位为 1,表明 Payload 的 AdvA 字段为随机的。
  • Length :该字段表明了 Payload 的长度
3.1.2 Payload 字段

Payload字段组成如下 :

常见的 Advertising PDU 有 :

  • ADV_IND :该 PDU 用于连接和扫描无定向的广播事件。

  • ADV_DIRECT_IND :该 PDU 用于连接和扫描定向的广播事件。

  • ADV_NONCONN_IND :该 PDU 用于不可连接和不可扫描的非定向广播事件

  • ADV_SCAN_IND :该 PDU 仅可用于可扫描的非定向广播事件

常见的 Scaning PDU 有 :

  • SCAN_REQ :该 PDU 为发送扫描请求
  • SCAN_RSP :该 PDU 包括了广播者的地址和返回的扫描响应数据。

常见的 Initiating PDU 有 :

  • CONNECT_IND :该 PDU 用于建立连接


    综上可见,每一种 PDU Type ,都会定义自己的 Payload 组成。

3.2 Data Channel PDU

数据通道 PDU 的格式,包括 16bit 的 Header ,可变大小的 Payload ,以及可选的消息完整性检查 MIC 字段。

包的格式如下:

3.2.1 Header 字段
  • Header 包括:

  • LLID :该字段标识了这个包为 LL Data PDU 或者 LL Control PDU
  • NESN :下次期望的序列号

3.2.2 Payload 字段

根据 LLID 字段,Data Channel PDU 又分为 LL Data PDULL Control PDU 两种类型。

  • LL Data PDU :该 PDU 用于发送链路层的数据。
    • 当 LLID 为 01b 时,并且 Length=0 时,表示一个 Empty PDU 。
    • 当 LLID 为 10b 时,则 Length 不能设置为 0。
  • LL Control PDU :该 PDU 用于控制链路层的连接。

Opcode 操作码也有多种:

每一种操作码对应不同的数据长度。详细可见 core5.0 P2716

4、CRC 字段

  • CRC 字段:在链路层包的最后,校验所有的 PDU 数据,大小长度为 3Byte 。

如果 PDU 数据加密,则 CRC 将会计算加密后的 PDU 数据。

CRC 算法采用多项式求和的形式进行,感兴趣的可以自行查阅资料了解。

四、小结

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

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

相关文章

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第一篇-原理】

如果想直接制作,请看【第二篇】内容 这次做一个这样的东西,通过在2DRT上实时绘制,生成动态的体积纹理,也就是可以runtime的VDB 设想的文章流程: 对原理进行学习制作体积渲染制作实时绘制 第一篇(本篇)是对“…

Spring MVC 基础 : 文件、cookies的接收 ,REST响应

一、接受文件 在 Spring MVC 中,可以使用 RequestPart 注解来接收文件。这个注解常用于处理复杂的请求,如同时发送 JSON 数据和文件。RequestPart 非常适用于多部分请求(multipart requests),这在单个请求中同时发送文…

法定退休年龄计算器,看看你还有多少年退休?

最近延迟退休上了微博热搜,从2025年开始实行。 分享个法定退休年龄计算器,看看你还有多少年退休? 官方出品的计算器,网站地址 https://si.12333.gov.cn/304647.jhtml 输入出生日期和性别就可以。 当然也可以在微信的城市服务。…

基于asp.net固定资产管理系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

JZ2440开发板——S3C2440的UART

以下内容源于韦东山课程的学习与整理,如有侵权请告知删除。 一、UART硬件简介 UART,全称是“Universal Asynchronous Receiver Transmitter”,即“通用异步收发器”,也就是我们日常说的“串口”。 它在嵌入式中用途非常广泛&…

【计算机网络篇】物理层

本文主要介绍计算机网络第二章节的物理层,文中的内容是我认为的重点内容,并非所有。参考的教材是谢希仁老师编著的《计算机网络》第8版。跟学视频课为河南科技大学郑瑞娟老师所讲计网。 文章目录 🎯一.基本概念及公式 🎃基本概念…

力扣-1035不相交的线(Java详细题解)

题目链接:力扣-1035不相交的线 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 5.如果没有ac打印dp数组 利于debug。 每一…

安全基础学习-AES128加密算法

前言 AES(Advanced Encryption Standard)是对称加密算法的一个标准,主要用于保护电子数据的安全。AES 支持128、192、和256位密钥长度,其中AES-128是最常用的一种,它使用128位(16字节)的密钥进…

充电宝什么品牌比较好?五大性价比高充电宝品牌推荐!

在这个电子设备无处不在的时代,充电宝已成为我们生活中不可或缺的重要配件。无论是通勤、旅行还是户外休闲,充电宝都能为我们的手机、平板等提供及时的电量补充,确保我们时刻保持在线。一个安全可靠的充电宝,不仅能为我们的设备提…

GRU(门控循环单元)的原理与代码实现

1.GRU的原理 1.1重置门和更新门 1.2候选隐藏状态 1.3隐状态 2. GRU的代码实现 #导包 import torch from torch import nn import dltools#加载数据 batch_size, num_steps 32, 35 train_iter, vocab dltools.load_data_time_machine(batch_size, num_steps)#封装函数&…

VScode开发GD32移植(标准库通用),保姆级!!!!!!!

VScode开发GD32移植(标准库通用),保姆级!!!!!!! 文章目录 VScode开发GD32移植(标准库通用),保姆级!!!!!&#…

[产品管理-30]:NPDP新产品开发 - 29 - 产品生命周期管理 - 可持续产品创新

目录 一、可持续开发与可持续创新 可持续开发 可持续创新 可持续开发与可持续创新的关系 二、循环经济 1、循环经济的定义 2、循环经济的起源与发展 3、循环经济的原则 4、循环经济的实践案例 5、循环经济的意义与展望 三、三重底线 1. 财务底线 - 企业。赚钱 2. …

11. DPO 微调示例:根据人类偏好优化LLM大语言模型

在部署大模型之后,我们必然要和微调打交道。现在大模型的微调有非常多的方法,过去的文章中提到的微调方法通常依赖于问题和答案对,标注成本较高。 2023 年所提出的 Direct Preference Optimization(DPO)为我们提供了一…

卡牌抽卡机小程序:市场发展下的创新

今年以来,卡牌成为了行业中的黑马,在国内迅速流行,成为消费者的心头好。小小的卡牌创下了百亿的市场规模,发展前景巨大! 不过,随着卡牌市场的不断增长,市场发展也需要进行创新。线上抽卡机小程…

Yocto - 使用Yocto开发嵌入式Linux系统_02 认识 Yocto 项目

Meeting the Yocto Project 本章向你介绍 Yocto 项目。这里讨论的项目主要概念将贯穿全书。此外,我们还将简要讨论 Yocto 项目的历史、OpenEmbedded、Poky、BitBake、元数据和版本模式。系好安全带,欢迎加入我们的行列! This chapter introdu…

信息安全数学基础(19)同余式的基本概念及一次同余式

一、同余式概念 同余式是数论中的一个基本概念,用于描述两个数在除以某个数时所得的余数相同的情况。具体地,设m是一个正整数,a和b是两个整数,如果a和b除以m的余数相同,则称a和b模m同余,记作a≡b(mod m)。反…

C语言 | Leetcode C语言题解之第421题数组中两个数的最大异或值

题目: 题解: const int HIGH_BIT 30;struct Trie {// 左子树指向表示 0 的子节点struct Trie* left;// 右子树指向表示 1 的子节点struct Trie* right; };struct Trie* createTrie() {struct Trie* ret malloc(sizeof(struct Trie));ret->left re…

SpringBoot 数据库表结构文档生成

官方地址&#xff1a;https://github.com/pingfangushi/screw screw 螺丝钉&#xff0c;支持以下数据库 MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB&#xff08;2016&#xff09; 生产文档支持 html word markdown 开始 添加依赖 <!-- 螺丝钉 --><…

CompletableFuture-详解使用及源码解析

背景 上一篇文章我们看了FutureTask&#xff0c;分析了他的问题&#xff0c;异步编程并不方便。 问题1&#xff1a; FutureTask获取执行结果前&#xff0c;主线程需要通过get()方法一直阻塞等待子线程执行完成call方法&#xff0c;才可以拿到返回结果问题2&#xff1a;如果不…

电竞显示器哪个牌子好

电竞显示器哪个好&#xff1f;你想成为电竞选手吗&#xff1f;显示器很关键&#xff0c;下面我就列举7款市面流行的电竞显示器给大家看看&#xff0c;总有一款适合你。 1.电竞显示器哪个好 - 蚂蚁电竞 ANT255VF电竞显示器 一、产品概述 蚂蚁电竞 ANT255VF电竞显示器是一款专为…