首页 > 其他分享 >BLE 的连接与断开

BLE 的连接与断开

时间:2024-03-26 20:34:01浏览次数:19  
标签:断开 master BLE 数据 连接 通道

初始化连接是在广播通道上建立的

连接建立

当设备接收到可以连接的广播(ADV_IND或者ADV_DIRECT_IND)后,则可以发起建立连接请求,连接请求数据包是通过发送CONNECT_REQ的PDU来实现的,CONNECT_REQ的PDU如下所示

连接参数

建立连接后,两个设备会在相等的连接间隔之间交换数据,每一次的数据交换称之为连接事件(connection event),数据的发送和接收都是通过连接事件完成的,在连接事件之外,BLE设备处于休眠状态,因此进一步降低了功耗。

广播的设备以一定的广播间隔周期性的广播数据,类似的,设备建立连接后,两个设备会以相等的时间间隔交换数据,这个间隔成为连接间隔(Connection interval)。

 

 

LL Data中参数解释:

1. AA:AccessAddress,链路层的接入地址

2. CRCInit:初始化CRC的值;

3. 和发送数据窗口相关的参数:WinSize和WinOffset

4. 连接参数:

Interval:

  • Connection interval = sleep + connection event
  • master和slaver数据交换的间隔,当没有应用数据交互,两个设备链路层仍会交换数据(空PDU)来维持连接,当有应用数据时,数据通过连接间隔中的连接事件发送和接收.
  • 范围是,连接间隔是1.25ms的整数倍,范围是 6 -3200,即7.5ms– 4s

Latency:

  • 即Slave latency
  • master每个tx数据,slave接到后都要回复,否则连接可能会被认为断开,Slave  latency则定义了slave在没有数据要发的情况下,可以跳过一定数目的连接事件(Connection events), 在这些连接事件中不必回复Master(主设备)的包(空包),而不会被认为连接断开
  • 取值范围是 0 - ((connSupervisionTimeout /(connInterval*2)) - 1),并且要小于500;

timeout:

  • 即Connection supervision timeout,
  • 如果双方设备在超过timeout时间后,没有数据交互,则连接被认为已断开。
  • 常用于异常断开流程,由于链路异常,BLE设备之间没有了数据,则在timeout时间到后,连接被断开,而不会一直保持,
  • 10ms的整数倍,取值范围是 10 – 3200,即100ms – 32s,并且要大于(1+ connSlaveLatency) * connInterval * 2

例如 Slave latency = 2 的情况下,可以忽略master的两个包,但第三个包则必须回应,否则,连接有可能被断开

这三个参数都是由master在发起连接时设定的,在连接建立后,slave可以发起更新连接参数的请求。

 

这几个参数是BLE连接中重要参数,直接决定了速率和异常情况的处理:

  • Connection interval决定了传输速率,越小,发送数据越快,但功耗也会越大
  • Slave Latency为0,数据发送速度回提高,增大,则会减小功耗
  • Timeout:异常情况时能否尽快断开。

 

6. 调频参数

在CONNECT_REQPDU包中,还有两个重要的字段ChM和Hop。

  • ChannelMap:指出了在连接中使用的数据通道
  • HopIncrement::用于通道选择算法的一个5-16的随机值

那么BLE的跳频就是根据这几个参数协商出来的。

看到广播数据在首先37/38/39通道上发送(由于sniffer只监听37通道,其他通道上的数据没有显示),当连接建立后,master和slave分别经历了0x0C,0x18,0x24,0x0B,0x17,0x23等几个通道,并且后续数据交互扔在不断切换通道,即跳频。(参考Version 4.2 [Vol 6, Part B] 4.5.8)

在建立连接时,master会在连接的PDU里,指出哪些通道使用的通道,用于连接,哪些通道是不用于连接的通道,这就是channel map。

slave在接到这样的数据包后,双方根据channel selection algorithm(蓝牙规范定义)计算出data channel,如下:

根据channelmap和hop的值,双方就可以协商出数据通道,在后续通信中,双方根据

channel = (curr_channel + hop) mod 37

继续实现跳频,可以看到当前hop是0x0D当前在0x1A通道上,则下一跳会到02通道上,再下一跳会跳到0x0F通道上。

Spec 5.0中增加了Channel Selection Algorithm #2通道选择算法。

 

标签:断开,master,BLE,数据,连接,通道
From: https://www.cnblogs.com/god-of-death/p/18097509

相关文章

  • 第三十七天:Ansible playbook基础
    一、playbook介绍1、Playbook组成一个playbook(剧本)文件是一个YAML语言编写的文本文件通常一个playbook只包括一个play一个play的主要包括两部分:主机和tasks.即实现在指定一组主机上执行一个tasks定义好的任务列表。一个tasks中可以有一个或多个task......
  • Selenium报错ElementNotInteractableException元素不可交互,该如何解决?
    简介在使用Selenium进行Web自动化测试时,我们可能会遇到各种异常情况。其中之一就是ElementNotInteractableException异常,这通常意味着在尝试与页面元素交互时出现了问题。本文将详细介绍这个异常的原因、可能的解决方法,并提供示例代码来帮助你更好地理解和处理这种情况。......
  • 报错“由于目标机器积极拒绝,无法连接”怎么解决?
    原文链接:https://www.php.cn/faq/192504.html在我们有时连接sqlserver数据库时,通过本地端的数据库去连接别的机器的数据库,或者是服务器上的数据库,一般会出现“由于目标计算机积极拒绝,无法连接”的字样,那到底是什么原因呢?怎么解决?1、如果出现这样的情况,首先我们要排查对方的机器i......
  • Xshell连接Vmware中的CentOs本地虚拟机
    1、准备工作:本地安装Vmware+Centos2、下载Xshell免费版(仅供个人/学校学习使用):https://www.xshell.com/zh/free-for-home-school/3、网络配置1、点击Vmware“编辑”-“虚拟网络编辑器”,点击“更改设置”,按图选中“VMnet8”然后取消下面的选中。 2、进入虚拟机,编辑文件:/etc/s......
  • Web举例:防火墙二层,上下行连接交换机的主备备份组网
    Web举例:防火墙二层,上下行连接交换机的主备备份组网介绍了业务接口工作在二层,上下行连接交换机的主备备份组网的Web举例。组网需求如图1所示,两台FW的业务接口都工作在二层,上下行分别连接交换机。FW的上下行业务接口都加入到VLAN10和VLAN20中。现在希望两台FW以主备备份方......
  • Double类型数值相加导致精度缺失问题
    问题描述doublev1=13.01;for(inti=0;i<10;i++){v1+=13;System.out.println(v1);}解决方案doublev1=4.5;doublev2=4.55;BigDecimalb1=newBigDecimal(Double.toString(v1));BigDecimalb2=new......
  • 基于 Vue3 + Element-plus 封装的 Table 组件
    项目信息项目名称:vue3-xmw-table预览地址:点击预览Github:vue3-element-table使用方法根目录下执行npmivue3-xmw-table命令npmivue3-xmw-table全局挂载组件import{createApp}from'vue'importAppfrom'./App.vue'importXmwtablefrom'vue3-xmw-table'......
  • 问题解答:ABAP 关键字 ANY TABLE 的使用场合深入剖析
    本教程下面这篇讲述ABAP动态编程的文章,有朋友提问:127.答网友疑问:ABAPFunctionModule如何支持内表结构不确定的动态输入参数汪老师,我这边定义了一个ANYTABLE,但是报错,说是没有这个类型,我在SE38定义的时候也报错,只有用FIELD-symbols定义才不会报错,所以就很好奇为什......
  • 前端实现导出table表格为Excel、CSV
    js实现导出table表格为Exceljquery.table2excel.js要基于jquery的基础上才能使用,是一款专门导出excel的插件jquery-3.3.1.js下载http://www.jq22.com/jquery-info122代码如下:<!DOCTYPEhtml><html><head><metacharset="utf-8"><metaname="viewpor......
  • robotramework 连接数据库之PostgreSQL
    【情况描述】: 我在创建数据保存的时候,需要用到某个名称,而参数是这个名称对应的id,所以线要获取这个id,如下图数据库: --#  方案过程如下:#1、先导入库,本次我是用的是 PostgreSQL这个数据库,所以先安装该库;安装:pip install  psycopg2 2、编写代码; 3、获取该i......