Уменьшить возникновение ошибки отключения Instant Passed (0x28) BLE

Я разрабатываю приложение на модуле STM32 SPBTLE-1S (BLE 4.2). Модуль подключается к Raspberry Pi.

При низком качестве соединения иногда происходит отключение с кодом ошибки 0x28 (Причина: Мгновенно пройдено) до того, как истечет время ожидания соединения.

Текущие настройки подключения:

Conn_Interval_Min: 10

Conn_Interval_Max: 20

Slave_latency: 5

Timeout_Multiplier: 3200

Если читать больше об этом типе ошибок, кажется, что это происходит, когда "PDU LMP или LL PDU, который включает в себя момент, не может быть выполнен, потому что момент, когда это должно было произойти, уже прошел". Эти пакеты обычно используются для скачкообразной перестройки частоты или для обновления соединений. В моем случае это должны быть пакеты с расчетом частоты.

Есть идеи, как предотвратить эти отключения, вызванные ошибками "Instant Passed"? Или они просто следствие технологии BLE?

1 ответ

Решение

Ваш вопрос похож на этот

Вкратце, есть только два возможных запроса канального уровня, которые могут привести к этому типу отключения (называемого LL_CONNECTION_UPDATE_IND & LL_CHANNEL_MAP_INDв последней версии Bluetooth Core Spec v5.2)

Если у вас есть доступ к низкоуровневой прошивке для стека bluetooth на встроенном устройстве, то, что я сделал в прошлом, - это увеличил количество слотов в будущем, на котором установлен переключатель "Instant", чтобы было больше времени для пакета проходить в шумной обстановке.

В противном случае лучшее, что вы можете сделать, - это попытаться ограничить количество раз, когда вы изменяете параметры соединения, чтобы снизить вероятность возникновения такого типа отключения. (Отключение по-прежнему может быть вызвано изменением карты каналов, но я не видел, чтобы многие стеки BLE открывали много конфигурации, когда это происходит.)

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