Hi Nordic Team,
I am currently developing a commercial product using the nRF Connect SDK (NCS). The system consists of several nRF52 peripherals and a PC-based application that communicates with them via an nRF52840 Dongle.
I am trying to determine the best software architecture for the Dongle to ensure long-term maintainability and ease of deployment for end-users on Windows.
The Requirements:
-
Multi-link Support: The Dongle acts as a Central and needs to connect to multiple peripherals (e.g., 3-5 devices) simultaneously.
-
Dynamic Provisioning: The PC application must instruct the Dongle to scan, select specific target devices, and store them (e.g., using NVS/Settings) so they auto-connect on future power cycles.
My Dilemma:
Option A: Connectivity Firmware + pc-ble-driver
I know this is used by nRF Connect for Desktop. However, I read that pc-ble-driver is in Maintenance Mode and not actively developed for NCS.
-
Concern: I am worried about future support, "DLL hell" during deployment, and the complexity of managing the BLE state machine entirely on the PC side (Python/C++).
Option B: Custom Firmware (NCS) + USB CDC ACM
I implement a custom firmware on the Dongle using NCS. The Dongle handles the BLE stack (scanning/connecting/filtering) and exposes a simple custom protocol (AT commands or binary) via USB CDC to the PC.
-
Plan: The PC sends commands like SCAN, ADD_TARGET <MAC>, and the Dongle handles the rest.
-
Concern: This requires designing a custom serial protocol to map multiple connection handles to the UART stream.
My Questions:
-
For a new NCS-based commercial project starting in 2024/2025, implies Option B (Custom USB CDC) is the recommended path, correct? Is pc-ble-driver effectively obsolete for new custom designs?
-
Are there any specific NCS samples or reference designs for a "Command-based Central"? I am looking for best practices on how to structure the USB CDC handler to manage dynamic provisioning (scanning/bonding commands) vs. raw data throughput.
-
Does the standard USB CDC ACM driver in Windows handle high-throughput data from multiple BLE links well, or should I be aware of any buffering bottlenecks in Zephyr?
Thanks for your time and guidance!