
Xbx nrf dongle
zuidec/xbx-nrf
A replacement bottom board for the Xbox Series X|S controller (model 1914) built on a Nordic nRF52840, with a 2.4 GHz USB dongle instead of Xbox Wireless / Bluetooth

A replacement bottom board for the Xbox Series X|S controller (model 1914) built on a Nordic nRF52840, with a 2.4 GHz USB dongle instead of Xbox Wireless / Bluetooth
Xbx nrf is an open-source printed circuit board by zuidec, from the zuidec/xbx-nrf repository on GitHub. It is a 4-layer board of 115.9 × 51.1 mm with 91 parts on 77 nets, routed with 899 tracks and 765 vias.
It is built around the MDBT50Q-U1MV2, A1304ELHLX-T and A3910EEETR-T, with the USBLC6-2SC6, PMEG2010ER and M2.5 among its other parts. Its parts include 24 capacitors, 16 resistors, 7 ICs, 4 diodes and 4 connectors. It belongs with the radio and wireless boards and the nRF52 and nRF5x boards of this library.
A replacement bottom board for the Xbox Series X|S controller (model 1914) built on a Nordic nRF52840. Uses a custom 2.4 GHz USB dongle instead of Xbox Wireless / Bluetooth for improved connectivity.
Status: Hardware Rev 1.1 up and running. Still in active development. Open tasks: todo.md.
This is for those of us who love the Xbox controller's shape but hate how bad the Bluetooth connectivity is. This started as a labor of love for my partner who can't find a controller she likes besides the Xbox controller but also can't stand the disconnects.
That being said, there are some real concessions. The most obvious is that the controller won't work with an Xbox anymore. Another concession is that support for the rechargeable battery packs, as well as the expansion and headphone ports was dropped.
┌─────────── Controller ───────────┐ ┌──── Dongle ────┐
│ Stock top board ─J3─ new board │ 2.4 GHz │ nRF52840 + USB │
│ buttons (PCAL6416) nRF52840 │◀────────▶│ XInput / HID │──▶ PC
│ power latch, boost radio, │ ESB │ gamepad │
│ USB-C, 2×AA input sticks, │ │ │
│ triggers, │ │ │
│ rumble │ │ │
└──────────────────────────────────┘ └────────────────┘| Area | Feature |
|---|---|
| Target | Xbox Series X|S Controller (model 1914) |
| Scope | New bottom board, stock top board, shell, triggers, motors reused |
| MCU | nRF52840 |
| Wireless | Nordic ESB 2.4 GHz. The project does NOT use Bluetooth! |
| Multiplayer | Up to 7 paired, 4 connected per dongle |
| Polling rate | 1 kHz with 1–2 controllers, 500 Hz with 3–4 |
| Dongle USB mode | HID gamepad (1 player) and XInput (4 players) |
| Battery | AAs only - basic rechargeables are OK, but no Play & Charge |
| Rumble | reuses all the stock motors, including triggers |
| Buttons | reuses stock with additional options for 2 AUX trigger switches and 4 paddles |
| Waking PC | Works in wireless AND wired mode! |
| Audio | None in v1 |
| Expansion port | None in v1 |
[!WARNING] Never put a bare Li-ion cell on the AA contacts: The boost converter appears to pass that straight through and the nRF52840 is only rated to 3.6v in this configuration! (docs/hardware.md).
The custom board replaces the stock bottom board in the controller. It plugs into the stock top board's 14-pin J3 connector. This provides power rails, USB, I2C to the button expander, and Guide / Pair / power-hold signals.
| Doc | Covers |
|---|---|
| docs/hardware.md | Top board power, J3 pinout, antennas, dongle pin map |
| docs/pcal6416.md | Button expander: button map, registers |
| docs/a3910.md | Rumble drivers: wiring, logic table |
| docs/teardown.md | Test controller teardown: motor wires |
Built using the nRF Connect SDK. Version is pinned at v3.4.1 to ensure future buildability (hopefully). The controller firmware has a target for the custom board and the dongle firmware has a target for the custom dongle as well as the PCA10059 dongle. You may notice there is a nice!nano/pro-micro target for the controller, but this is just for testing.
| Doc | Covers |
|---|---|
| docs/controller.md | Using it: power, pairing, LED, wired modes, calibration, waking the PC |
| docs/building.md | Setup; building the firmware, bootloader and configurator; versions |
| docs/flashing.md | Flashing and debugging |
| docs/protocol.md | Radio (pairing, time slots) and USB (HID, XInput) protocols |
| docs/gip.md | Xbox GIP protocol notes (optional mode) |
Desktop app for settings, calibration, input and rumble tests and firmware updates of both devices over USB using Python + Tkinter. So far only tested on Linux, but in theory should be buildable on Mac and Windows.
docs/ documentation
firmware/
boards/ our board definitions (xbx_controller, xbx_dongle)
bootloader/ UF2 bootloader build (upstream + our boards)
common/ shared code (include/protocol.h)
xbx-nrf/ controller app
dongle/ dongle app
ncs-version pinned SDK + toolchain
check-sdk.sh version check for build.sh
build.sh build (+ flash) script
pcb/xbx-nrf/ KiCad project, controller board (lib/: symbols,
footprints, 3D)
pcb/xbx-nrf-dongle/ KiCad project, dongle board
mech/ FreeCAD parts: controller-bottom-board/ (board outline),
dongle-enclosure/, aux-button-guide/ (CC BY-NC-SA remix)
references/ schematics, scans, datasheets, pinouts
tools/ configurator/, release scripts (pcb-release.sh,
release-notices.sh), test-rumble.sh
todo.md task listThis was built with the help of Claude Code. PCB designs are completely hand designed by myself, and all code was either written or reviewed by myself. However, there are likely still bugs present as this is a hobbyist project in early development. PCB designs may also have flaws for the same reasons. If you find and bugs or issues with the hardware, please open an issue to let me know.
Copyright (c) 2026 zuidec. Firmware and scripts: MPL-2.0. Hardware
design: CERN-OHL-S-2.0. Documentation: CC-BY-4.0. Third-party CAD
parts (SnapMagic, KiCad libraries) keep their CC-BY-SA-4.0 licenses; see the
ATTRIBUTION.md in each library folder. Details: LICENSE,
REUSE.toml, full texts in LICENSES/.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 13 | 100nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C1, C2, C3, C4, C5, C6, C7, C8, C9, C14, C19, C21, C22 |
| 9 | 1k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R6, R11, R12, R13, R14, R15, R16, R19, R20 |
| 6 | GND | Connector_Wire:SolderWirePad_1x01_SMD_1x2mm | TP5, TP6, TP7, TP8, TP14, TP16 |
| 4 | 100k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R2, R3, R4, R10 |
| 4 | 1uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C15, C16, C17, C20 |
| 4 | M2 | MountingHole:MountingHole_2.2mm_M2 | H1, H2, H5, H6 |
| 4 | PMEG2010ER | Diode_SMD:Nexperia_CFP3_SOD-123W | D1, D2, D3, D4 |
| 2 | 10uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C12, C18 |
| 2 | 2k2 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R8, R9 |
| 2 | 4.7nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C10, C11 |
| 2 | 9pF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C24, C26 |
| 2 | A1304ELHLX | Package_TO_SOT_SMD:SOT-23W | U2, U3 |
| 2 | A3910EEETR-T | Package_DFN_QFN:DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm | U5, U6 |
| 2 | M2.5 | MountingHole:MountingHole_2.7mm_M2.5 | H3, H4 |
| 2 | RKJXV122400R | rjkxv122400r:SW_RKJXV122400R | S1, S2 |
| 1 | 10k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R1 |
| 1 | 32.768kHz | xbx-nrf-lib:Crystal_SMD_3215-2Pin_3.2x1.5mm | Y1 |
| 1 | 4.7uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C13 |
| 1 | AO3401A | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | AUX1 | Connector_Wire:SolderWirePad_1x01_SMD_1x2mm | TP9 |
| 1 | AUX2 | Connector_Wire:SolderWirePad_1x01_SMD_1x2mm | TP10 |
| 1 | AUX3 | Connector_Wire:SolderWirePad_1x01_SMD_1x2mm | TP11 |
| 1 | AUX4 | Connector_Wire:SolderWirePad_1x01_SMD_1x2mm | TP12 |
| 1 | B_BTN | xbx-nrf-lib:Membrane_Contact_D8.0mm_Interdigitated | SW2 |
| 1 | GND | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | J5 |
| 1 | HV+ | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | SQ3 |
| 1 | HV- | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | SQ4 |
| 1 | LT+ | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | SQ1 |
| 1 | LT- | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | SQ2 |
| 1 | LT_AUX | Connector_Wire:SolderWirePad_1x01_SMD_1x2mm | TP13 |
| 1 | M50-3120745 | Connector_PinSocket_1.27mm:PinSocket_2x07_P1.27mm_Vertical_SMD | J2 |
| 1 | MDBT50Q-U1MV2 | xbx-nrf-lib:Raytac_MDBT50Q | U7 |
| 1 | NRST | xbx-nrf-lib:TestPoint_Pad_1.5x1.5mm-BigSilkscreen | TP1 |
| 1 | RST | Button_Switch_SMD:SW_SPST_B3U-1000P | SW1 |
| 1 | RT+ | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | SQ5 |
| 1 | RT- | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | SQ6 |
| 1 | RT_AUX | Connector_Wire:SolderWirePad_1x01_SMD_1x2mm | TP15 |
| 1 | SWD | Connector_JST:JST_SH_SM03B-SRSS-TB_1x03-1MP_P1.00mm_Horizontal | J1 |
| 1 | SWO | xbx-nrf-lib:TestPoint_Pad_1.5x1.5mm-BigSilkscreen | TP3 |
| 1 | TIM | xbx-nrf-lib:TestPoint_Pad_1.5x1.5mm-BigSilkscreen | TP4 |
| 1 | TLV70018_SOT23-5 | Package_TO_SOT_SMD:SOT-23-5 | U4 |
| 1 | UART | Connector_JST:JST_SH_SM03B-SRSS-TB_1x03-1MP_P1.00mm_Horizontal | J3 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U1 |
| 1 | VTREF | xbx-nrf-lib:TestPoint_Pad_1.5x1.5mm-BigSilkscreen | TP2 |
| 1 | WK+ | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | SQ7 |
| 1 | WK- | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | SQ8 |

zuidec/xbx-nrf
A replacement bottom board for the Xbox Series X|S controller (model 1914) built on a Nordic nRF52840, with a 2.4 GHz USB dongle instead of Xbox Wireless / Bluetooth

hnz1102/impedance-tester
Impedance Tester Adapter for Analog Discovery


tyevco/dial-me-spinner
A Bluetooth dial spinner about 70 mm across, built on the nRF52840. A heavy, balanced stainless flywheel ring spins around a stationary centre that holds a colour OLED and a ring of 48 addressable RGB LEDs.

Larson-Nick/SmartKnobController
This folder contains all mechanical and electrical design files for the Smart Knob Controller, created using KiCAD v9.0 and SolidWorks 2024.

Lyrux/DriftPad
Custom Hall-effect macropad with adjustable actuation and release points, analog magnetic key sensing, and an OLED display for real-time profiles, settings, and visual feedback.

tasmaniandroid/Philly_Node
The start of a Philly-Centric mesh node.

Andreuxxx1977/esp32-p4
An open-hardware, actively cooled ESP32-P4 board for heavy multimedia work: a 2-lane MIPI camera, a 2-lane MIPI display, USB 2.0 High-Speed, 10/100 Ethernet, UHS-I microSD, 32 MB flash and 32 MB PSRAM.

It measures 115.9 × 51.1 mm and has 4 copper layers, 1.6 mm thick.
91 parts, built around the MDBT50Q-U1MV2, A1304ELHLX-T, A3910EEETR-T and USBLC6-2SC6. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the zuidec/xbx-nrf repository on GitHub, at the commit this page was made from: the board is pcb/xbx-nrf/xbx-nrf.kicad_pcb and its schematic pcb/xbx-nrf-dongle/xbx-nrf-dongle.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask zuidec before reusing the design.