-
Notifications
You must be signed in to change notification settings - Fork 11
Installation Guide
Proceed at your own risk! I am not liable for any damage that may occur due to the use of any provided schematics, firmware, or any other recommendations made within this project (see LICENSE.md). There is risk of damage to any attached hardware (ex: USB port, Dreamcast peripheral, or Dreamcast) if circuitry is improperly handled.
Host mode is used to connect Dreamcast controllers and other peripherals to a PC over USB. This is the setup to use for integration with flycast. See this wiki article for help on how to setup flycast for use with this project.
The host mode configuration requires a Dreamcast controller socket. You may harvest this from a Dreamcast controller extension cable or from the socket assembly from a Dreamcast.

This simple configuration directly ties the GPIO to the connected Dreamcast controller. This makes things more accessible to DIYers, but it has some drawbacks:
- This is insufficient fault protection for faulty/invalid firmware or faulty controllers
- The RP2040/RP2350 doesn't have over-voltage tolerant inputs, so accidental shorting to the 5V line will cause damage
- Hot-swapping should be avoided
In the unlikely event that the pico is destroyed due to a fault, you know how to fix it yourself because you built it, and the pico is relatively cheap. This is why I believe this simple configuration is just fine for DIYers. The resistors could even be omitted to make the implementation even more simple.

This option completely isolates the Maple Bus I/O from the RP2040/RP2350 at the expense of being more complex and less accessible to DIYers. I highly recommend this or something like this for any commercial application. The chip number 74LVC2T45DC made by Texas Instruments or Nexperia (found on digikey.com or mouser.com) is a 2-bit bus transceiver which completely isolates I/O.
Why is this important for a commercial application? Because I believe in robust designs that can withstand most common fault modes. Imagine your cat/dog/etc chewing on your Dreamcast controller cable, shorting the +5V wire to SDCK-A or SDCK-B. If the simple configuration was used, those I/O on your RP2040/RP2350 are now fried. However, the 74LVC2T45DC is 5V-tolerant, so the circuit will continue functioning properly after the controller cable is repaired. This configuration can also withstand most abuse due to incorrect or malfunctioning firmware.

- The LED on the W variants of the Pico board will not work with this project. On the standard Pico and Pico2 boards, the LED may be used for quick status - when connected to USB, it should remain on when no button is pressed on any controller and turn off once a button is pressed.
- The included file formatted_storage.bin may be used to delete and format a VMU attached to a controller when this project is used in host mode. For example, rename this file vmu0.bin and copy to DC-Memory drive when a VMU is inserted into the upper slot of Player 1's controller.
- A serial device shows up on the PC once attached - open serial terminal (BAUD and other settings don't matter), type
h, and then press enter to see available instructions. - Using an externally-powered USB hub may be helpful if the attached controllers are drawing too much power for your PC to handle. External power supply should be rated with at least 1 Amp (at 5 V).
General support is confirmed for use with Windows, Linux, MacOS, and Android.
A udev rule is necessary on most Linux systems to grant access to this device. Execute the following on your system to add this rule.
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2f07", MODE="0666"' | sudo tee /etc/udev/rules.d/99-dreampicoport.rules
sudo udevadm control --reload-rules
sudo udevadm triggerYou may need to remove and reinsert the USB connection to the pico board after doing this. Try rebooting Linux if you continue to experience connection issues after applying the udev rule.
No further setup is needed.
Client mode is used to connect a PS4 controller to a Dreamcast.
NOTE: This mode is a proof-of-concept, so it should not be considered fully-featured or completely working.
The host mode configuration requires a Dreamcast controller plug. You may harvest this from a Dreamcast controller extension cable or from the plug of a Dreamcast controller.

This simple configuration directly ties the GPIO to the connected Dreamcast controller. This makes things more accessible to DIYers, but it has some drawbacks:
- This is insufficient fault protection for faulty/invalid firmware or faulty Dreamcast
- The RP2040/RP2350 doesn't have over-voltage tolerant inputs, so accidental shorting to the 5V line will cause damage
- Hot-swapping should be avoided

This option completely isolates the Maple Bus I/O from the RP2040/RP2350 at the expense of being more complex and less accessible to DIYers. I highly recommend this or something like this for any commercial application. The chip number 74LVC2T45DC made by Texas Instruments or Nexperia (found on digikey.com or mouser.com) is a 2-bit bus transceiver which completely isolates I/O.

Each release will contain multiple uf2 files as described below. Please note that the LED will not be functional if any of the W variants of the hardware is used.
| Binary | Hardware Mode | Compatibility | Notes |
|---|---|---|---|
| host.uf2 | Host | pico, pico-w, and RP2040-Zero | |
| zero_host.uf2 | Host | RP2040-Zero | Host mode configuration similar to the above, but default C outputs are moved to gpio 2 & 3, and default D outputs are moved to gpio 4 & 5 |
| pico2_host.uf2 | Host | pico2 and pico2-w | |
| client-with-usb-host.uf2* | Client | pico, pico-w, and RP2040-Zero | supporting a single Dualshock4 controller connected to the USB port |
| pico2_client-with-usb-host.uf2* | Client | pico2 and pico2-w | supporting a single Dualshock4 controller connected to the USB port |
*Client mode is no longer deployed in new releases. Last deployed release is Version 1.01.
Hold the BOOTSEL button on the Pico while plugging the USB connection into your PC. A drive with a FAT partition labeled RPI-RP2 should pop up on your system. Open this drive, and then copy the desired uf2 file for either host or client operation here. The Pico should then automatically load the binary into flash and run it. For more information, refer to the official Raspberry Pi Pico documentation.
After the Pico is loaded with host-mode firmware, settings may be changed through the settings page here. To operate correctly, version 1.2.0 of firmware must be loaded, and the page must be opened using a Chromium-based browser such as Chrome, Edge, Opera, or Brave.