Как включить Long Range для BLE Mesh в Zephyr OS - PullRequest
1 голос
/ 11 июня 2019

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

Я использую ключи nrf52840 DK и nrf52840, nrf5SDKforMeshv310. В скандинавских 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, но не вижу признаков того, что сообщения искажены или отклонены.

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

...