Top.Mail.Ru
Пример: bluedroid g...
 
Уведомления
Очистить все

Пример: bluedroid gatts_table_creat_demo отправляет пакеты с задержками.

(@igoravr)
Level 1

Здраствуйте.
Я использую пример gatts_table_creat_demo esp-idf-v5.3.1.
Минимальное количество изменений. В основном цикле он должен отправлять пакеты каждые 19 мс.

while (1) {
esp_ble_gatts_send_indicate(ESP_GATTS_temp, param_write_conn_id_temp, heart_rate_handle_table[IDX_CHAR_VAL_A], size of(esp_ble_buffer), esp_ble_buffer, false);
vTaskDelay(19/ portTICK_PERIOD_MS);
}

Но данные поступают с разными задержками. Получается после команды esp_ble_gatts_send_indicate проходит разное время до отправки самого пакета.

Со стороны принимающей стороны посчитали задержку (время) между пакетами (мс).: 23, 31, 6, 22, 30, 5, 25, 33, 8, 22, 31, 7, 29, 21, 32, 10, 19, 5, 24, 30, 13, 50, 15, 14, 13, 20, 6, 18

Насколько я понимаю, esp_ble_gatts_send_indicated загружает данные в буфер, из которого они отправляются. Но я не могу понять, как сделать так, чтобы эти данные отправлялись немедленно? Или с минимальной задержкой.

Цитата
Создатель темы Размещено : 07.02.2025 14:23
Aveal
(@aveal)
Top level Admin

Добрый день, набросаю, что сходу всплыло в памяти )

Возможно поможет уменьшение min_int в структуре esp_ble_conn_update_params_t:

изображение

Величина в min_int умножается на 1.25 мс. По спецификации (опять же, насколько помню) минимально допустимое значение 7.5 мс, то есть min_int = 6.

ОтветитьЦитата
Размещено : 07.02.2025 15:18
(@igoravr)
Level 1

@aveal  Похоже это улучшило ситуацию... плюс добавил conn_params.max_int = 0x6; ))

 

Теперь пакеты приходят с таким интервалом:

25
16
16
17
22
23
23
15
19
22
28
17
14
20
21
25
21
12
22
13
20
47
4
17
22
24
17
16
17
16
23
29
17
15
19
22
29
17

Но есть такие паразиты: 47 и 4, видимо когда выполнение esp_ble_gatts_send_indicate приходится на неподходящий интервал.  хотя min_int = 6 это 7,5мс. откуда беруться эти 47мс.

ОтветитьЦитата
Создатель темы Размещено : 07.02.2025 16:10
Aveal
(@aveal)
Top level Admin

@igoravr возможно пропускает по какой-то причине, на длительной выборке какая статистика? то есть как часто сильно отличающиеся значения обнаруживаются?

ОтветитьЦитата
Размещено : 08.02.2025 11:58
(@igoravr)
Level 1

@aveal

Эти "паразиты" оказались не самой худшей проблемой, такая относительно красивая картинка получается только при отправки пакетов 50 раз в сек(20мс). и при настройках: 

conn_params.max_int = 0x06; // *1.25ms

conn_params.min_int = 0x06; // *1.25ms

Как только я меняю частоту вызова esp_ble_gatts_send_indicate  на 60 раз в сек.(17мс между пакетами) получаю такую картину(С принимающей стороны задержка между пакетами (мс):

6 4 4 4 4 12 10 8 11 15 20 9 14 24 16 16 17 19 16 16 17 16 17 16 18 18 16 16 17 17 17 18 16 16 17 16 16 21 12 23 28 16 8 48 9 4 14 19 9 24 9 15 25 17 10 27 7 12 12 22 26 21 9
21 16 17 16 18 17 16 17 25 10 22 6 20 17 17 16 18 17 17 14 18 18 21 7 22 16 17 17 23 5 22

А это с частотой 100 пакетов в сек(10мс):

5 5 5 4 4 5 5 5 4 4 4 4 9 4 20 8 4 4 4 4 4 9 4 9 5 0 4 6 4 8 14 6 9 18 8 14 31 5 4 8 4 6 10 5 7 16 16 4 4 8 17 8 3 14 5 7 14 17 4 7 15 4 20 8 5 12 4 21 4 11 9 10 16 5 4 32 4 9 4 17 5 8 4 16 9 16 7 11 4 11 8 3 14 4 22 17 4 7 15 10 5 9 8 10 7 15 4 24 5 4 23 4 7 13 8 17 7 12 3 4 26 9 4 13 8 15 9 4 15

200 пакетов в сек(5мс):

4 5 4 4 4 7 4 9 4 15 4 3 4 4 4 3 4 4 7 4 5 3 4 3 9 4 3 5 4 9 4 4 10 4 13 5 4 4 4 4 3 4 3 8 4 4 3 8 6 4 4 4 13 6 7 8 4 4 4 4 3 4 4 3 4 13 3 4 4 3 4 3 5 4 5 4 20 4 4 3 4 4 4 4 3 7 5 3 4 7 6 4 4 4 3 9 4 5 3 6 7 4 14 4 3 3 4 3 4 4 3 4 4 4 4 4 3 12 4 4 4 4 5 3 4 4 4 15 4 4 4 4 3 4 4 4 5 4 11 6 3 4 4 4 6 4 4 4 4 9 4 4 4 3 4 5 5

120 пакетов в сек(8333мкс)(требуемая частота):

4 4 4 4 4 8 16 4 5 4 4 8 6 4 4 9 5 7 8 4 4 13 9 8 4 4 11 6 4 12 9 4 7 11 7 4 9 4 21 4 11 8 8 4 10 13 9 4 15 4 3 4 22 8 4 4 10 4 5 14 18 5 7 4 12 12 4 8 14 9 4 4 17 9 12 4 9 4 11 4 7 6 11 4 20 11 10 5 11 4 5 9 29 4 8 9 6 4 18 3 4

Похоже есть временной интервал кратный условно 20 мс который прерывает отправку, или пустой буфер отправки проверяется каждые 20 мс...

При отправке need_confirm:false используется семафор buff_semaphore и задача btc_task но каких-то задержек найти не удается..(

ОтветитьЦитата
Создатель темы Размещено : 09.02.2025 14:47
Aveal
(@aveal)
Top level Admin

@igoravr у меня на самом деле нет уверенности, что через ble получится четкий временной интервал получить.

ОтветитьЦитата
Размещено : 10.02.2025 16:45
(@igoravr)
Level 1

@aveal Проблема не  в  БЛЕ как таковом, может в настройках драйвера/соединения bluedroid или самой Freertos но вот в чем конкретно....., к примеру в nRF52810 таких проблем нет, с каким интервалом пакеты отправляешь с таким и получаешь +-..

ОтветитьЦитата
Создатель темы Размещено : 10.02.2025 17:21
Aveal
(@aveal)
Top level Admin

Запись от: @igoravr

к примеру в nRF52810 таких проблем нет, с каким интервалом пакеты отправляешь с таким и получаешь +-..

Тогда да, другое дело... Хотя и удивительно для меня, что дает реально четкий период.

 

ОтветитьЦитата
Размещено : 10.02.2025 17:44
Aveal
(@aveal)
Top level Admin

 В sdkconfig нет каких-нибудь потенциально многообещающих настроек? Можно оптимизацию, энергосбережение итд посмотреть чисто чтобы увидеть, разница вообще будет или нет.

ОтветитьЦитата
Размещено : 10.02.2025 17:48
(@igoravr)
Level 1

Настройки как только не крутил. и 240 МГц  тоже. и wi-fi отключал. и уже все подряд, но ноль реакции только хуже)

 

Пока докапал что используется семафор buff_semaphore, и возможно очередность его обработки какая-то кривая, но не могу разобраться какая, т.к. похоже он просто как счетчик используется.

И отправка идет из задачи btc_task с небольшим приоритетом #define BTC_TASK_PRIO          (BT_TASK_MAX_PRIORITIES - 6) но как только меняю приоритет то БТ перестает работать....

Осталось только NimBLE попробовать.... может с ним из коробки заработает.

ОтветитьЦитата
Создатель темы Размещено : 12.02.2025 19:45
(@igoravr)
Level 1

Покрутил настройки NimBLE

лучший результат при 60 пакетах в сек:

2 1 6 2 2 1 2 9 2 1 2 7 2 2 1 20 3 6 15 2 23 6 2 19 17 3 2 1 7 77 9 29 3 3 4 1 2 2 8 16 2 17 2 2 2 2 37 3 3 8 3 2 36 3 2 3 25 3 1 2 30 44 7 9 3 9 2 1 2 1 58 6 11 7 2 1 8 1 7 16 2 1 1 27 2 16 2 25 8 15 1 2 20 8 11 6 20 3 6 1 77 15 2 2 1 2 2 1 65 2 22 2 1 30 3 1 4 2 2 2 7 3 3 1 11 3 2 6 28 7 14 2 23 11 1 2 2 32 2 6 2 35 17 2 2 2 18 29 2 6 13 2

ОтветитьЦитата
Создатель темы Размещено : 14.02.2025 11:59
Aveal
(@aveal)
Top level Admin

@igoravr тут еще хуже получается стабильность, отсчеты в рамках 15-17 мс по пальцам можно пересчитать. И одной руки хватит )

ОтветитьЦитата
Размещено : 14.02.2025 12:38
Поделиться: