我正在研究蓝牙网状网络解决方案,我需要增加范围。
我正在使用 nrf52840 DK 和 nrf52840 加密狗,nrf5SDKforMeshv310。在 Nordic Devzone 中,我找到了在 NRF SDK 中为网格启用 BLE 远程模式的解决方案。
笔记!我知道解决方案不符合蓝牙 Mesh 标准。
Mesh v310 的 nrf5 SDK 应用了以下更改:
- 在 Advertisement.c 中,set_default_broadcast_configuration() 将 radio_mode 更改为使用 RADIO_MODE_NRF_62K5BIT 而不是 RADIO_MODE_BLE_1MBIT。
- 在scanner.c 中,scanner_config_reset() 将scanner_config_radio_mode_set() 更改为使用RADIO_MODE_NRF_62K5BIT 而不是RADIO_MODE_BLE_1MBIT。
- 在 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) ); }
在 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 方面挖掘的方向有想法吗?