4

我正在研究蓝牙网状网络解决方案,我需要增加范围。

我正在使用 nrf52840 DK 和 nrf52840 加密狗,nrf5SDKforMeshv310。在 Nordic Devzone 中,我找到了在 NRF SDK 中为网格启用 BLE 远程模式的解决方案。

笔记!我知道解决方案不符合蓝牙 Mesh 标准。

Mesh v310 的 nrf5 SDK 应用了以下更改:

  1. 在 Advertisement.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

    将 radio_mode_to_us_per_byte[] 中的第 5 个元素从 128 更改为 64。

    笔记。远程模式被贴错标签。它在头文件中称为 RADIO_MODE_NRF_62K5BIT,但对应的是 125kbps BLE 远程模式。

不幸的是,对于中继,我被迫使用 Zephyr 来支持朋友功能,并且在对 NRF SDK 应用更改后,Zephyr 没有中继消息。我在 Zephyr 方面做了简要调查,发现上述 NRF SDK 的 BLE 远程代码位已经到位,可以使用以下 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 查看器)中继消息。我还尝试将蓝牙和 Mesh 的日志级别提高到 DEBUG,但我没有看到任何消息格式错误或被拒绝的迹象。

可能有人对我应该在 Zephyr 方面挖掘的方向有想法吗?

4

0 回答 0