nrf52832增大数据吞吐量

随着蓝牙性能的提升,BLE的应用领域不再局限于微数据传输,在BLE 4.2上已经突破20字节的限制。
现在nrf52832 SDK13.0上实验Extended MTU 功能,理论上可以使得蓝牙传输速率达到80KByte/s(我没有实际测试速率,如果有人试验了欢迎交流)。

**SDK版本:SDK13.0.0 协议栈S132 V4.0.2
在example/ancs工程上修改,添加了nus服务用于测试**

在主机和从机建立链接时,会发起一个交换MTU_SIZE的请求来使得两者的通信能采用一个最适合的MTU,具体的过程及各个场景可以研究这里exchange MTU_SIZE配合nrf_ble_gatt.c里的代码理解整个过程

总的来说就是主机发起请求,双方交换意见,最终取一个双方都能接受的最大数值

修改分为三步,我是在官方论坛上找到的方法DLE and extended MTU

在sdk_config.h 中修改NRF_BLE_GATT_MAX_MTU_SIZE为247
nrf52832增大数据吞吐量_第1张图片
在ble_stack_init 中修改
nrf52832增大数据吞吐量_第2张图片

在广播中加上标签
nrf52832增大数据吞吐量_第3张图片

完成以上修改后会发现系统启动不了,这是因为修改了MAX_MTU后需要调整RAM的位置

最好是根据打开RTT打印信息,根据提示来修改
我的修改是:nrf52832增大数据吞吐量_第4张图片

接下来就可以测试:通过notify发送一个较大的数据作为一包数据传给手机端

void test_extendedMTU(void)
{
uint8_t testbuf[247-3]={0};
for(uint8_t cnt=0;cnt<sizeof(testbuf);cnt++)
{
    testbuf[cnt]=cnt;
}
send_notify(testbuf,sizeof(testbuf));
}

send_notify是以ble_nus_string_send为原型做了一层封装,作用是发送一个notify给client端。

测试结果: 如果client端是iphone7 ,结果在lightblue上收到了244个字节
如果client端是iphone6s,结果在lightblue上收到181个字节

原因是iphone6s 支持的最大MTU是185byte

nrf52832增大数据吞吐量_第5张图片

你可能感兴趣的:(BLE,nRF52832)