藍牙5.0速率測試

藍牙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.流程圖:

這是我的程序流程圖:
在這裏插入圖片描述