【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.mzph.cn/news/193812.shtml

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

相关文章

如何在线给官网搭建一个帮助文档?

在数字化时代,帮助文档已成为官网不可或缺的一部分。然而,传统的帮助文档往往只是简单地罗列问题和答案,缺乏互动性和用户体验。那么,如何在线给官网搭建一个富有创意且用户友好的帮助文档呢? | 一、打造沉浸式体验 传…

C/C++学生选课/排课系统[2023-12-3]

问题描述:根据我校自动化专业的部分必修及选修课信 息,设计一个学生选课/排课系统。 基本要求: 1、从文件读入课程信息; 2、从键盘输入拟添加的选修课信息; 3、删除已选的选修课(1门或多门) ; 4、输出已…

手写实现一个动态代理框架

手写实现一个动态代理框架 什么是代理模式什么是动态代理动态代理中的编译、类加载与对象实例化手写实现一个动态代理框架实现细节DynamicProxyHandlerProxy生成代码写入代码到磁盘文件调用编译器进行编译调用类加载器进行类加载反射实例化删除前面生成的java文件和class文件 C…

Optional类使用总结

1.1、Optional类介绍 在我们平常开发过程中,如果程序逻辑考虑不全,就有可能导致空指针异常NullPointerException,也就是我们常说的NPE。 出现空指针异常的根本原因,就是我们在使用某个对象的时候,没有判断这个对象是…

全网关键词采集,免费关键词采集软件使用方法

网站的SEO优化已经成为企业提升在线可见性的不二选择。而关键词的选择和使用则是SEO优化的核心。本文将专心分享关键词采集的正确用法,助您在SEO的道路上掌握正确的方向。 关键词采集:SEO的基础 让我们明确关键词采集的重要性。在搜索引擎的世界里&…

Python生产者消费者模型

额滴名片儿 🎈 博主:一只程序猿子 🎈 博客主页:一只程序猿子 博客主页 🎈 个人介绍:爱好(bushi)编程! 🎈 创作不易:如喜欢麻烦您点个👍或者点个⭐&#xff01…

【tower-boot 系列】redis集成

redis 介绍 Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存&…

leetcode:468. 验证IP地址

验证IP地址 中等 249 相关企业 给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 “IPv4” ;如果是有效的 IPv6 地址,返回 “IPv6” ;如果不是上述类型的 IP 地址,返回 “Neither” 。 有效的IPv4地址 是 “x1.x…

【蓝桥杯选拔赛真题73】Scratch烟花特效 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析

目录 scratch烟花特效 一、题目要求 编程实现 二、案例分析 1、角色分析

组件的props属性

目录 1:使用props的作用: 2:props自定义属性的用法: 3:集合v-bind使用自定义属性: 4:props自定义属性是只读的: 5:default默认值: 6:type值类…

ffmpeg 同时采集麦克风和摄像头并录制文件

命令 ffmpeg -f dshow -i video"Integrated Webcam" -f dshow -i audio"麦克风 (Realtek(R) Audio)" -vcodec libx264 -acodec mp3 1.mkv ffmpeg -f dshow -i video"Integrated Webcam" -f dshow -i audio"麦克风 (Realtek(R) Audio)&qu…

LeetCode哈希表:最长和谐子序列

LeetCode:哈希表:最长和谐子序列 题目描述 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的…

(Python) 特殊变量

整体 内置模块 name 用到的模块 对象 函数

掌握视频剪辑技巧:批量置入视频封面,提升视频品质

在当今数字化时代,视频已成为生活的重要组成部分。无论是观看电影、电视剧、综艺节目,还是分享个人生活、工作成果,视频都以其独特的魅力吸引着大众的视线。视频封面是视频内容的缩影,是观众对视频的第一印象。一个好的封面能吸引…

C语言面试之旅:掌握基础,探索深度(面试实战之c语言指针数组下篇)

没有什么人能一路单纯到底,但是要记住,别忘了最初的自己。 ----小新 一、引言 在C语言中,指针是一种特殊的数据类型,它存储的是内存地址。指针在C语言编程中扮演着重要的角色,能够有效地提高程序的效率和灵活性。理解…

ArrayList 与 顺序表 (附洗牌算法)!

曾经我也是一枚学霸,直到有一天想去学渣的世界看看,结果就找不到回去的路了。 目录 1. 线性表 2.顺序表 2.1 接口的实现 3. ArrayList简介 4. ArrayList使用 4.1 ArrayList的构造 4.2 ArrayList常见操作 4.3 ArrayList的遍历 4.4 ArrayList的扩…

Redis连接池参数过期策略慢查询日志

目录 bigKey bigKey危害 bigKey优化 连接池参数 删除策略 慢查询日志 redis.config配置 命令配置 showlog命令 bigKey bigKey危害 Redis阻塞,bigKey操作一般耗时久,Redis单线程, 其他客户端会排队等待网络拥堵,bigKey意味着每次获取需要很大流量, 假设单条数据1MB,并发…

[在不同进制下的长除法] 正整数的任意进制转换

正整数的任意进制转换 题目描述 将 p 进制 n 转换为 q 进制。p 和 q 的取值范围为【2,36】,其中,用到的数码按从小到大依次为:0,1,2,3,4,5,6,7&…

Flutter PK jetpack compose区别和选择

Flutter诞生于Chrome团队,是一帮做Web的开发做的跨平台框架,从最开始的设计初衷,就是指向了跨平台这条路,而Compose,则是诞生于Android团队,是为了解决当前View的架构体系不能再继续适应申明式编程的范式而…

使用drawio图表,在团队中,做计划,设计和跟踪项目

使用drawio图表,在团队中,做计划,设计和跟踪项目 drawio是一款强大的图表绘制软件,支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用,则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部…