docs: confirm Pico W BLE unsupported in Zephyr mainline too

Checked Zephyr main: dts/bindings/bluetooth has only UART-based Infineon BT-HCI
bindings (infineon,bt-hci-uart / cyw208xx-hci / bless-hci) and no
CYW43-BT-over-gSPI HCI driver; rpi_pico_rp2040_w.dts only adds
infineon,cyw43-gpio. So Pico W BLE needs a custom out-of-tree HCI driver.
Working BLE remains available on a controller board (e.g. ESP32 hci_esp32).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
njord 2026-06-22 16:10:27 +02:00
parent 8cb641da5a
commit b7b6475ee9

View File

@ -140,12 +140,15 @@ All application sources compile cleanly (no warnings) once the overlays use `gpi
`gpio-keys` wrappers (bare `gpios`-only nodes don't get the GPIO cell macros) and the ADC node
is named exactly `zephyr,user`.
**Pico W BLE caveat (verified):** the `rpi_pico/rp2040/w` image links with the BLE stack, but
mainline Zephyr v3.7 exposes **no Bluetooth HCI transport for the Pico W** — its CYW43 BT
shares the Wi-Fi gSPI bus (no BT UART) and the in-tree AIROC driver (`h4_ifx_cyw43xxx`) is
UART/H4 only. So `bt_enable()` returns `-ENODEV` at runtime and BLE does not advertise; the
rest of the firmware runs normally (handled gracefully in `ble_nus_init`). The identical
`ble_nus.c` builds and links against a real controller on `nrf52840dk`, confirming the BLE
code is correct — only the Pico W transport is missing from Zephyr. It will work unchanged
once Zephyr provides a CYW43 BT-over-gSPI HCI driver + a `chosen { zephyr,bt-hci }` for the
board (or on any radio board such as ESP32).
**Pico W BLE caveat (verified against v3.7.0 *and* mainline):** the `rpi_pico/rp2040/w` image
links with the BLE stack, but Zephyr exposes **no Bluetooth HCI transport for the Pico W**. Its
CYW43439 BT is tunneled over the shared Wi-Fi gSPI bus (there is no BT UART), and Zephyr has no
CYW43-BT-over-gSPI HCI driver — the in-tree Infineon BT bindings are all UART-based
(`infineon,bt-hci-uart`, `infineon,cyw208xx-hci`, `infineon,bless-hci`); `main`'s
`rpi_pico_rp2040_w.dts` only adds an `infineon,cyw43-gpio` node (Wi-Fi/GPIO), no `bt-hci`. So
`bt_enable()` returns `-ENODEV` at runtime and BLE does not advertise; the rest of the firmware
runs normally (handled gracefully in `ble_nus_init`). The identical `ble_nus.c` builds and
links against a real controller on `nrf52840dk`, confirming the BLE code is correct — only the
Pico W transport is missing from Zephyr. Getting it would require a custom out-of-tree HCI
driver tunneling HCI over the cyw43 gSPI (what the Pico SDK + BTstack do). It will otherwise
work unchanged on any radio board with a controller, e.g. ESP32 (`hci_esp32`).