经典蓝牙Sniff Mode

news/2024/5/19 10:30:33/文章来源:https://blog.csdn.net/Wendell_Gong/article/details/129248409

文章目录

  • Introduction
  • Application
  • Sniff Sub-rating
  • Reference

Introduction

Sniff mode为两个已连接的经典蓝牙设备提供了有效的降低功耗的方法。我们知道,当没有数据需要传输的时候,两个已连接的蓝牙设备之间也需要每两个slots完成一次POLL packet - NULL packet exchange,以维持ACL连接。Sniff mode通过增加POLL packet - NULL packet exchange的间隔时间(即Sniff Interval)来减少两个设备之间的通信次数,让两个设备可以在间隔时间内进入低功耗状态。
在这里插入图片描述

Sniff mode的具体实现方法是:
两个设备利用LMP Sniff Request PDU协商一个T-sniff参数作为POLL packet - NULL packet exchange的间隔时间,然后进入Sniff mode。

  • 间隔时间到了,Master发出POLL packet。这个时刻称为Anchor Point。
  • Slave在Anchor Point之前从低功耗状态唤醒,准备接收POLL packet。
  • Slave收到POLL packet后,在紧接着的slave-to-master slot发送NULL packet。
  • 如果没有数据需要传输,Slave可以再次进入低功耗状态。
  • 等T-sniff之后,两个设备再次重复上述过程。
    在这里插入图片描述

在实际应用场景种以上方法不能满足可靠性和及时性的需求。为此LMP Sniff Request PDU还会协商以下两个参数:

  • N-sniff attempt —— 由于无线干扰,Master在Anchor Point发出的这一个POLL packet可能不会被Slave收到。为了提高可靠性,Slave可以从Anchor Point开始,监听连续的N-sniff attempt个master-to-slave slots;Master从Anchor Point开始、在每个master-to-slave slot内发送POLL packet,直到Slave回复了NULL packet或者发送POLL packet的次数等于N-sniff attempt才停止发送POLL packet。由于N-sniff attempt包含了在Anchor Point那一次POLL packet发送,所以N-sniff attempt最小值就是1。由于POLL packet只能在master-to-slave slot发送,所以N-sniff attempt最大值为(T-sniff / 2)。
    在这里插入图片描述
  • N-sniff timeout —— 如果Slave在一次POLL packet - NULL packet exchange之后立刻就进入低功耗状态,那么Slave就会错过Master紧接着发送的ACL data,Slave将只能在下一个Anchor Point的时刻才有机会接收Master发送的ACL data了。这就导致了Slave不能及时响应。Slave可以在收到Master发送的ACL packet之后,再持续监听N-sniff timeout个master-to-slave slots,以保证两个设备在进入低功耗状态之前完成任何需要的数据传输。
    在这里插入图片描述
    LMP Sniff Request PDU还有一个参数D-sniff,该参数作为Anchor Point offset,用于Master与多个处于Sniff Mode的Slaves连接的场景。在一个master-to-slave slot内,Master只能向一个特定Slave发送POLL packet。如果还有第二个Slave,Master就必须在另外一个master-to-slave slot内向第二个Slave发送POLL packet。D-sniff就定义了第二个master-to-slave slot的offset。
    在这里插入图片描述

Application

不同的应用对于低功耗和响应时间的要求是不同的。应用可以用HCI_Sniff_Mode command来修改Sniff mode的参数。
在这里插入图片描述
该HCI command并没有直接指定Sniff Interval,即T-sniff,而是设定了Sniff Interval的范围Sniff_Min_Interval ~ Sniff_Max_Interval。Link Manager与对端的Link Manager负责协商出来一个位于该范围内的T-sniff。需要注意Sniff_Max_Interval必须小于Link Supervision Timeout参数。

随着Sniff Interval的增大,功耗并非线性降低。Sniff Interval越大,Slave与Master之间的Clock Drift就越大。Slave在Anchor Point前后需要保持的Rx接收窗口就越大,这就减少了Slave的休眠时间。因此Sniff Interval增大到一定程度之后,再继续增大,功耗降低就很不明显了。一些Bluetooth Profile对Sniff Mode的参数做出了规定并给出了在Latency与Power consumption之间折中的示例,比如HID Profile中的规定:
在这里插入图片描述

Sniff Sub-rating

Sniff Sub-rating (SSR)提供了一种进一步降低功耗的方法。当Link Manager使能了Sniff Sub-rating功能后,蓝牙设备可以在Sniff Mode和Sniff Sub-rating Mode之间转换。SSR允许蓝牙设备使用减少的Sniff Anchor point的数量,进一步降低两个蓝牙设备之间的通信频次。更多详情可以参见Bluetooth SIG官方文档。
在这里插入图片描述

Reference

  1. 4.2.1.5 Sniff Mode, Part A Architecure, Vol 1 Architecture, Mixing and Conventions, Core Spec V5.3
  2. 8.7 SNIFF MODE, Part B Baseband Spec, Vol 2 BR/EDR Controller, Core Spec V5.3
  3. 4.5.3 Sniff mode, Part C Link Manager Protocol Spec, Vol 2 BR/EDR Controller, Core Spec V5.3
  4. 6.1 SNIFF MODE, Part F Message Sequence Charts, Vol 2 BR/EDR Controller, Core Spec V5.3
  5. 7.2.2 Sniff Mode command, Part E Host Controller Interface Functional Spec, Vol 4 Host Controller Interface, Core Spec V5.3
  6. 7.2.14 Sniff Subrating command, Part E Host Controller Interface Functional Spec, Vol 4 Host Controller Interface, Core Spec V5.3
  7. 7.7.37 Sniff Subrating event, Part E Host Controller Interface Functional Spec, Vol 4 Host Controller Interface, Core Spec V5.3
  8. 4.2 Quality of Service, Human Interface Devce(HID) Profile
  9. 4.3 Power Management, Human Interface Devce(HID) Profile
  10. 5.1.8 Support of Low Power Link Modes, Human Interface Devce(HID) Profile
  11. Appendix G Bluetooth HID Power Management Examples, Human Interface Devce(HID) Profile
  12. Appendix J Sniff Subrating Example,Human Interface Device(HID) Profile
  13. White Paper: Bluetooth Master/Slave Communications and Sniff/Sniff Sub-rating Modes

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

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

相关文章

新版本GPU加速的tensorflow库的配置方法

本文介绍在Anaconda环境中,配置可以用GPU运行的Python新版tensorflow库的方法。 在上一篇文章Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/129285815&am…

Torch同时训练多个模型

20230302 引言 在进行具体的研究时,利用Torch进行编程,考虑到是不是能够同时训练两个模型呢?!而且利用其中一个模型的输出来辅助另外一个模型进行学习。这一点,在我看来应该是很简单的,例如GAN网络同时训…

HOT100--(5)最长回文子串

点击查看题目详情 中心扩散法 思路: 遍历字符串,以每个字符为中心点向两边扩散,如果遇到不一样的就跳出循环。以此类推,最后截取最大回文串返回。 细节 字符个数不一定都是奇数。当个数是偶数的是时候,我们可以“忽…

Canal数据同步配置

文章目录Canal数据同步配置0.canal工作原理1.**检查binlog功能是否有开启**2.如果显示状态为OFF表示该功能未开启,开启binlog功能3.**在mysql里面添加以下的相关用户和权限**4.下载安装Canal服务5.修改配置文件6.进入bin目录下启动7.idea中配置Canal数据同步配置 c…

Java接口专题

基本介绍 接口给出一些没有实现的方法,封装到一起,到某个类使用时再根据具体情况把这些方法写出来。 注意:在jdk7之前,接口里所有的方法都是抽象方法。在jdk8之后接口中可以有静态方法,默认方法 interface 接口名{/…

MySQL 数据库创建不了外键约束

在数据库的表里面创建不了外键约束❓❓❓ 没错,以我名侦探 q 的分析(狗屁!!!),真相只有一个❗❗❗ 那就是:你表的存储引擎非 InnoDB,外键约束只有存储引擎是 InnoDB 才…

flutter window安装过程

这里写自定义目录标题#下载相关官网地址:https://flutter.cn/docs/get-started/install/windows 根据官网下载相关包flutter_windows_3.7.5-stable.zip 解压到c盘,在path配置相关解压路径(c:\flutter)。 执行 where flutter dart ,发现没有提…

APP测试面试题汇总(基础篇、进阶篇)

一、基础篇1、请介绍一下,APP测试流程?APP测试流程与web测试流程类似,分为如下七个阶段:1.根据需求说明书编写测试计划;2.制定测试方案,主要是测试任务、测试人员和测试时间的分配;3.测试准备&a…

离散事件动态系统

文章目录离散事件动态系统ppt离散事件系统建模离散事件动态系统的基本组成元素离散事件动态系统仿真具体建模petri建模实例离散事件动态系统 ppt ppt 仿真建模步骤 离散事件系统建模 from:离散事件系统建模 离散事件动态系统的基本组成元素 (1&am…

【备战面试】每日10道面试题打卡-Day2

本篇总结的是Java基础知识相关的面试题,后续也会更新其他相关内容 文章目录1、 和 equals 的区别是什么?2、你重写过 hashcode 和 equals 吗,为什么重写equals时必须重写hashCode方法?3、为什么Java中只有值传递?4、BI…

工业机器人有哪些类型?如何利用工业网关集中监测管理?

工业机器人在制造业中的应用与日俱增,使用工业机器人,不仅提高了设备和场地的利用率,还能保持稳定的产品水平。随着工业机器人的大规模部署,对于数量众多、类型各异、功能不一的机器人的监测、管理和维护,也成为企业面…

如何提高软件测试效率 降低开发成本?

1、单元测试以开发人员为主 测试分工需根据测试人员的特点进行,而单元测试应以开发人员为主,以保障每个单元能够完成设计的功能。集成测试也可以以开发人员为主进行。当软件体系结构完成后,独立测试人员应尽量选择比较熟悉相关领域的人员。​…

Webpack-好文

webpack是一个前端资源加载/打包工具,会根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源Webpack打包js文件创建一个文件夹,cmd进入到终端,运行npm install -g webpack webpack-cli安装webpack we…

原生微信小程序引入npm和安装Vant Weapp

目录一、引入npm安装Vant Weapp1、引入npm2、安装Vant Weapp3、修改 app.json4、修改 project.config.json二、构建npm一、引入npm安装Vant Weapp 环境:Windows10 开发工具:微信开发者工具 本地环境:已安装过node.js 1、引入npm cmd进入到你…

动态内存基础(一)

动态内存基础 ● 栈内存 堆内存 V.S. – 栈内存的特点:更好的局部性,对象自动销毁 – 堆内存的特点:运行期动态扩展,需要显式释放 ● 在 C 中通常使用 new 与 delete 来构造、销毁对象 int* fun() {int res;return &res; //…

|干货 | 五种常用类型之String字符串详解

一. 背景说明小白:哥,java中String是最常用类型,Redis中也是吗?哥:差不多,我给你稍微讲一下。二. 数据类型依据Redis官网,目前Redis数据类型共计九种。具体整理如下:常用的数据类型有&#xff…

Windows 11 安装 Docker Desktop

Windows 环境安装 WSL2 WSL 简介 WSL 全称是 Windows Subsystem for Linux ,适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设…

九州云出席全球人工智能开发者先锋大会,圆桌论道开源未来

2月25日-26日,2023年全球人工智能开发者先锋大会(GAIDC)在临港成功召开。本届盛会以“向光而行的开发者”为主题,汇集政府职能部门领导、国内外知名专家学者、具有国际影响力的开源创业者,聚焦前瞻探索、开源开放、人才…

运动控制器PSO视觉飞拍与精准输出的C++开发(二):多轴PSO等距/周期输出

本文主要介绍正运动技术EtherCAT控制器在VS平台采用C语言实现的各种PSO功能。正运动提供多种PSO模式供用户搭配不同的场景使用。 上节讲解了采用TABLE寄存器存储的数据表触发比较,本节主要讲解矢量比较两种模式:等距周期比较输出,固定时间周…

python海龟绘图

一、基础 (一)介绍 海龟绘图(Turtle Graphics):“小海龟”turtle是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始…