蓝牙5.0速率测试
1.测试原理:
烧入ble_app_uart例程的nrf52840开发板通过蓝牙与手机APP交互,当Notification has been enabled时启动timer同时发送数据,获取发送成功的数据大小和时间,最后得到速率。
2. 测试过程:
在ble_app_uart程序中创建一个timer,当 Notification has been enabled时开始timer同时发送数据;
利用全局变量m_cnt_5ms获得调用timer的次数得到时间:m_cnt_5ms30(ms),利用函数ble_send持续发送数据data_array,当返回值是NRF_SUCCESS时,记录发送的bytes:m_len_sent=m_len_sent+lenght(bytes);得到rate=m_len_sent10/(m_cnt_5ms*30/100(B/s)。
在主循环中调用发送函数ble_send()。
3. 出现的问题:
(1). 使用rate=m_len_sent1000/(m_cnt_5ms30)(B/s)时会出现发送的数据太大时,rate会变为0,这是因为当m_len_sent1000太大时,会超过uint32_t型的最大值,使得式m_len_sent1000变为0;所以改成式rate=m_len_sent10/(m_cnt_5ms30/100)(B/s)可以测足够大的数据。
(2). 当我使用下图的方式计算数据时,rate会很大,这是因为计算速率时会把丢的包也计算进去;
可以加上如下if语句,只有ble_nus_data_send返回正确时,才认为数据包正确发送,然后才能算入m_len_set中:
这样也不会发生丢包的情况。
4.测试结果:
下行速率(即手机接收开发板数据的速率):
5.测试结论:
在Minimum acceptable connection interval 8、 Maximum acceptable connection interval 12、
NRF_SDH_BLE_GATT_MAX_MTU_SIZE 247的配置下测出下行速率(即手机接收开发板数据的速率)为:8KB/S左右
6.流程图:
这是我的程序流程图: