BLE吞吐量测试

介绍

本章分别测试了TI CC2640R2F LuanchPad和LECONIOT CC2640R2F Evaluation Board开发板吞吐量。我们提供了两个例程供大家参考测试,分别是ble5_throughput_peripheralble5_throughput_central。本文最后提供了测试程序下载链接。

该工程中进行了一些修改以方便进行吞吐量测试:

  • 改变项目MTU大小
  • 通过消息计数器发送通知
  • 增加Throughput配置文件
  • 增加按键菜单

硬件环境

使用USB连接CC2640R2F Evaluation Board。确保跳线帽正确连接,如下图所示

参数修改

基本思想是不断发送GATT通知,尽可能减少开销,尽可能减少停机时间。以下参数在增加吞吐量时必须加以考虑。

ATT_MTU大小

有关最大传输单元(ATT_MTU)的说明,请参见LE Data Length Extension和 Logical Link Control and Adaptation Layer Protocol (L2CAP)。

这里定义6个Tx缓冲区,每个缓冲区251字节。用户应用程序应该根据自身堆栈情况进行分配。如果没有足够的堆栈,可以通过减少MAX_NUM_PDU,这样可能导致吞吐量的损失。实际使用中的最坏情况是MAX_NUM_PDUMAX_PDU_SIZE的乘积。设计人员应该根据设备的可用内存来平衡这些参数。

#define MAX_NUM_PDU                   6
#define MAX_PDU_SIZE                  251

注意:最好在options->C/C++ Compiler->Defined symbols里进行修改。

注意:MTU更新过程在连接之后主机自动发起和从机进行协商。选择双方支持最大MTU。

LE 2M PHY

这里使用2M PHY,使每个连接事件期间从PHY发送的数据增加一倍(需要连接之后通过按键菜单自行选择)。

LE数据长度拓展

在蓝牙4.2规范中允许控制器发送最多251个字节的单个数据包。这与以前的27个字节相比大大增加了吞吐量。此功能称为数据长度拓展。有关这方面详细介绍请参考LE Data Length Extension以及 BLE一次能传多少数据(ATT_MTU设置/LE Data扩展)。
下面的PDU更新过程的代码片段可以在throughput_peripheral.c文件中找到

//examples\rtos\CC2640R2_LAUNCHXL\ble5apps\throughput_peripheral\src\app\throughput_peripheral.c SimpleBLEPeripheral_doSetDLEPDU line 1213
bool SimpleBLEPeripheral_doSetDLEPDU(uint8 index)
{switch (index){case 0:txOctets = DEFAULT_PDU_SIZE;txTime = DEFAULT_TX_TIME;break;case 1:txOctets = DLE_MAX_PDU_SIZE;txTime = DLE_MAX_TX_TIME;break;}HCI_LE_SetDataLenCmd(connectionHandle, txOctets, txTime);
}

连接间隔

根据前后处理数量,控制器需要2-3ms来准备下一个连接事件。因此更长的连接间隔可以提高吞吐量。由于使用notify方式传输,更高的连接间隔意味着连接事件减少。此示例将使用100ms的连接间隔,请注意,在实际情况下更高的连接间隔有着明显的缺点:由于射频干扰导致的连接事件将大大降低吞吐量。因此用户需要根据所需吞吐量进行权衡。当连接间隔大于100ms后,吞吐量将不会增加。

通知排队

这段代码设计能保证队列中始终有需要发送的数据,以便在通知开始时不会处于饥饿状态。

//examples\rtos\CC2640R2_LAUNCHXL\ble5apps\throughput_peripheral\src\app\throughput_peripheral.c SimpleBLEPeripheral_blastData line 1329
static void blastData()
{uint16 len = MAX_PDU_SIZE-7;attHandleValueNoti_t noti;bStatus_t status;noti.handle = 0x1E;noti.len = len;while(1){//attempt to allocate payloadnoti.pValue = (uint8 *)GATT_bm_alloc( 0, ATT_HANDLE_VALUE_NOTI, GATT_MAX_MTU, &len );if ( noti.pValue != NULL ) //if allocated{//place indexnoti.pValue[0] = (msg_counter >> 24) & 0xFF;noti.pValue[1] = (msg_counter >> 16) & 0xFF;noti.pValue[2] = (msg_counter >> 8) & 0xFF;noti.pValue[3] = msg_counter & 0xFF;status = GATT_Notification( 0, &noti, 0 );    //attempt to sendif ( status != SUCCESS ) //if noti not sent{GATT_bm_free( (gattMsg_t *)&noti, ATT_HANDLE_VALUE_NOTI );}else //noti sent, increment counter{msg_counter++;}}else{//bleNoResourcesasm("NOP");}}
}

本代码仅为最大吞吐量测试,在实际应用中,由于其他处理需求,应用程序可能无法维持此吞吐量(例如必须通过串口传输有效数据负载)。此外blastData函数最大限度的增加了数据的排队,因此GATT_Notification会返回非SUCCESS状态,例如队列已满时的blePending。Tx队列的深度由上面定义的MAX_NUM_PDU决定。

分组开销

主机和从机的有效数据载荷已经被优化为251字节。这是吞吐量的最大值。然后,由于ATT和L2CAP级别的开销,并不是所有251个字节都可以用作应用程序数据。这是蓝牙规范说必须的,对此的简要说明如下:

ATT通知头

所有ATT通知包具有标识
发送通知的属性的操作码和句柄所需的3字节头。
发送ATT通知有3字节开销。

L2CAP头

在L2CAP层,需要类似的开销来设置分组的长度
和适当的信道标识符(CID)。
这些字段中的每一个都是16位(2字节),导致4个字节的L2CAP 开销。
结合L2CAP和ATT数据包开销产生:

TOTAL_PACKET_OVERHEAD = 7 bytes

测试结果

分别对PDU为27 Bytes和251 Bytes以及PHY为1 Mbps、2 Mbps、Coded:S2、Coded:S8.模式进行测试。下面给出表格方便查阅。

TI CC2640R2F LaunchPad

         
模式 1 Mbps 2 Mbps Coded:S2 Coded:S8
27 Bytes 288.896 (kb/s) 390.400 (kb/s) 101.504 (kb/s) 29.280 (kb/s)
251 Bytes 780.800 (kb/s) 1366.400 (kb/s) 175.680 (kb/s) 58.560 (kb/s)

CC2640R2F Evaluation Board

         
模式 1 Mbps 2 Mbps Coded:S2 Coded:S8
27 Bytes 288.896 (kb/s) 390.400 (kb/s) 101.504 (kb/s) 29.280 (kb/s)
251 Bytes 780.800 (kb/s) 1366.400 (kb/s) 175.680 (kb/s) 58.560 (kb/s)

可以看出我们的开发板和TI CC2640R2F LaunchPad在不同模式下速率是一致的。读者可以自行下载例程测试。下图展示了在2 Mbps/251bytes模式下的传输速率。

测试用例下载

下载 BLE Throughput 测试例程.

注意:需要配合CC2640RF SDK使用,笔者目前使用的是simplelink_cc2640r2_sdk_1_35_00_33。文件解压后放在该SDK同级目录,即C:\ti。

加入我们

文章所有代码、工具、文档开源。加入我们QQ群 591679055获取更多支持,共同研究CC2640R2F&BLE5.0。

© Copyright 2017, 成都乐控畅联科技有限公司.

CC2640R2F BLE5.0 BLE吞吐量测试相关推荐

  1. CC2640R2F BLE5.0 PacketSniffer BLE 抓包

    PacketSniffer BLE 抓包 对于任何复杂协议的深入学习,我们都建议一个通用的学习方法,从规范->实现->抓包,规范是无关编程语言.语法文档表达,实现是各家SDK.API.源码 ...

  2. CC2640R2F BLE5.0 CC2640R2F/BLE5.0 距离测试

    说明 本文根据使用成都乐控畅联公司自主设计的开发板进行距离测试,同时对比官方LaunchPad.测试环境选在城市公路边,无线环境比较复杂.本公司的测试结果仅供参考. 软件环境 SmartRF Stud ...

  3. CC2640R2F BLE5.0 CC2640R2BLE5.0开发文档

    CC2640R2&BLE5.0开发 关于我们 关于我们 开发板介绍 文章所有代码.工具.文档开源.加入我们QQ群 591679055获取更多支持,共同研究CC2640R2F&BLE5. ...

  4. CC2640R2F BLE5.0 CC2640R2F Evaluation Board功耗测量

    CC2640R2F Evaluation Board功耗测量 简介 蓝牙低耗能标准在开发过程中就考虑到了长电池寿命, 可支持器件依靠单节纽扣电池运行数年.我们假定读者对基本的电气功能概念有所了解, 并 ...

  5. CC2640R2F BLE5.0 开发工具集

    CC2640R2BLE5.0开发工具集 对于CC2640开发的全部工具集,我们建议直接从官方下载,因为整个TI Simplelink工具集更新频率特别快,一定程度上的更新会导致向上不兼容或者功能性的差 ...

  6. CC2640R2F BLE5.0 蓝牙协议栈GAP Bond管理和LE安全连接

    GAP Bond管理和LE安全连接 GAP Bond Manager是一个可配置的模块,使用Bond manager后应用程序可以减少大部分安全机制.下表列出了术语. 术语 描述 配对(Pairing ...

  7. CC2640R2F BLE5.0 CC2640R2F软件架构

    软件架构 开发模型 下图展示CC2640R2F支持的两种开发模型,本文讲解都集中在图一,也就是整个ble协议栈和应用都工作在一个CC2640R2F的单SOC解决方案. 单一设备:Controller. ...

  8. CC2640R2F BLE5.0 蓝牙协议栈Off-Chip OAD功能

    Off-Chip OAD 本节描述了分离镜像的片外OAD(Split Image Off-Chip OAD)和片外OAD库(Library off-chip OAD)之间的差异.片外OAD利用一个外部 ...

  9. CC2640R2F BLE5.0 开发向导

    入门 磨刀不误砍柴工,这个章节我们先详细讲解TI SimpleLink低功耗蓝牙无线MCU CC2640R2F的学习路线图.无论你是经验丰富还是才入门的的开发人员,TI都提供了各种资源,以简化CC26 ...

最新文章

  1. 【Python 第8课】while
  2. Oracle:ORA-12560和ORA-01031
  3. spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序...
  4. 用户注册 - 判断用户名存在
  5. 反射获取list泛型_Android 从浅到懂使用反射机制
  6. 数据库---初识sql语句
  7. pgsql thinkphp5_thinkphp 连接postgresql
  8. java 补丁差异_差异和补丁简介
  9. SAP License:ERP系统中供应商管理怎么做?
  10. 图片转化为base64编码python版本
  11. 《淘宝网开店 进货 运营 管理 客服 实战200招》——1.11 开店前要做好调查,预测市场...
  12. 遗传算法的c语言实现,基本遗传算法的C语言实现
  13. java生成离散型随机数_几种随机数生成方式
  14. MDK-ARM_V525新建工程 STM32使用软件仿真、RAM仿真调试及Flash下载配置详解
  15. 解决excel转pdf出现的折行问题
  16. VB无所不能之七:VB的多线程(2)
  17. ArcGIS 矢量数据拓扑编辑
  18. linux网络编程--Web Server and HTTP
  19. 2022年K1刷第三方固件教程
  20. guest用户计算机管理中没有,guest账户开启与关闭

热门文章

  1. 重磅!百度超级链获得教育部1+X职业技能培训资质
  2. Android cec设备,Android HDMI CEC控制服务
  3. springboot的java打印票据-4
  4. 评测 i5 13600kf和r7 5800x3D差距 酷睿i513600kf和锐龙r7 5800x3D选哪个好
  5. 用自编码器对数据进行降维
  6. [Linux]什么是Linux根社区
  7. PCL安装教程 1.8.0+VS2013+cmake+QT5.5.1
  8. IDC X 得帆 |低代码PaaS驱动集团企业数字化创新
  9. 逻辑回归、逻辑回归的损失和优化
  10. 好教程推荐系列:《Qt 5.9 C++开发指南》