一、基础知识:

【1】Data Length:物理层发送一包数据的最大值;

【2】MTU: ATT层发送一次数据长度的最大值;

【3】GAP Event Length:一个connection event中多包持续最大时间,相应的限制了每个连接间隔中间的最大包数;

【4】PHY : 物理层发送速率,目前支持1Mbps和2Mbps;还有长距离传输用的CODED,也是1Mbps的,但编码方式不同。

【5】Connection Interval:连接间隔;

【6】connection event length extension:连接事件长度扩展。可使能或者禁能。不太理解该项,因为未得到验证,但字面意思为:控制连接间隔之间是否可以发送多包的开关。

规定:

下行:主给从发数据;write without rsp属性

上行:从给主发数据;notify属性

二、空中抓包速率对比:

1. nordic主对nordic从:

参数设置: data length = 251字节,MTU = 247字节, GAP Event Length = 500ms, PHY = 2Mbps,

connection event length extension = enable,

(1)Connection Interval = 7.5ms时:

下行:

上行:

单个event的时间:

从上面的图中可以看出,7.5ms连接间隔时(其它参数值看上面),

上下行连接间隔中可以发四包数据,所以,速率理论上为:188KB/s,但实测发送1000包速率平均为132KB/s.

(2)Connection Interval = 30ms时:

下行:

上行:

单个event时间:

从上面的图中可以看出,30ms连接间隔时(其它参数值看上面),

上下行连接间隔中可以发20包数据,所以,速率理论上为:178KB/s,但实测发送1000包速率平均为164KB/s.

(3)Connection Interval = 500ms时:

下行:

上行:

单个event时间:

从上面的图中可以看出,500ms连接间隔时(其它参数值看上面),

上下行连接间隔中可以发更多包数据,推算理论速率上为:176KB/s,但实测发送1000包速率平均为176KB/s.

通过上面不同连接间隔的设定,我们大致可以看出,当连接间隔增大时,实际速率会更接近理论速率,这是由于各个连接间隔之间的空余部分基本上都是一样大的,当连接间隔增大时,这部分空间占的比重会更小,因此通讯速率也就更高。但是过大的连接间隔有一个问题,那就是如果一个应用数据包通讯出错,那么该应用数据包得到纠正的时间至少是下一个连接间隔,导致响应时间变长,所以更短的连接间隔更容易纠错,更长的连接间隔速率更高。30ms时的速率和纠错时间达到了一个比较好的平衡,所以大数据量传输时,选择这个连接间隔会比较好一些。如果数据量非常小的话,还是7.5ms速度最快,响应时间最短。

关于其它几个参数:

PHY:PHY为2Mbps相对于1Mbps时快一倍,这个是直接的,比如1Mbps传输一个bit需要1us的时间,但是在2Mbps时,只需要0.5us。

由于是满包发送,且我的需求是发送的数据量越大越好,所以我把GAP Event Length和MTU和data length都设置成了最大进行测试。

>>上行和下行同时无脑发送:

参数设置: data length = 251字节,MTU = 247字节, GAP Event Length = 500ms, PHY = 2Mbps,

connection event length extension = enable,

(1)Connection Interval = 7.5ms时:

上下行均发送1000包总览:

从图片可以看出,总时间为3.76秒,混合速率为:127KB/s;上行和下行的时间基本一致,所以上下行速率均为:63.5KB/s。

连接间隔查看:

从上图看出,一个连接间隔里一般有4包,其中两包为下行,两包为上行数据。图中蓝色代表下行,绿色代表上行。

(2)Connection Interval = 30ms时:

上下行均发送1000包总览:

从图片可以看出,总时间为2.5秒,混合速率为:193KB/s;上行和下行的时间基本一致,所以上下行速率均为:96.5KB/s。

连接间隔查看:

从上图看出,一个连接间隔里一般有24包,其中12包为下行,12包为上行数据。图中蓝色代表下行,绿色代表上行。

(3)Connection Interval = 500ms时:

上下行均发送1000包总览:

从图片可以看出,总时间为2.05秒,混合速率为:198KB/s;上行和下行的时间基本一致,所以上下行速率均为:99KB/s。

从上图看出,一个连接间隔里的包数不固定,图片里已经重叠显示了,这种很大连接间隔就是在通信比较稳定时有效,如果不稳定,

一旦出问题,下一包的发送就只能等下一个连接间隔了这样反而会变慢,比较适合对实时性要求不高且数据量较大以及在无通讯数据时要求超低功耗的场合。

将以上速率形成表格:

nrf52840蓝牙BLE5.0空中速率测试(nordic对nordic)的更多相关文章

  1. nrf52840蓝牙BLE5.0空中数据解析

    一.基础知识: 我没找到蓝牙5.0的ATT数据格式图片,在蓝牙4.0的基础上做修改吧,如下图所示:   二.测试与分析: 参数设置: data length = 251字节,MTU = 247字节, ...

  2. IN612 IN612L蓝牙5.0 SoC芯片替换NRF52832/NRF52840

    IN612L是美国公司INPLAY的SOC产品系列之一,具有多模协同2.4G无线协议栈,支持2.4G私有协议栈以及蓝牙5.0全协议栈的SOC芯片.如2mbps高数据速率模式,125kbps/500kb ...

  3. 如何让iOS模拟器也能测试蓝牙4.0程序?

    买一个CSR蓝牙4.0 USB适配器,插在Mac上 在终端输入sudo nvram bluetoothHostControllerSwitchBehavior="never" 重启 ...

  4. 国产超低功耗蓝牙5.0 PHY6202替换NRF51822

    现在在智能穿戴领域市场不断的追求低功耗.低成本的蓝牙芯片.蓝牙芯片目前除了Dialog公司研制蓝牙芯片是最求超低功耗的但是对于其它性能上还比较满足不了其它领域的功能,另外NORDIC.TI的蓝牙芯片虽 ...

  5. 蓝牙4.0(BLE)开发

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/26740237 作者:小马 IOS学习也一段时间了,该上点干货了.前段时间研究了一下 ...

  6. 蓝牙4.0(包含BLE)简介

    1. BLE   (低功耗蓝牙)简介 国际蓝牙联盟( BT-SIG,TI  是 企业成员之一)通过的一个标准蓝牙无线协议. 主要的新特性是在蓝牙标准版本上添加了4.0 蓝牙规范 (2010 年6 月 ...

  7. 蓝牙1.1、蓝牙1.2、蓝牙2.0(蓝牙2.0+EDR)区别

    蓝牙1.2版本相对于1.1版本: 1.Adaptive Frequency Hopping(AFH):即所谓适应性跳频技术,主要的功能是用来减少蓝牙产品与其它无线通讯装置之间所产生的干扰问题 2.Ex ...

  8. IOS学习之蓝牙4.0 BLE

    IOS学习也一段时间了,该上点干货了.前段时间研究了一下IOS蓝牙通讯相关的东西,把研究的一个成果给大家分享一下. 一 项目背景 简单介绍一下做的东西,设备是一个金融刷卡器,通过蓝牙与iphone手机 ...

  9. iOS蓝牙BLE4.0通信功能

    概述 iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下. 详细 代码下载:ht ...

随机推荐

  1. bzoj 5368: [Pkusc2018]真实排名

    Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是 :成绩不小于他的选手的数量(包括他自己).例如如果3位选手的成绩分别是[ ...

  2. Exists/In/Any/All/Contains操作符

    Exists/In/Any/All/Contains操作符 适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就 ...

  3. Java 实例 - 标签(Label)

     Java 实例 Java 中的标签是为循环设计的,是为了在多重循环中方便的使用break 和coutinue . 以下实例当在循环中使用 break 或 continue 循环时跳到指定的标签处: ...

  4. 阿里云服务器docker搞定镜像

    docker的安装可以看前面的文章 这里我的docker已经安装完成了,该搞镜像了:这里的镜像用的是我以前自己搞的,虽然镜像有点大,但是胜在自己搞的,熟悉(熟悉不熟悉鬼知道) 我的镜像放在了阿里云容器 ...

  5. 借助 CORS 从 JavaScript 使用 API 应用

    应用服务提供内置的跨域资源共享 (CORS) 支持,可让 JavaScript 客户端对 API 应用中托管的 API 进行跨域调用.应用服务允许配置对 API 的 CORS 访问,无需在 API 中 ...

  6. [javaEE] jsp的指令

    jsp的指令:jsp的指令(directive)是为jsp引擎而设计的,他们并不直接产生任何可见输出,而是告诉引擎如何处理jsp 页面中的其他部分 页面头部的page指令 <%@page imp ...

  7. Python基础学习总结(六)

    8.函数 函数是带名字的代码块,用于完成具体的工作.def函数定义,指出函数名.定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参 ...

  8. 重构指南 - 封装条件(Encapsulate Conditional)

    封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用.   当代码中包含 ...

  9. 使用PowerShell批量解除锁定下载的文件

    使用PowerShell批量解除锁定下载的文件 3.在需要解锁的文件所在的文件夹中空白处,按住Shift然后单击右键,在弹出的右键菜单中,选择“在此处打开PowerShell窗口”, 输入Get-Ch ...

  10. js-原始类型和声明变量

    ** Java的基本数据类型:byte.short.int.long.float.double.char.boolean ** 定义变量 都是用关键字 var(ES6中可以使用const和let来定义 ...