Raspberry Pi3 BLE в качестве центрального устройства, принимающего только один пакет за интервал соединения - gatttool/hcitool
Я был бы признателен, если кто-то может объяснить одну проблему, с которой я столкнулся, когда Raspberry Pi 3 модель B выступает в качестве центрального устройства на соединении BLE с периферийным устройством.
Во-первых, я успешно подключаю оба устройства и включаю уведомления на центральном устройстве с помощью следующих команд hcitool/gatttool:
sudo hciconfig hci0 up
sudo gatttool --adapter=hci0 --device=XX:XX:XX:XX:XX:XX --adr_type=random --mtu=23 -I
[][LE]> connect
[][LE]> char-write-req 0x000c 0100
После этого я начал получать уведомления на Raspberry Pi3 модель B и, используя анализатор BLE, проверяю, что он получает 5 пакетов BLE с уведомленными значениями за интервал подключения (то есть, все в порядке), который по умолчанию установлен равным 54 (67,5мс). Однако, как только оба устройства подключены, я обновляю параметры подключения, чтобы изменить интервал подключения, то есть 24 (30 мс), используя следующую команду hcitool:
sudo hcitool lecup --handle=XX --min=24 --max=24
И проблема, которую я обнаружил, заключается в том, что после обновления параметров подключения я проверил, что Raspberry Pi3 модель B начинает получать только 1 пакет BLE за интервал подключения (это не нормально). Такое же поведение наблюдается при обновлении параметров соединения до более высоких значений интервала соединения, то есть 800 (1 с).
Может ли кто-нибудь дать мне объяснение этой проблемы? Кроме того, может ли кто-нибудь попытаться воспроизвести эту процедуру и проверить, наблюдается ли та же проблема?
Спасибо
1 ответ
hcitool lecup использует hci_le_conn_update ( http://elixir.free-electrons.com/linux/latest/source/net/bluetooth/hci_conn.c#L321), который устанавливает min_ce_len и max_ce_len в 0, что означает, что он намекает контроллеру, что длительность события соединения должна быть 0*0,625 мс. Вы этого не хотите. Вы хотите, чтобы он был таким же, как ваш интервал соединения, если вы хотите продолжать посылать пакеты в течение всего интервала.
Чтобы проверить, чтобы установить длину CE, используйте вместо этого команду raw:
sudo hcitool cmd 0x08 0x13 0x40 0x00 0x18 0 0x18 0 0 0 0x60 0 0x30 0 0x30 0
Это выдает запрос на обновление параметров соединения для дескриптора 0x0040, с интервалом соединения min/max=24*1,25 мс, задержка ведомого =0, время ожидания =960 мс, интервал CE мин / макс =48*0,625 мс.