Уменьшить возникновение ошибки отключения 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 открывали много конфигурации, когда это происходит.)