BLE连接通信

news2024/11/23 22:59:17

// BLE连接有关的技术分析

前言

本文的论述流程:

  1. 将传统的连接通信与广播进行对比,指出其不足
  2. 说明BLE是如何制定规范解决这些问题
  3. 写出完整的连接通信流程,并对能影响BLE连接通信的参数进行分析

1 连接通信的不足

  1. 保持连接是一个相当消耗资源的过程,特别是在没有数据传输的时候
  2. 在链路层的hopping和信道白名单的切换会让底层产生很长时间的连接延迟
  3. 连接并不稳定。和广播的方式一样,存在超时和其他因素导致的断连

2 BLE connection

  1. 在制定BLE规范时,极大的简化了连接的建立过程,使连接速度可以达到毫秒级。
  2. 为了节省功耗,也调整了跳频的策略。
  3. BLE面向连接的通信可以传输更多的数据,且几乎没有额外的代价。
    本文将接着分析和面向连接的通信技术,包括连接的建立和断开、BLE跳频(Hopping)技术、Link Layer的应答、重传、流控等等。

3 连接过程

遇事不决来张图
在这里插入图片描述

3.1 connection setup

创建连接

定义了两种Link Layer角色:Master和Slave。Master是连接的发布方(Initiator),可以决定和连接有关的参数。Slave是连接的发起(Advertiser),可以请求或建议连接参数,但无法决定。
方式一:
Advertiser(发起者)在广播信道上发送CONNECT_IND PDU,Initiator(发布者)收到后向从结点发送AUX_CONNECT_RSP PDU,链路层(LL)即进入连接状态(connection state)。此过程两个方向都使用的是LE 1M PHY。
方式二:
Slave在广播信道上发送AUX_CONNECT_REQ,Master收到后向从结点发送AUX_CONNECT_RSP PDU。此过程两个方向使用相同的PHY(1M / 2M / S2 / S8)即可,且可以用PHY Update更改。

AUX_CONNECT_REQ携带了可决定后续“通信时序”的参数,例如双方在哪一个时间点,哪一个Physical Channel收发数据等。Initiator发送AUX_CONNECT_REQ后变为Master,Advertiser在收到AUX_CONNECT_REQ后变为Slave
AUX_CONNECT_REQ格式:

InitA (6)AdvA (6)LL Data (22)
master addslave addAA(4) CRCInit(3) WinSize(1) WinOffset(2) Interval(2) Latency(2) Timeout(2) ChM(5) Hop(5) SCA(3)
  • CRCInit,用于CRC计算的一个初始值,由Link Layer随机生成。
  • WinSize和WinOffset,用于决定连接双方收发数据的时间窗口
  • Latency和Timeout,和连接超时、自动断开有关
  • ChM的全称是Channel map,用于标识当前使用和未使用的Physical Channel
建立连接

当Slave收到数据包时才是建立了连接。
从Master的视角看,当它发出CONNECT_REQ后,会在1.25 ms + transmitWindowOffset 到 1.25ms + transmitWindowOffset + transmitWindowSize(时间窗口)之间,发送第一个packet
transmitWindowSize必须是1.25ms的倍数,最小值是1.25 ms,最大值是(conn_int - 1.25 ms),但不能超过10ms
建立连接后,Slave不得向已连接设备发送连接请求。若Master收到了则会忽略。

3.2 connection event

一个event对应一个传输周期,由conn_int确定

发送数据

双方按照AUX_CONNECT_REQ所给出的约定,定时到切换到某一个Physical Channel上,按照M->S然后S->M的顺序收发数据,直至发送结束后连接断开或者一个传输周期结束。

Master在一个连接事件内至少发送一次数据包。Slave则可以选择在n个链连接事件内至少发送一次数据包,这由参数connSlaveLatency决定,connSlaveLatency在0到((connSupervisionTimeout / (connInterval*2)) - 1)之间,并且不能大于500。

数据格式叫Data Channel PDU,Data Channel PDU有两类,一类是数据,称作LL Data PDU;另一类是控制信息,称作LL Control PDU。

Header(16 bits)Payload(Variable size)MIC(32 bits)
LLID(2) NESN(1) SN(1) MD(1) RFU(3) Length(8)[0~255]/
  • LLID用于区分PDU的类型
  • NESN(Next Expected Sequence Number)和SN(Sequence Number),用于数据传输过程中的应答和流控
  • MD(More Data),用于连接的关闭(或保持)
  • RFU(Reserved for Future Use)
  • Length,有效数据的长度(Payload+MIC),只有8bits,因此Link Layer所能传输的最大数据是255。如果L2CAP需要传输更多的数据,需要分包之后传输
自动确认机制

当设备B接收到一个packet的时候,会将该packet的NESN和本地的sn比较:

  1. 如果相同,说明是设备A发来的NAK packet,即请求重发,则将旧的packet重新发送
  2. 如果不同,说明是设备A发来的ACK packet,即数据被正确接收,则将本地的sn加1,接着发送新的packet
连接的控制与管理

连接建立之后,Master或者Slave可以借助Link Layer Control Protocol (LLCP),通过LL Control PDU,对连接进行管理控制
同时在LL Data PDU的Header中,有NESN和SN两个标记,利用它们,可以很轻松的在Link Layer实现应答、重传、流控等机制

  • sn用于标识设备A发送出去的packets
  • nesn是设备B用来应答设备A发送的packet
连接超时及断开
  1. 预期内的、主动断开,会走Termination Procedure
  2. 非预期的原因导致的超时断开,如距离超出、遭受严重的干扰、突然断电等,会走超时机制
    i 建立连接中的超时
    ii 连接成功后的超时

3.3 连接通信参数

tIFS:每一组数据包发送应答之间存在发送间隔,T_IFS被设置为150 µs
tC:一个连接事件中,连续发送数据包的时间
tF_Slave:Slave的连接容量
将每个个体时间乘以得到通用连接事件中从机消耗的能量得到总耗能:
Ec = Epre + Epost + (2n − 1)EIFS + ∑ 1 n \sum_1^n 1n(EMi + ESi)

参考资料:
BLEach Exploiting the Full Potential of IPv6 over BLE in Constrained Embedded IoT Devices
Bluetooth core v5.4 vol6 part B
蜗窝科技,www.wowotech.net

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

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

相关文章

代码随想录算法训练营15期 Day 2 | 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II 、总结

977.有序数组的平方 题目建议&#xff1a; 本题关键在于理解双指针思想 题目链接&#xff1a;力扣 思路一&#xff1a;暴力解算&#xff0c;直接将所有元素变成一个平方&#xff0c;然后进行排序。 class Solution { public:vector<int> sortedSquares(vector<int&g…

maven常用插件详解

官网讲解&#xff1a;https://maven.apache.org/plugins/ Maven 实际上是一个依赖插件执行的框架&#xff0c;它执行的每个任务实际上都由插件完成的。Maven 的核心发布包&#xff08;jar&#xff09;中并不包含任何 Maven 插件&#xff0c;它们以独立构件的形式存在&#xff…

数据翻译的代码辅助插件,一个注解搞定,减少30%SQL代码量

一、开源项目简介 Easy Trans是一款用于做数据翻译的代码辅助插件&#xff0c;利用MyBatis Plus/JPA/BeetlSQL 等ORM框架的能力自动查表&#xff0c;让开发者可以快速的把ID/字典码 翻译为前端需要展示的数据。 二、开源协议 使用Apache-2.0开源协议 三、界面展示 四、功能概…

CTF入门指南

何为CTF &#xff1f; CTF&#xff08;Capture The Flag&#xff09;夺旗比赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…

文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及码源(含pyltp安装使用教程)

文档关键信息提取形成知识图谱&#xff1a;基于NLP算法提取文本内容的关键信息生成信息图谱&#xff08;含pyltp安装使用教程&#xff09; 1. 项目介绍 目标&#xff1a;输入一篇文档&#xff0c;将文档进行关键信息提取&#xff0c;进行结构化&#xff0c;并最终组织成图谱组…

Cisco® Catalyst® 8000V 边缘软件 (Catalyst 8000V) 17.11.1a 发布 - 虚拟路由器

Cisco Catalyst 8000v Edge Software, IOS XE Release Dublin-17.11.1a ED 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-catalyst-8000v/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Cisco Catalyst 8000V 边…

Spark集群的运行基本流程是怎样的?

Spark集群的运行架构 Spark是基于内存计算的大数据并行计算框架&#xff0c;比MapReduce计算框架具有更高的实时性&#xff0c;同时具有高效容错性和可伸缩性&#xff0c;在学习Spark操作之前&#xff0c;首先介绍Spark运行架构&#xff0c;如图所示。 在上图中&#xff0c;Sp…

asp网站Repuest获取Http网络读卡器刷卡数据Response回应驱动读卡器显示响声

RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) 中文液晶显示http协议网络读卡器是一款能利用现有的计算机网络&#xff0c;不需要独立布线就可以组成一个高性能低成本实时联网ID卡管理系统的端终设备&#xff0c;刷卡后即时向远程计算机传…

快递业的最新发展趋势:2023年市场预测

快递业是随着电子商务崛起而迅速发展的行业之一。自从互联网取代了线下商业模式&#xff0c;电子商务的发展成为了现代零售业的主要趋势&#xff0c;而快递业则变得越来越重要和不可或缺。未来的快递业需要应对许多挑战和机遇。 在2023年&#xff0c;快递业将进一步走向数字化、…

淘宝商品分类详情API接口

淘宝商品分类详情API接口&#xff0c;是指淘宝开放平台提供的接口&#xff0c;用于获取淘宝商品分类的详细信息&#xff0c;包括分类ID、分类名称、父级分类ID、子分类ID等。 具体使用方法如下&#xff1a; 获取淘宝开放平台的API请求地址和appkey等必要信息&#xff1b; 调用…

云南省地矿测绘院1:500地形免像控项目分享

无人机航测系统的出现&#xff0c;将测绘项目时间由“年”缩短到“月”&#xff0c;但布设相控仍然是一个麻烦而辛苦的工作。尤其是在野外人力难以到达的地方&#xff0c;相控布设更是占据项目时间的绝大部分&#xff0c;野外复杂多变的环境也给作业人员带来很多危险。 所以&a…

数据结构第四天: Complete Binary Search Tree 【搜索二叉树,完全二叉树】

二叉搜索树 bst 被递归地定义为具有以下属性的二叉树节点的左子树仅包含键小于节点键的节点 a 的右子树节点只包含键大于或等于节点键的节点 左右子树也必须是二叉搜索树 完全二叉树cbt是一棵完全充满可能异常的树从左到右填充的底层现在给定一系列不同的非负整数键&#xff0c…

5.25黄金是延续下跌还是强势反弹?今日如何布局

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周四(5月25日)亚市盘中&#xff0c;现报1957.89美元/盎司&#xff0c;昨日最高触及1985.28美元/盎司&#xff0c;最低触及1956.68美元/盎司。周三公布的会议纪要显示…

web自动化测试进阶篇03 ———自动化并发测试应用

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

选择小程序第三方开发框架时,需要考虑哪些因素?

在选择小程序第三方开发框架时&#xff0c;我们需要综合考虑开发者技术栈、项目需求和目标平台等因素。Taro 是一个多端统一开发框架&#xff0c;适合需要覆盖多个平台的开发者&#xff0c;最终的选择应该基于个人的技术背景和项目需求&#xff0c;同时也要关注框架的稳定性、社…

如何解决接口幂等性问题?

什么是幂等性&#xff1f; 参考地址&#xff1a;解决幂等问题 概念&#xff1a; 一个接口&#xff0c;不管我调多少次&#xff0c;只要参数不变&#xff0c;结果也应该不变。 但是在实际工作中&#xff0c;幂等性一般分为两种&#xff1a; 请求幂等&#xff1a;每次请求&…

Linux的学习

学习笔记&#xff0c;只写重点&#xff0c;不连贯&#xff0c;写得很水。 视频from:2021韩顺平 一周学会Linux。学习地址&#xff1a;https://www.bilibili.com/video/BV1Sv411r7vd 老师说明&#xff1a;后面我们的Redis、ginx包括项目都会使用到Linux,也是和我讲解的Linux版本…

开源网安受邀参加2023澳门万讯论坛,引领软件安全领域国产化替代浪潮

近日&#xff0c;2023万讯论坛在澳门成功举办。本次论坛由万讯电脑科技主办&#xff0c;旨在为澳门引入更多具有市场竞争力且自主研发的国内科技产品。开源网安作为拥有软件安全领域全链条产品的厂商&#xff0c;受邀参加本次论坛并分享软件安全领域国产化替代方案。 随着全球通…

Typescript ?问号的几种不同用法

1、作为Typescript 接口属性数量不确定时的定义方法 如果使用接口来限定了变量或者形参, 那么在给变量或者形参赋值的时候, 赋予的值就必须和接口限定的一模一样才可以, 多一个或者少一个都不行。 但是开发中我们往往可能会遇到少一个或者多一个的场景。 &#xff08;1&#…

Springboot +spring security,如何解决Session共享问题

一.简介 前一篇文章的所有的会话都是基于单机&#xff0c;如果服务部署在集群中&#xff0c;就会出现session失效的问题&#xff0c;为什么在集群环境下会出现session失效呢&#xff1f; 二.集群环境下session失效的原因 当用户第一次访问项目时&#xff0c;是机器1处理了登…