经典蓝牙Sniff Mode
文章目录
- 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
- 4.2.1.5 Sniff Mode, Part A Architecure, Vol 1 Architecture, Mixing and Conventions, Core Spec V5.3
- 8.7 SNIFF MODE, Part B Baseband Spec, Vol 2 BR/EDR Controller, Core Spec V5.3
- 4.5.3 Sniff mode, Part C Link Manager Protocol Spec, Vol 2 BR/EDR Controller, Core Spec V5.3
- 6.1 SNIFF MODE, Part F Message Sequence Charts, Vol 2 BR/EDR Controller, Core Spec V5.3
- 7.2.2 Sniff Mode command, Part E Host Controller Interface Functional Spec, Vol 4 Host Controller Interface, Core Spec V5.3
- 7.2.14 Sniff Subrating command, Part E Host Controller Interface Functional Spec, Vol 4 Host Controller Interface, Core Spec V5.3
- 7.7.37 Sniff Subrating event, Part E Host Controller Interface Functional Spec, Vol 4 Host Controller Interface, Core Spec V5.3
- 4.2 Quality of Service, Human Interface Devce(HID) Profile
- 4.3 Power Management, Human Interface Devce(HID) Profile
- 5.1.8 Support of Low Power Link Modes, Human Interface Devce(HID) Profile
- Appendix G Bluetooth HID Power Management Examples, Human Interface Devce(HID) Profile
- Appendix J Sniff Subrating Example,Human Interface Device(HID) Profile
- White Paper: Bluetooth Master/Slave Communications and Sniff/Sniff Sub-rating Modes
经典蓝牙Sniff Mode相关推荐
- 经典蓝牙和低功耗蓝牙(BLE)有什么区别?
蓝牙模块Bluetooth module)是指集成蓝牙功能的芯片基本电路集合,用于短距离2.4G的无线通讯模块.对于最终用户来说,蓝牙模块是半成品,通过在模块的基础上功能再开发.封装外壳等工序,实现能 ...
- android ble 经典蓝牙,Android 经典蓝牙(Classic Bluetooth)和低功耗蓝牙(BLE)
[实例简介] 从蓝牙4.0开始包含两个蓝牙芯片模块:传统/经典蓝牙模块(Classic Bluetooth,简称BT)和低功耗蓝牙(Bluetooth Low Energy,简称BLE) 经典蓝牙是在 ...
- Android经典蓝牙开发简介(Google官网译文)
公司的项目最近需要用到蓝牙开发的相关内容,因此特地查阅了Google官方文档的内容并进行二次整理,希望能对需要学习该部分的朋友有所帮助. 原文地址:http://developer.android.c ...
- Android 使用经典蓝牙
Android 使用经典蓝牙 本文内容基本是按照安卓官方文档来进行经典蓝牙的学习,大体都从官方文档粘贴而来,英文部分做了写粗略的翻译,作为自己学习安卓经典蓝牙的一个记录.官方文档可参考https:// ...
- 【Android】蓝牙开发——经典蓝牙:配对与解除配对 实现配对或连接时不弹出配对框
目录 一.配对方法 二.解除配对方法 三.配对/解除配对结果 四.justwork配对模式下,不弹出配对框 五.pincode配对模式下,不弹出配对框 六.小结 在之前的文章[Android]蓝牙开发 ...
- Android蓝牙开发前序知识-经典蓝牙低功耗蓝牙区别
最近从网上搜了(抄了)一些经典蓝牙和低功耗蓝牙的区别.关于蓝牙的大概了解,前文已经描述过了. Android中的蓝牙 说到Android中的蓝牙,大家听到的可能有蓝牙1.0.蓝牙2.0.蓝牙3.0.蓝 ...
- 杰理-BLE连接后打开经典蓝牙
杰理-BLE连接后打开经典蓝牙 BLE断开
- 关于经典蓝牙和低功耗蓝牙的区别
刚开发蓝牙的小伙伴在开发的时候,或许会看到经典蓝牙和低功耗蓝牙这两种,不知道它们之间的区别与联系,今天给大家介绍一下经典蓝牙和低功耗蓝牙(BLE)的区别. 文章转载自: http://www.love ...
- 蓝牙4.0、经典蓝牙、BT、BLE的关系与区别
蓝牙3.0 比较老的标准了. 蓝牙4.0 蓝牙4.0标准是2012年推出的蓝牙标准,是蓝牙3.0的升级版本,相比3.0版本它更省电.成本更低,3毫秒低延迟.具有超长有效连接距离和AES-128加密 ...
最新文章
- 爱奇艺火爆的背后,个性化推荐排序是如何配合的?
- 五个方面入手 教你如何成为领导型CIO
- (转载) 数组a[]={3,5,2,4,1,8},要求从a中找出所有“和”等于10的子集
- Android 跳转到ViewPager指定页面
- linux学习杂记_socket编程(含select)
- OpenStack 的诞生
- go - reflect
- 【物体检测】基于matlab GUI形态学物体检测【含Matlab源码 945期】
- 层次分析法原理和matlab代码
- 勒索病毒数据库恢复 勒索病毒解密恢复 中勒索病毒解密恢复数据
- win7 下点击鼠标右键无法新建文件夹
- pt和px区别 pt是逻辑像素,px是物理像素
- 英语esl语言课程等级105c,说一下英语ESL的等级
- 04、Hadoop框架HDFS NN、SNN、DN工作原理
- 谈下论坛和商城的开发项目
- GraphPad Prism使用
- “香港一卡通” 內地見證開戶
- (差分)洛谷P4231 三步必杀
- 解决 Spring Cloud 整合 zipkin 报错:org.springframework.boot.actuate.health.CompositeHealthIndicator......
- 一、多线程是什么?为什么要用多线程?