From b7b6475ee9682378d3d64bb0e9fe54b208021dc5 Mon Sep 17 00:00:00 2001 From: njord Date: Mon, 22 Jun 2026 16:10:27 +0200 Subject: [PATCH] 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 --- docs/migration-notes.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/docs/migration-notes.md b/docs/migration-notes.md index 3549a19..ebbe8d9 100644 --- a/docs/migration-notes.md +++ b/docs/migration-notes.md @@ -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`).