u/cuzimrave

Vanilla Zephyr port of Qorvo DW3xxx UWB SDK [open source, debugging help welcomed]
▲ 13 r/Zephyr_RTOS+1 crossposts

Vanilla Zephyr port of Qorvo DW3xxx UWB SDK [open source, debugging help welcomed]

Qorvo’s UWB SDK ships with deprecated nRF5 SDK 17.1.0 + FreeRTOS. No public reference exists for porting it to vanilla Zephyr. Nordic confirmed this on their DevZone in 2023. Most people end up using br101’s open-source decadriver (no FiRa MAC) or staying on FreeRTOS.

I needed the full MAC for a project, so I spent a couple of weeks writing the port: https://github.com/amstrdm/dw3xxx-sdk-zephyr

Feel free to have a look if it’s of interest to you I‘d appreciate a star since that increases the chance of someone from qorvo seeing it and helping to get the rest working :)

You’re also very welcome to help drive this forward just submit an issue/PR

I achieved west module integration, DT bindings for DW3xxx family, Kconfig, all OSAL shims rewritten for Zephyr (qsignal/qtimer/qthread/qspi/qgpio/qpwr), mcps_crypto wrapper on mbedTLS, SPI/wake/IRQ, FiRa session init, Block 0 fires and completes.

As a note there is some stuff that still has issues and/or doesn’t work properly yet. Block 1 never fires. After Block 0, the MAC binary does ~46 SPI transactions then goes silent. Chip is healthy (IDLE_PLL, clean status). Since the MAC is a precompiled .a, can’t debug from outside. Probably a FreeRTOS assumption the OSAL shims don’t capture, but I’m guessing.

The README documents architecture, all the patches needed, and known limitations. If you’ve debugged blob-on-different-RTOS issues before, the Block 1 failure might be obvious to you. If you’re looking at vanilla Zephyr + DW3xxx, the working layers are a solid starting point even if you skip the MAC.

Footprint on nRF52833 with MAC linked: ~85% flash, ~70% RAM before app logic. 52840/5340 recommended.

u/cuzimrave — 2 days ago