热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

蓝牙传输速率详细分析【针对蓝牙4.2】

------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------------------------

文章版权归为微信公众号 Wireless Inside (前身  无线技术联盟),转载请注明出处.

XCODER.

技术博客:www.iotbzw.com

------------------------------------------------------------------------------------------------------------

还在困惑BLE低功耗蓝牙数据传输率有多快?

这并不仅仅是一个人的问题,即使谷歌搜索会出现很多不完整的答案。每个操作系统和设备都有自己的限制,例如连接间隔和每个间隔的数据包数量。另外,您是否知道使用iOS,您可以每一个连接间隔可以发送4个数据包,而且HID设备的可以在一个连接间隔发送10个数据把,从而把速率提高2.6倍?

如果你想最终清楚你可以通过BLE与iPhone,Android设备或Mac通信多快,下面的内容讲会一一解析你的疑问。

误区

蓝牙PHY 标称数据传送率是1M/bps,即为每秒由蓝牙物理层调试过后传到空中的速率为1兆比特,这并不表示蓝牙接收端接收的数据传输率可以到1M/bps。

影响/限制BLE吞吐量的因素有很多,最大吞吐量才为1M/bps,数据收发还具有相应通信协议和蓝牙协议,例如:

- 最大数据包长度

- 数据包之间的时间延迟

- 数据包中开销字节,如数据包长度,数据完整性检查和通用数据包信息。

那么,1Mbps的50%到75%呢?那仍然是31.25到62.5 kB每秒。这仍然是非常好的。

BLE吞吐量

一个BLE连接只有两个设备,其中一个被称为Master(如主),另一个被称为Slave(如从属)。每一侧在给定的时间段内与另一侧通信,称为连接间隔(最小7.5毫秒,最小增加的增量为1.25毫秒)。两个设备之间的每个通信实例称为通信事件。

最小连接间隔

当外围设备处于接收模式时,通信事件由中央(主设备)发送分组开始。如果外设成功从中央接收到数据包,外设将在中央处于接收模式时随后发送数据包。默认情况下,即使没有任何要发送的数据包,中央和外围设备也会发送一个数据包,这通常称为空链路层的心跳包。

在每次主从心跳包结束之后,主机或者从机端如有有排队等待发送的消息,他们可以“询问”或“警告”对方,告知自己有更多的数据要发送。这将会出现一个时间间隔内交换多个数据包。连接事件将继续,直到数据包未能正确接收,发送者结束连接事件,或者在非正常情况下结束(超时)。

需要注意的是,在连接事件中,您可以交换两个以上的数据包,这将极大地提高吞吐量,但是你需要了解每个连接事件的最大数据包数量取决于BLE堆栈/芯片组,每个iOS设备连接事件最大允许四个数据包,Android设备每个连接事件最大运行六个数据包。

数据包每个时间间隔可以由以下公式计算:

一般BLE数据吞吐量公式中重要因数就是以下三个重要元素:

1.连接间隔 - 设备通话的频率。

2.每个连接间隔的数据包数量 - 当他们说话时交换了多少个数据包。

3.数据包长度 - BLE数据包中应用数据的长度。

BLE中的理论最大应用数据吞吐量可以描述为以下公式:

Throughput = Packets Per Second * Data Per Package

由此我们可以得到以下公式:

提高BLE吞吐量的可行办法:

增加BLE有效数据包长度

现在可以肯定的是,BLE数据包最多包含20个字节的BLE应用程序数据v4.0和v4.1(v4.2包含一个数据包长度扩展,但是在iOS或Android很多不支持)。请记住,实际的BLE数据包的大小较长,但自然包括许多重要用途的段,例如CRC和不同层的标题。

减小连接间隔解

对于iOS 9.2和iPhone 6以上手机,最小连接间隔为30毫秒,除非您支持通过GATT配置BLE设备作为HID方式,最小连接间隔允许降至11.25毫秒。对于Android设备,最小连接间隔为7.5毫秒。

BLE设备与iPhone 6 数据吞吐量=(1000 mSecs)* 20 *(4)/(30 mSecs)= 2,667.66 byte/s。

如果IOS设备支持HID, 吞吐量增加到=(1000 mSecs)* 20 * 4 /(11.25 mSecs)= 7,111.11 Bytes per second

提示:您可以将数据包中的应用程序数据长度增加3个字节,从而将吞吐量提高15%。在未来的博文中,我们将讨论这个。

实现更快的吞吐量

简单的答案有时候会受到其他BLE设备三个参数限制的限制,即使您的BLE设备可以支持较低的连接间隔或每个连接事件发送超过4个数据包。

例如,让我们把我们用来连接iPhone 6的外围设备连接到一个不同的客户端(硬件),每个连接事件的连接间隔为10mSecs,最多连接12个数据包(每个方向6个)。这将增加理想的最大值如下:

BLE设备与Iphone 6最大吞吐量=(1000mSecs)* 20 *(6)/(10 mSecs)= 12,000 Bytes per second。

目前由于支持蓝牙4.2大数据包的手机和BT 5的手机并不多,所以无法通过提高数据包长度的方式提升数据传送率,希望后续手机更新换代把蓝牙5作为标配,提高数据传输率指日可待。



手机笔记本电脑BLE最大吞吐量汇总

下列数据为iphone和安卓两种系统的亲测数据,供大家参考:

iPhone 6,6 +,6S,6S +:

正常连接间隔30mSecs:最大数据吞吐量 2,667字节/秒

HID模式, 连接间隔为11.25mSecs:最大数据吞吐量 7,111字节/秒

MacBook Pro - OS X(不同型号):

最大连接间隔范围(11.25 - 15mSecs):最大数据吞吐量 7,111字节/秒 - 5334字节/秒

Android的

Nexus 4:最小连接间隔7.5 mSecs - 每个连接的数据包间隔:6 - 最大数据吞吐量:16,000 Bytes / Sec

Nexus 6P:最小连接间隔7.5 mSecs - 每个连接的数据包间隔:6 - 最大数据吞吐量:16,000 Bytes / Sec

------------------------------------------------------------------------------------------------------------


「Wireless Inside 微信公众号 (原无线技术联盟微信公众号) 微信交流群」

助力IoT行业朋友打通短距离无线通信圈的行业小社区。

集高通,Broadcom,TI,Nordic,Dialog,ST,Silicon lab, NXP, AMBIQ等蓝牙芯片原厂技术,市场,销售

集华为,MTK,泰凌微,凌思微,盛源达,ASR,华普微,中颖电子,百瑞互联,Realtek 国产芯片原厂技术,市场,销售

集Arrow,北高智,迅通,世强,利尔达,科通,全科等一线原厂代理商技术,市场,销售

集小米,华米,绿米,涂鸦,雅观,百度,阿里,Oppo,Vivo,京东互联网公司,品牌客户,方案公司技术,市场,销售,创始人

集蓝牙认证机构,被动器件,射频公司,以及SIG大佬

申请流程:

① 因群人数已超过限制人,请先微信扫描以下微信二维码或添加Xcoder微信号(blecoder),添加微信时请将您的个人信息进行备注(名字 公司 职位),以便登记,同时也欢迎同行和我进行交流。

② 由于需要我逐个邀请入群,所以请大家耐心等待!谢谢理解与支持!

无线技术联盟微信公众号,提供有价值的市场信息和最新的技术分析,欢迎关注交流,转载请注明出处。

------------------------------------------------------------------------------------------------------------




推荐阅读
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
author-avatar
不铃不铃铃不铃铃铃
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有