BLE 协议之链路层

目录

  • 一、前言
  • 二、状态和角色
  • 三、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.xdnf.cn/news/145415.html

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

相关文章

YOLO交通目标识别数据集(红绿灯-汽车-自行车-卡车等)

YOLO交通目标识别 数据集 模型 ui界面 ✓图片数量15000,xml和txt标签都有; ✓class:biker,car,pedestrian,trafficLight,trafficLight-Green,trafficLight-GreenLeft, t…

OpenCV特征检测(3)计算图像中每个像素处的特征值和特征向量函数cornerEigenValsAndVecs()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算图像块的特征值和特征向量用于角点检测。 对于每一个像素 p ,函数 cornerEigenValsAndVecs 考虑一个 blockSize blockSize 的邻…

Ferret-UI——于移动用户界面的多模态大规模语言模型

概述 论文地址:https://arxiv.org/abs/2404.05719 移动应用程序已成为我们日常生活中不可或缺的工具,涉及信息搜索、预订和娱乐等多个领域。我们通常会目测屏幕,然后根据自己的目的执行必要的操作。将这一过程自动化可以让用户更轻松地实现…

【秋招笔试-支持在线评测-试读版】9.19小米秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花…

阿贝云评测:免费虚拟主机和免费云服务器体验分享

最近我有幸体验了阿贝云提供的免费虚拟主机和免费云服务器,在这里分享一下我的使用体验。首先我想说的是,阿贝云的服务真的很不错。他们提供的免费虚拟主机性能稳定,速度快,对于刚开始建站的小伙伴来说是一个很好的选择。免费云服…

阿里发布史上最大规模开源全家桶!千问2.5系列发布

实话说,我一直没想明白阿里为什么会在大模型这个赛道,成为中国版的Meta。 扎克伯格被问及为什么要做开源大模型时说,“我们的商业模式并不是靠卖模型赚钱“。显然,Meta没有云平台产品,就算要卖模型赚钱,效…

前端vue-单选按钮的实现

要把name“sex”和value"男" 和 要把name“sex”和value"女"写上,然后在各自的标签内部写上v-model绑定属性。data中定义v-model的绑定值,后面的值是默认选中的男或者女性。

B站前端错误监控实践

前言 从23年开始,我们团队开始前端错误监控方向的开发。经历了一些列的迭代和发展,从监控SDK、上报、数据治理、看板集成、APM自研可视化初步完成了一条完整且适合B站前端监控。 截止目前(2024.08.01),前端监控在B站85%以上的业务线&#xf…

Percona发布开源DBaaS平台;阿里云RDS发布全球多活数据库(GAD);Redshift支持自然语言生成SQL

重要更新 1. 云栖大会于本周四/五在杭州举行,周五上午云栖主论坛阿里云数据库负责人李飞飞将发表《从数据到智能:DataAI驱动的云原生数据库》演讲,另外,还有多场次的数据库专场,感兴趣的可以现场或在线观看&#xff1a…

前端vue-自己封装组件并使用三步走

在components下,创建.vue文件,里面正常写样式什么的,在需要引用的文件内先在script标签内引入在components下创建的组件,再导出处使用,再在templete标签内直接使用自己封装的组件。

SQL - 基础语法

SQL作为一种操作命令集, 以其丰富的功能受到业内人士的广泛欢迎, 成为提升数据库操作效率的保障。SQL Server数据库的应用,能够有效提升数据请求与返回的速度,有效应对复杂任务的处理,是提升工作效率的关键。 由于SQL Servers数据库管理系统…

【学术会议:中国杭州,机器学习和计算机应用面临的新的挑战问题和研究方向】第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)

您的学术研究值得被更多人看到! 在这里,我为您提供精准的会议推荐,包括水利土木工程、计算机科学、地球科学、机械自动化、材料与制造技术、经管金融、人文社科等主流学科相关领域的国际会议。快速的稿件录用和高效的检索服务将确保您的研究…

平价头戴式蓝牙耳机有哪些?四款公认平价性能超强品牌机型推荐

在追求高品质音乐体验的同时,许多消费者希望找到价格亲民的头戴式蓝牙耳机,市场上不乏性能卓越、价格实惠的产品,它们凭借出色的音质、舒适的佩戴体验和可靠的续航能力赢得了用户的青睐,那么在众多的头戴式蓝牙耳机内,…

Android 空气质量刻度

效果 attrs.xml <attr name"textSpace" format"dimension|reference" /><attr name"barSpace" format"dimension|reference" /><attr name"scaleHeight" format"dimension|reference" /><at…

在 Windows 上运行 Vue 项目时解决 ‘NODE_OPTIONS‘ 错误

在 Windows 上运行 Vue 项目时解决 ‘NODE_OPTIONS’ 错误 在 Windows 系统上启动 Vue 项目时&#xff0c;遭遇报错。具体报错信息如下&#xff1a; ‘NODE_OPTIONS‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。这个错误通常意味着 Windows 系统无法识…

SimpleAISearch:C# + DuckDuckGo 实现简单的AI搜索

最近AI搜索很火爆&#xff0c;有Perplexity、秘塔AI、MindSearch、Perplexica、memfree、khoj等等。 在使用大语言模型的过程中&#xff0c;或许你也遇到了这种局限&#xff0c;就是无法获取网上最新的信息&#xff0c;导致回答的内容不是基于最新的信息&#xff0c;为了解决这…

企业微信redirect_uri 与配置的授权完成回调域名不一致

这有几个前提 你先排除下 1、第三方方应用的使用配置里&#xff0c;这一排域名&#xff0c;一定要和你的回调域名一致 2、官方的设置授权配置里》 https://developer.work.weixin.qq.com/document/path/90602 在你还没上线的第三方应用前&#xff01;&#xff01;&#xff0…

FreeRTOS(三)FreeRTOS任务挂起和恢复与中断

在 FreeRTOS 中&#xff0c;任务挂起&#xff08;Suspend&#xff09;和恢复&#xff08;Resume&#xff09;是用于控制任务执行流程的两个重要操作。挂起一个任务会使其暂停执行&#xff0c;而恢复一个任务则使其重新进入调度器的考虑范围&#xff0c;可能在适当的时候被调度执…

开源笔记Joplin本地Docker部署结合内网穿透实现多设备端同步笔记

文章目录 前言1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 前言 本文主要介绍如何在自己的服务器上利用docker搭建 Joplin Server&#xff0c;并对同步进行配置&#xff0c;再结合cpolar内网穿透工具实现公网远程…

基于vue框架的穿戴甲商城管理系统68zwa(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,类别,商品信息 开题报告内容 基于Vue框架的穿戴甲商城管理系统&#xff0c;旨在通过数字化手段优化穿戴甲商家的运营流程&#xff0c;提升用户体验&#xff0c;并推动穿戴甲市场的健康发展。该系统通常包含以下核心功能&#xff1…