Device Research¶
While we currently support a handful of microcontrollers, in reality, we have looked at many more boards.
In order for a board to be usable, it must support at least one following:
- Bluetooth Classic
- USB OTG
For wireless controllers, Bluetooth Classic (BTC) is the protocol for the Switch 1 controllers, yet it is also a dying protocol since the world has moved to Bluetooth Low Energy (BLE). While many boards support wireless and Bluetooth, very few of them support BTC. If they support Bluetooth, they only support BLE. The (original) ESP32 and the Raspberry Pi Pico W are the only boards that still retain built-in support for BTC. Later ESP32 models only support BLE.
For wired controllers, you need USB OTG. While many boards support USB OTG, almost all of them lack an easy 2nd way to connect to the computer. Thus almost everything requires an external UART to do so. The ESP32-S3 remains the only board that has both USB OTG and a built-in USB-UART TTL. While there are board with multiple USB ports, all the ones we have found have power circuitry that is incompatible with the setup that we need.
It may be possible to use WiFi or Ethernet to connect a wired controller to the computer. But we haven't explored these options much due to the complications of dealing with IP addresses, discovery, and security.
Currently Supported Boards¶
| Name | Specs | Capabilities | Target Controllers | Verdict |
|---|---|---|---|---|
| ESP32 | - CPU: Xtensa LX6 - RAM: 520 KB - Flash: 4 MB |
BT Classic BT LE Built-in UART-USB port |
NS1: Wireless Pro Controller NS1: Wireless Left Joycon NS1: Wireless Right Joycon |
Supports Bluetooth Classic! No external UART required! Setup Difficulty: 2 Immune to power glitching. Powerful CPU. Good modern toolchain. Can run PABotBase2. Bluetooth stack is very buggy though. Currently supported by PA. |
| ESP32-S3 | - CPU: Xtensa LX7 - RAM: 512 KB - Flash: 8 MB |
USB OTG BT LE Built-in UART-USB port |
HID: Keyboard NS1: Wired Controller NS2: Wired Controller NS1: Wired Pro Controller NS1: Wired Left Joycon NS1: Wired Right Joycon |
No external UART required! Setup Difficulty: 2 Immune to power glitching. Powerful CPU. Good modern toolchain. Can run PABotBase2. Unfortunately lacks BT Classic and cannot do wireless NS1 controllers. Currently supported by PA. |
| Raspberry Pi Pico W | Pico 1: - CPU: RP2040 - RAM: 264 KB - Flash: 2 MB Pico 2: - CPU: RP2350 - RAM: 520 KB - Flash: 4 MB |
USB OTG BT Classic BT LE |
HID: Keyboard NS1: Wired Controller NS2: Wired Controller NS1: Wired Pro Controller NS1: Wired Left Joycon NS1: Wired Right Joycon NS1: Wireless Pro Controller NS1: Wireless Left Joycon NS1: Wireless Right Joycon |
Easiest wireless setup! Supports wired as well with external UART. Setup Difficulty: 1 (USB) Setup Difficulty: 5 (UART) USB mode is immune to power glitching. UART mode is vulnerable to power glitching. Powerful CPU. Good modern toolchain. Can run PABotBase2. Unfortunately requires external UART for wired capability. Currently supported by PA. |
| Raspberry Pi Pico | Pico 1: - CPU: RP2040 - RAM: 264 KB - Flash: 2 MB Pico 2: - CPU: RP2350 - RAM: 520 KB - Flash: 4 MB |
USB OTG | HID: Keyboard NS1: Wired Controller NS2: Wired Controller NS1: Wired Pro Controller NS1: Wired Left Joycon NS1: Wired Right Joycon |
Same as Raspberry Pi Pico W, but without wireless support. Requires external UART. Setup Difficulty: 5 Vulnerable to power glitching. Unofficially works for PABotBase1. Officially supported for PABotBase2. |
Deprecated Boards¶
| Name | Specs | Capabilities | Target Controllers | Verdict |
|---|---|---|---|---|
| Arduino Uno R3 | - CPU: ATMega16u2 - RAM: 512 bytes - Flash: 12 KB |
USB OTG | NS1: Wired Controller NS2: Wired Controller |
Original Fightstick PoC Setup Difficulty: 6 Vulnerable to power glitching. Too little flash and memory. RAM/progmem separation is annoying. Toolchain C++ support is very poor. Can run PABotBase1, but not PABotBase2. Currently supported by PA. Soon to be deprecated and removed with migration to PABotBase2. |
| Teensy 2.0 | - CPU: ATMega32u4 - RAM: 2.5 KB - Flash: 31.5 KB |
USB OTG | NS1: Wired Controller NS2: Wired Controller |
Original Fightstick PoC Setup Difficulty: 8 Vulnerable to power glitching. RAM/progmem separation is annoying. Toolchain C++ support is very poor. Can run PABotBase1, but not PABotBase2. Currently supported by PA. Soon to be deprecated and removed with migration to PABotBase2. |
| Teensy++ 2.0 | - CPU: AT90USB1286 - RAM: 8 KB - Flash: 128 KB |
USB OTG | NS1: Wired Controller NS2: Wired Controller |
Original Fightstick PoC Setup Difficulty: 8 Vulnerable to power glitching. RAM/progmem separation is annoying. Toolchain C++ support is very poor. Can run PABotBase1, but not PABotBase2. Currently supported by PA. Soon to be deprecated and removed with migration to PABotBase2. |
| Arduino Leonardo | - CPU: ATMega32u4 - RAM: 2.5 KB - Flash: 31.5 KB |
USB OTG | NS1: Wired Controller NS2: Wired Controller |
Same chip as the Teensy 2.0. Added as stronger alternative to Uno R3. Setup Difficulty: 6 Vulnerable to power glitching. RAM/progmem separation is annoying. Toolchain C++ support is very poor. Can run PABotBase1, but not PABotBase2. Currently supported by PA. Soon to be deprecated and removed with migration to PABotBase2. |
| Pro Micro | - CPU: ATMega32u4 - RAM: 2.5 KB - Flash: 31.5 KB |
USB OTG | NS1: Wired Controller NS2: Wired Controller |
Same chip as the Teensy 2.0. Added as low-cost option for expert users. Setup Difficulty: 8 Vulnerable to power glitching. RAM/progmem separation is annoying. Toolchain C++ support is very poor. Can run PABotBase1, but not PABotBase2. Currently supported by PA. Soon to be deprecated and removed with migration to PABotBase2. |
Boards that Didn't Make the Cut¶
| Name | Specs | Capabilities | Target Controllers | Verdict |
|---|---|---|---|---|
| CH552G | - CPU: E8051 - RAM: 1.25 KB - Flash: 16 KB |
USB OTG | NS1: Wired Controller NS2: Wired Controller |
Has 2 USB ports for the perfect wired controller. We thought we could use both of them, but it turns out they are shorted to each other (i.e. they are the same port). Therefore it's useless. Setup Difficulty: 1 (if it worked the way we thought) Not supported by PA. |
| waveshare RP2350 USB Mini | - CPU: RP2350 - RAM: 520 KB - Flash: 4 MB |
USB OTG x 2 | HID: Keyboard NS1: Wired Controller NS2: Wired Controller NS1: Wired Pro Controller NS1: Wired Left Joycon NS1: Wired Right Joycon |
Has 2 USB ports for the perfect wired controller. But the VCC lines are shorted across them - which will fry either the Switch or the computer. Setup Difficulty: 1 (if it worked the way we thought) Not supported by PA. |
| STM32 Blue Pill | - CPU: ARM Cortex-M3 - RAM: 20 KB - Flash: 64/128 KB |
USB OTG | HID: Keyboard NS1: Wired Controller NS2: Wired Controller NS1: Wired Pro Controller NS1: Wired Left Joycon NS1: Wired Right Joycon |
Presoldered debug pins can be reprogrammed as UART to allow for easy no-solder setup. Designed to be powered over the debug pins with USB attached. So immune to power glitching. However, flashing it is extremely user unfriendly and requires external hardware. Currently not supported by PA. Still experimenting. |
Discord Server:
