【BLE基础知识】--Slave latency设置流程及空中包解析

1、Slave latency基本概念

当BLE从设备对耗电量要求较高时,若需要节省耗电量,则可以通过设置Slave Latency参数来减少BLE从设备的耗电。

Slave Latency:允许Slave(从设备)在没有数据要发的情况下,跳过一定数目的连接事件,在这些连接事件中不必回复Master(主设备)的包

Slave在这些跳过的期间RX功能也不会开启(实测NXP KW38芯片),即不会收到Master的蓝牙数据帧故Slave在这些跳过的期间,既不接收,也不发送,就能更加省电

举例:

当Slave latency=0时,主设备每次发送数据,从设备都会响应,具体如下图:

当Slave latency=3时,表示主设备发送4次数据,从设备响应1次。具体如下图:

蓝牙5.1协议栈中规定Slave latency参数的取值范围是0x0000 ~ 0x01F3(即0 ~ 499),具体如下表第三个参数:

标准除了要求Slave latency的取值范围为0 ~ 499外,另外还要求Slave latency的取值范围为:

0 ~ ((connSupervisionTimeout / (connIntervalMax*2)) -1).

反之,connSupervisionTimeout要大于2 * Interval_Max * (Latency + 1)。

蓝牙5.1协议栈标准里有一句话,如下:

The connection slave latency used before the instant is known as connSlaveLatencyOLD.

The connection slave latency contained in the LL_CONNECTION_UPDATE_IND PDU and used at the instant and after, is known as connSlaveLatencyNEW.

从这句话可知, slave latency 生效的时刻是通过LL_CONNECTION_UPDATE_IND PDU的intstant参数来约定的。即在约定的Instant(EventCount)时刻及之后,采用新的Slave latency。

2、通信过程中,Slave latency切换流程

2.1 整体流程

根据蓝牙协议5.1.7章节Connection Parameters Request procedure流程,可进行蓝牙相关连接参数的更新,主要包含connInterval, connSlaveLatency and connSupervisionTimeout等几个参数的设置。通过LL_CONNECTION_PARAM_REQ、LL_CONNECTION_PARAM_RSP、LL_CONNECTION_UPDATE_IND等PDU进行参数设置。

大体流程为:

2.2 实际数据解析

整体流程结合数据流解析如下图:

2.2.1 步骤2

上图步骤2,Master通过LL_CONNECTION_PARAM_REQ请求Slave更改Slave latency为3(同时包含connInterval, connSupervisionTimeout等参数),具体数据流截图如下:

2.2.2 步骤3

上图步骤3,Slave通过LL_CONNECTION_PARAM_RSP响应Master返回的参数与LL_CONNECTION_PARAM_REQ命令相同,Slave latency为3(同时包含connInterval, connSupervisionTimeout等参数)。具体数据流截图如下:

2.2.3 步骤4

上图步骤4,Master通过LL_CONNECTION_UPDATE_IND请求Slave表示双方已完成Slave latency的设置协商,并通过该PUD中的Instant参数约定在某个EventCount之后,开始生效新的Slave latency具体数据流截图如下:

2.2.4 步骤5-10

等待新的slave latency生效,在这期间按照旧的slave latency进行通信

2.2.5 步骤11

在步骤4中,通过Instant参数,约定在该EventCount(如上图示例的9612)之后,开始生效新的Slave latency实际测试发现,在此EventCount的通信交互中,Slave一定会响应。

2.2.6 步骤12及之后

新的Slave latency=3生效,从设备4 次响应1次主设备的请求,以达到节电的效果。

3、总结

1) Slave Latency:允许Slave(从设备)在没有数据要发的情况下,跳过一定数目的连接事件,在这些连接事件中不必回复Master(主设备)的包假设Slave latency为3,则表示主设备发送4次请求,从设备才响应1次。

2但若从设备本身有数据要立即发送,则可以搭载在最近的连接事件中发送,无需等到Slave latency到达才发送。

3) 通过LL_CONNECTION_PARAM_REQLL_CONNECTION_PARAM_RSPLL_CONNECTION_UPDATE_IND等PDU来进行参数Slave latency设置。

4) 上面命令中,同时进行connInterval, connSlaveLatency and connSupervisionTimeout等三个参数的设置。

5) 大体设置流程如下图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SCAU:分期还款(加强版)

分期还款(加强版) Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: G;GCC;VC 描述 从银行贷款金额为d,准备每月还款额为p,月利率为r。请编写程序输入这三个数值,计算并输出多少个月能够还清贷款,输出时保留1位小…

【iOS控件】—— UIPickerView的使用

【iOS控件】—— UIPickerView的使用 一. 简述UIPickerView1. 什么是UIPickerView2. UIPickerView遵守的协议 二. 测试Demo三. 总结 一. 简述UIPickerView 先看一下UIPickerView的效果图: 1. 什么是UIPickerView UIPickerView是iOS平台上的一个用户界面元素&am…

百马百担c语言编程

以下是一个百马百担问题的C语言编程实现&#xff1a; #include <stdio.h>int main() { int n, m, k; scanf("%d%d%d", &n, &m, &k); int a[n], b[m], c[k]; for (int i 0; i < n; i) { scanf("%d", &a[i]);…

CSS——复合选择器、CSS特性、背景属性、显示模式

1、复合选择器 复合选择器&#xff1a;由两个或多个基础选择器&#xff0c;通过不同的方式组合而成。 作用&#xff1a;更准确、更高效的选择目标元素&#xff08;标签&#xff09; 1.1 后代选择器 后代选择器&#xff1a;选中某元素的后代元素 选择器写法&#xff1a;父选…

使用WPF设计时绑定加快开发速度

知识来源&#xff1a;B站up主 香辣恐龙蛋 第一步 第二步

小心处理 C++ 静态变量中的陷阱

小心处理 C 静态变量中的陷阱 函数中的 static 变量 static 变量的作用 C 中 static 关键字的最后一个用途是在函数内创建局部变量&#xff0c;这些变量在其作用域内退出和进入时保持其值。函数内的 static 变量类似于只能从该函数访问的全局变量。static 变量的一个常见用途…

【合集】从Java基础到JavaWeb网络开发——Java基础文章合集 JavaWeb网络开发文章合集

前言 本篇博客是Java开发的合集文章&#xff0c;内容涵盖了Java基础相关的博客&#xff0c;JavaWeb开发相关的博客&#xff0c;并且给出了小项目的案例。 目录 前言引出Java基础1、基本数据类型2、数组和集合List3、运算符4、逻辑控制5、IO流6、面向对象初步7、数据库入门8、J…

微服务实战系列之EhCache

前言 书接前文&#xff0c;继续深耕。上一篇博主对Redis进行了入门级介绍&#xff0c;大体知道了Redis可以干什么以及怎么使用它。 今日博主继续带着大家学习如何使用EhCache&#xff0c;这是一款基于Java的缓存框架。 微服务实战系列之Redis微服务实战系列之Cache微服务实战…

uni-app 微信小程序之自定义navigationBar顶部导航栏

文章目录 1. 实现效果2. App.vue3. pages.json 配置自定义4. 顶部导航栏 使用 微信小程序自定义 navigationBar 顶部导航栏&#xff0c;兼容适配所有机型 1. 实现效果 2. App.vue 在App.vue 中&#xff0c;设置获取的 StatusBar&#xff0c;CustomBar 高度&#xff08;实现适配…

FL Studio 21.2.1.3859中文破解激活版2024免费下载安装图文教程

FL Studio 21.2.1.3859中文破解激活版是我见过更新迭代最快的宿主软件&#xff0c;没有之一。FL Studio12、FL Studio20、FL Studio21等等。有时甚至我刚刚下载好了最新版本&#xff0c;熟悉了新版本一些好用的操作&#xff0c;Fl Studio就又推出了更新的版本&#xff0c;而且F…

【附代码】Python函数性能测试(perfplot)

文章目录 相关文献测试电脑配置展开元素是list的list在numpy数组上映射函数的最有效方法数组numpy中唯一值的最有效频率计数方法反转numpy数组的最有效方法如何向 numpy 数组添加额外的列将 numpy 矩阵初始化为零或一以外的值 作者&#xff1a;小猪快跑 基础数学&计算数学&…

P2 Linux系统目录结构

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f6f8;推荐专…

【STL】手撕 string类

目录 1&#xff0c;string类框架 2&#xff0c;string&#xff08;构造&#xff09; 3&#xff0c;~string&#xff08;析构&#xff09; 4&#xff0c;swap&#xff08;交换&#xff09; 5&#xff0c;string&#xff08;拷贝构造&#xff09; 1&#xff0c;常规法 2&a…

【数据结构】AOV网与拓扑排序

一.AOV网的概念&#xff08;Activity On Vertex Network&#xff09; 在一个表示工程的有向图中&#xff0c;用顶点表示活动&#xff0c;用弧表示活动之间的优先关系。这样的有向图为顶点表示活动的网&#xff0c;我们称为AOV网&#xff08;Activity On Vertex Network&#xf…

【系统运维】Centos部署Haproxy+Keepalived+RabbitMQ高可用集群

1.RabbitMQ高可用集群方案 &#xff08;1&#xff09;RabbitMQ搭建集群的作用&#xff1a;提高可用性、可靠性和处理能力&#xff0c;确保系统提供高效的消息传递服务 高可用性&#xff1a;通过集群&#xff0c;即使其中一个节点发生故障&#xff0c;其他节点仍然可以继续提供…

C++ 学习笔记——C++纯虚函数和抽象类

C纯虚函数 什么是纯虚函数 1&#xff0c;纯虚函数只有函数名、参数、返回值类型。 2&#xff0c;纯虚函数的定义是在函数句首使用 virtual 关键字修饰&#xff0c;并且在句末增加 “ 0”。 virtual void funtion() 0;3&#xff0c;纯虚函数只有声明&#xff0c;基类可以存…

LLM 开发模式 RAG,MRKL,Re-Act,Plan-Execute 模式对比

本心、输入输出、结果 文章目录 LLM 开发模式 RAG&#xff0c;MRKL&#xff0c;Re-Act&#xff0c;Plan-Execute 模式对比前言RAG、MRKL、Re-Act和Plan-Execute模式的一些对比花有重开日&#xff0c;人无再少年实践是检验真理的唯一标准 LLM 开发模式 RAG&#xff0c;MRKL&…

JVM:强软弱虚四种引用

下面依次解释五种引用 一、强引用 把一个对象赋值给一个引用变量&#xff0c;就相当于把这个对象的强引用放到变量中。 只要对象可达&#xff0c; GC一定不会回收这个对象&#xff08;A1&#xff09; 二、软引用 当一个对象&#xff08;A2&#xff09;没有强引用时&#xff…

图文并茂教你模拟302接口,实现js中axios,fetch遇到302状态码后跳转的多种方案axios,fetch成功响应拦截302

前情提要 日常工作中&#xff0c;我们会使用fetch,或者axios发起请求来获取数据&#xff0c;但是当我们遇到一些特殊需求的时候&#xff0c;使用不同库之后&#xff0c;会得到不同的结果&#xff0c;例如302,308的状态码&#xff0c;那么我们应该怎么处理这两种情况呢&#xf…