nrf52840蓝牙BLE5.0空中速率测试(nordic对nordic)
一、基础知识:
【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)的更多相关文章
- nrf52840蓝牙BLE5.0空中数据解析
一.基础知识: 我没找到蓝牙5.0的ATT数据格式图片,在蓝牙4.0的基础上做修改吧,如下图所示: 二.测试与分析: 参数设置: data length = 251字节,MTU = 247字节, ...
- IN612 IN612L蓝牙5.0 SoC芯片替换NRF52832/NRF52840
IN612L是美国公司INPLAY的SOC产品系列之一,具有多模协同2.4G无线协议栈,支持2.4G私有协议栈以及蓝牙5.0全协议栈的SOC芯片.如2mbps高数据速率模式,125kbps/500kb ...
- 如何让iOS模拟器也能测试蓝牙4.0程序?
买一个CSR蓝牙4.0 USB适配器,插在Mac上 在终端输入sudo nvram bluetoothHostControllerSwitchBehavior="never" 重启 ...
- 国产超低功耗蓝牙5.0 PHY6202替换NRF51822
现在在智能穿戴领域市场不断的追求低功耗.低成本的蓝牙芯片.蓝牙芯片目前除了Dialog公司研制蓝牙芯片是最求超低功耗的但是对于其它性能上还比较满足不了其它领域的功能,另外NORDIC.TI的蓝牙芯片虽 ...
- 蓝牙4.0(BLE)开发
转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/26740237 作者:小马 IOS学习也一段时间了,该上点干货了.前段时间研究了一下 ...
- 蓝牙4.0(包含BLE)简介
1. BLE (低功耗蓝牙)简介 国际蓝牙联盟( BT-SIG,TI 是 企业成员之一)通过的一个标准蓝牙无线协议. 主要的新特性是在蓝牙标准版本上添加了4.0 蓝牙规范 (2010 年6 月 ...
- 蓝牙1.1、蓝牙1.2、蓝牙2.0(蓝牙2.0+EDR)区别
蓝牙1.2版本相对于1.1版本: 1.Adaptive Frequency Hopping(AFH):即所谓适应性跳频技术,主要的功能是用来减少蓝牙产品与其它无线通讯装置之间所产生的干扰问题 2.Ex ...
- IOS学习之蓝牙4.0 BLE
IOS学习也一段时间了,该上点干货了.前段时间研究了一下IOS蓝牙通讯相关的东西,把研究的一个成果给大家分享一下. 一 项目背景 简单介绍一下做的东西,设备是一个金融刷卡器,通过蓝牙与iphone手机 ...
- iOS蓝牙BLE4.0通信功能
概述 iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下. 详细 代码下载:ht ...
随机推荐
- Grunt:任务自动管理工具(收藏+转载)
原文:http://javascript.ruanyifeng.com/tool/grunt.html 安装 命令脚本文件Gruntfile.js Gruntfile.js实例:grunt-contr ...
- Java数组逆序存储
package review01; import java.util.Arrays; public class review01 { public static void main(String[] ...
- spring AOP Capability and Goals(面向方面编程功能和目标归纳)
原官方文档链接: https://docs.spring.io/spring/docs/5.1.6.RELEASE/spring-framework-reference/core.html#aop-i ...
- 关于display:inline-block布局导致错位问题分析
移动端设计稿需求是这样的,如下图: 未知的几个头像从左至右并行居中排列. 一般可能直接使用float,但是设计图要求头像排列始终是居中的,于是想到要让它们成为行内元素,然后可使用的方法有flex bo ...
- CSS 2D转换
转换是使元素改变形状.尺寸和位置的一种效果.通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸,可以大致分为2D转换和3D转换.下面介绍的是2D转换的相关知识点. 首先,CSS中2D ...
- Web前端面试指导(二十):JavaScript中如何翻转一个字符串?
题目点评 字符串作在程序中是非常常见的,因为程序中绝大部分的数据都可以当作字符串来处理.需要对字符的处理方法比较熟悉,在回答的时候尽量能够说出多种解决方法更好! 字符串翻转的方法 1)使用字符串函数 ...
- node定时任务
var schedule = require('node-schedule') require('shelljs/global'); function scheduleCronstyle(){ sch ...
- 转动的八卦图纯css实现
这类的东西网上一搜就是大把的,看着比较空旷的博客,所以自己也来写一个. <!DOCTYPE html> <html> <head> <meta chars ...
- easyui window窗口 随body的滚动条 滚动
问题描述: 当easyui window窗口弹出的时候,依然可以滚动body 的滚动条,而且window窗口也会随它一起滚动 思路:bootstrap 模态框弹出的时候,给body 添加了 .moda ...
- ArcGIS 编程中对接口的理解
学习AO,最重要的是理解“接口”这个概念.接口是什么?有什么具体作用?在多种计算机高级语言中,都可以看到“接口”这个术语,但基本上每一本书对“为什么使用接口”等重要文都都“语焉不详”,使得初学者往往不 ...