私は Bluetooth メッシュ ネットワーク ソリューションに取り組んでおり、範囲を広げる必要があります。
nrf52840 DK と nrf52840 ドングル、nrf5SDKforMeshv310 を使用しています。Nordic Devzone で、メッシュ用の NRF SDK で BLE 長距離モードを有効にするソリューションを見つけました。
ノート!ソリューションが Bluetooth Mesh 標準に準拠していないことは承知しています。
次の変更が nrf5 SDK for Mesh v310 に適用されました。
- Advertise.c では、set_default_broadcast_configuration() が radio_mode を変更して、RADIO_MODE_BLE_1MBIT の代わりに RADIO_MODE_NRF_62K5BIT を使用するようにしました。
- scanner.c で、scanner_config_reset() は、RADIO_MODE_BLE_1MBIT の代わりに RADIO_MODE_NRF_62K5BIT を使用するように scanner_config_radio_mode_set() を変更しました。
- 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 Viewer を使用)。また、Bluetooth とメッシュのログ レベルを DEBUG に上げようとしましたが、メッセージが不正な形式または拒否された兆候は見られません。
Zephyr側でどの方向に掘り下げる必要があるか、誰かがアイデアを持っているかもしれませんか?