Как включить Long Range для BLE Mesh в Zephyr OS

Я работаю над решением для ячеистой сети Bluetooth, и у меня есть требование увеличить дальность.

Я использую ключи nrf52840 DK и nrf52840, nrf5SDKforMeshv310. В Nordic Devzone я нашел решение, которое включает режим BLE на большие расстояния в NRF SDK для сетки.

НОТА! Я знаю, что решение не соответствует стандарту Bluetooth Mesh.

Следующие изменения были применены к nrf5 SDK для Mesh v310:

  1. В advertise.c set_default_broadcast_configuration() изменил radio_mode для использования RADIO_MODE_NRF_62K5BIT вместо RADIO_MODE_BLE_1MBIT.
  2. В scanner.c scanner_config_reset() изменил scanner_config_radio_mode_set() для использования RADIO_MODE_NRF_62K5BIT вместо RADIO_MODE_BLE_1MBIT.
  3. В radio_config.c radio_config_config() добавила следующий код в конце:
    if (p_config->radio_mode==RADIO_MODE_NRF_62K5BIT ){
        NRF_RADIO->PCNF0 |=(
                    ((RADIO_PCNF0_PLEN_LongRange << RADIO_PCNF0_PLEN_Pos) & RADIO_PCNF0_PLEN_Msk) |
                    ((2 << RADIO_PCNF0_CILEN_Pos) & RADIO_PCNF0_CILEN_Msk) |
                    ((3 << RADIO_PCNF0_TERMLEN_Pos) & RADIO_PCNF0_TERMLEN_Msk) );
    }
    
  4. В broadcast.c добавлено time_required_to_send_us():

    if (radio_mode == RADIO_MODE_NRF_62K5BIT)
    {
        packet_length_in_bytes +=RADIO_PREAMBLE_LENGTH_LR_EXTRA_BYTES;
    }
    

    Определено RADIO_PREAMBLE_LENGTH_LR_EXTRA_BYTES = 9 в том же файле

    Изменен 5-й элемент в radio_mode_to_us_per_byte[] со 128 на 64.

    НОТА. что дальний режим неправильно маркирован. В заголовочном файле он называется RADIO_MODE_NRF_62K5BIT, но вместо этого соответствует режиму BLE на 125 кбит / с.

К сожалению, для реле я вынужден использовать Zephyr для поддержки функции друга, а Zephyr не передает сообщения после применения изменений в NRF SDK. Я провел небольшое расследование на стороне Zephyr и обнаружил, что биты кода для BLE-диапазона, описанные выше для NRF SDK, находятся на месте и могут быть включены с использованием следующих настроек Kconfig:

CONFIG_BT_AUTO_PHY_UPDATE=y
CONFIG_BT_PHY_UPDATE=y
CONFIG_BT_HCI_MESH_EXT=y
CONFIG_BT_CTLR_PHY=y
CONFIG_BT_CTLR_ADV_EXT=y
CONFIG_BT_CTLR_ADVANCED_FEATURES=y
CONFIG_BT_CTLR_PHY_2M=y
CONFIG_BT_CTLR_PHY_CODED=y

Но все же я не вижу, чтобы сообщения передавались на стороне Zephyr (с помощью J-Link RTT Viewer). Я также пытался повысить уровень журнала для Bluetooth и Mesh до DEBUG, но я не вижу признаков того, что сообщения искажены или отклонены.

Может быть, у кого-то есть идеи, в каком направлении мне следует раскопать на стороне Зефира?

0 ответов

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