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 мс.

Другие вопросы по тегам