Emulating PSX Memory Card (or controller) using a Raspberry Pi Pico

PicoMemcard

PicoMemcard allows you to build your own supercharged PSX Memory Card that can be connected to your computer via USB in order to transfer saves directly to/from your PSX. You can use it to repurpose broken/counterfit Memory Cards creating a better one using only a Raspberry Pi Pico.

Features

  • Able to simulate faithfully PSX Memory Card
  • USB conection to import/export saves
  • Allows to copy saves to/from any other memory card (using original PSX file manager)
  • Allows to play burned CDs (thanks to FreePSXBoot)
  • Cheaper than an original memory card

Bills of materials

  • Raspberry Pi Pico (around ~5$)
  • One of:
    • Custom PicoMemcard PCB (currently work in progress)
    • Broken/Counterfit/Original PSX Memory Card (counterfit ones can be found on Aliexpress for less than 1$)
    • PSX/PS2 Controller Cable
    • Nothing, if you are a mad man and feel like soldering cables directly to your PSX (would not recommend).

Basically anything that will allow you to interface with the memory card slot pins will do. If you have a broken contoller you can cut of the cable and use that since controllers and memory cards share the same bus. Of course, plugging your memory card into the controller slot will prevent you from using 2 controllers at the same time.

In total building a PicoMemcard wil cost you less than buying an used original Memory Card!

Video

PicoMemcard

Wiring

The wiriting diagram below shows how to wire the Pico and a counterfit memory card from Aliexpress. For the other cases (wiring directly to the PSX or using a controller cable) the pins on the Pico are the same, the pinout of the PSX/controller can be found on psx-spx. The image shows the bottom side of the memory card with the cover removed.

Wiring Diagram

The dashed line on the PCB of the memory card is where you should cut a groove deep enough to disconnect the original controller from the traces. The yellow squares above the line indicate where you should scrape away the proctective film in order to expose the copper traces and solder the wires onto them.

Finally the area at the bottom of the memory card is where you can cut a hole to feed the wires through connecting them to the Pico.

Installation

  1. Download the latest release.
  2. While pressing the 'BOOTSEL' button on your Raspberry Pi Pico, plug it into your computer.
  3. Drag and drop the PicoMemcard release onto your Raspberry Pi Pico.
  4. PicoMemcard should appear on your PC as a USB drive.
  5. Upload a memory card image to your PicoMemcard.

Transfering Data

As of the current release, uploading data to PicoMemcard requires some precise steps:

  • The image of the memory card to upload must be called exactly MEMCARD.MCR. Uploading anything else will not result in any errors but PicoMemcard will not save the uploaded data to flash. After rebooting the device the old data will still be present.
  • The image must be 128KB (131072 bytes) in size which is precisely the size of an original Memory Card.
  • After the image has been uploaded, the device must be safely ejected in order for the data to be actually imported correctly. This is a limitation of the current implementation (see Design section).

Inside docs/images you can find a two memory card images. One has a couple of saves on it so you can test if everything works correctly, the other is completely empty.

ATTENTION: I would recommend to never plug PicoMemcard both into the PC (via USB) and the PSX at the same time! Otherwise the 5V provided by USB would end up on the 3.3V rail of the PSX. I'm not really sure if this could cause actual damage but I would avoid risking it.

If you really need to have the Pico plugged into both the USB and PSX (e.g. for debugging purposes), disconnect the 3.3V line from the VBUS pin. In this way you can power on the Pico using a simple USB phone charger or by plugging it into your PC.

Future Development

As of now PicoMemcard is still in very early development stages and only tested it on a PSOne Pal model (SCPH-102, bios version 4.4). It should work on any PSX model. If you want to try it on your PSX any feedback would be much appreciated.

I've tried to make the project as accessible as possible by using the least amount of hardware but this comes with a few limitations, in particular regarding the flash storage of the Pico. In the future I want to add the possibility to use a microSD card by adding a microSD SPI module, this would improve on the following:

  • The very limited storage preventing from having multiple memory card images at the same time and being able to switch them using a button on the Pico.
  • The complex codebase using multiple filesystems (see Design section).
  • The brief downtime periods PicoMemcard may have while writing new data to flash memory, appearing as if the Memory Card was briefly disconnected.
  • The need to perform save ejection as a way to signal the Pico to transfer the data from the virtual FAT disk to the flash filesystem (see Design section).

Design

For people interested in underestanding how PicoMemcard works I provide a more extensive explanation in this post.

Thanks To

  • psx-spx and Martin "NO$PSX" Korth - Playstation Specifications and documented Memory Card protocol and filesystem.
  • Andrew J. McCubbin - Additional information about Memory Card and Controller comunication with PSX.
  • littlefs - Filesystem designed to work on NOR flash used by many microcontrollers, including the Raspberry Pi Pico.
  • ChaN FatFS - FAT filesystem implementation for embeeded devices.
  • Scoppy - Use your Raspberry Pi Pico as an oscilloscope, very cheap and accurate. Without this I would have not been able to debug many issues.
  • PulseView - Used to import, visualize and manipulate the data from Scoppy on a PC.
Owner
Daniele Giuliani
Hi! I’m just a guy with a passion for computers, videogames and rock climbing.
Daniele Giuliani
Comments
  • With RP2040 zero,ps1 not detect

    With RP2040 zero,ps1 not detect

    With RP2040 zero, the .mcr file can be recognized through usb after writing the program. However, it cannot be detected by ps1 9002. It has been checked 3.3v power supply and the data line connection are not abnormal.

  • Where to find SD Card Modules

    Where to find SD Card Modules

    I meant to fit some cases for the variations of files offered here but I'm running into some problems. I bought two different kinds of boards and they each have their own set of issues. The Adafruit module is well built but also a bit thick & pricey. While fitting with the basic Pico Pi (longer version) it seems like it may be impossible to fit in the case comfortably. The board itself is about 1.76mm without the card slot. About 3.70mm (height wise) altogether and 23mm in length. The other board is around 3.50mm thick but with a little over a whopping 42mm in length.

    What I'm looking for is what board you would generally recommend so I that if I were to share a case here that everyone would have a perfect fit. I'm also a bit confused with the wiring of the board I got if this is what were to be recommended. Or at least for testing.

    I have a few of the 2040-Zeros on the way but it seems they were outsourced from China so it's going to take a little bit longer. I plan on making a case for both models, small and large with and without the SD module. Looking forward to shortening up the case to at least the regular size of an official memory card when my Zeros get here.

  • Initial SD card support.

    Initial SD card support.

    This is very much still a work in progress.

    Reading is tested and works fine, syncing not tested yet.

    This will probably need to go into a separate branch. I'd like to re-add the ability to read/write via USB and also bank switching, but this is a start for now.

    Anyways hope this is somewhat helpful anyways!

    Edit: All works the same as before, just throw MEMCARD.MCR on an SD card formatted as FAT32 and connected to SPI0, and it'll serve that up to the PS1.

  • Randomly disconnecting

    Randomly disconnecting

    I noticed this happening during the Saga Frontier load menu. It will read the data then disappear. If you choose your save quickly you can get it to load. I've tried it on two Phat models with the same result. https://imgur.com/a/tmWFf1v

  • blinking green light on psx

    blinking green light on psx

    I build my own picomemcard+ thanks to your project, but i can not get it to work on my playstation. I can write the pico+ firmware to the raspberry, and after a half minute or so the sd card folder opens. It is a 4GB micro sd fat32 formated with 0.MCR and 1.MCR on it. If i plug it into the playstation there is only a blinking green light and no card is recognized... Am i doing something wrong?

  • Display the specific FS error using LED blink codes (with the correct branch)

    Display the specific FS error using LED blink codes (with the correct branch)

    My Pico just kept blinking no matter what (tried flashing different firmware versions, erasing the "built-in" memory card file & replacing it with an empty one several times) and I wanted to know why it was failing, so I implemented simple blink error codes:

    • 1 flash = FS mount error
    • 2 flashes = Memory card file open error
    • 3 flashes = Memory card file read error
    • 4 flashes = Memory card file is empty
    • 5 flashes = Memory card file contains data, but its size is incorrect

    Turns out my Pico is failing with 4 flashes, so it cannot read the file properly as it thinks it contains 0 bytes. Not sure why that is happening, as the file I uploaded is exactly 131072 bytes (I used the empty memory card example which is provided in this repo).

    I figured it might be useful to others for diagnosing such issues.


    This is a follow-up to my previous pull request, where I unknowingly requested to push to the main branch instead of the development one. Also made a slight change to the commit by request, and added more error codes which may be useful.

  • Not detected by Playstation 2 - SCPH-39003

    Not detected by Playstation 2 - SCPH-39003

    Hi,

    Tested this today with my original fat playstation 1, worked perfectly (using the breakout board I talked about on the Reddit thread that I'd made a while back).

    When trying it with my Playstation 2 (SCPH-39003), it wasn't detected at all. Not sure what the issue there is, but I'll try to debug it if I get time. I understand the primary purpose of this project is for use on the Playstation 1, but it'd be nice if it also worked in backwards compatibility mode on the PS2 also.

  • Blinking LED (Pico) - SD Module Power Problems

    Blinking LED (Pico) - SD Module Power Problems

    I built the original PicoMemcard and everything was fine. I upgraded to the plus using the same SD card module as the guide and receive the blinking LED 99% of the time. Strangely, there have been one or two times when the test memory card file provided does appear.

    I uploaded the new uf2 file, the SD card appears through the Pico on my computer for file transfer - so I'm confident the wiring is correct and that the SD card expansion module works. I've also measured the voltage on the module as it's plugged into the PlayStation. 3.5v more or less on the dot. I've also tried the bodge wire fix directly to pin 36 from the other threads. With that installed, I instead measure just under 3v. Could the module not have the power range that's advertised?

    Edit: Just want to add that I've tried multiple SD cards.

  • SSD1331 OLED screen support & bank switching

    SSD1331 OLED screen support & bank switching

    Hey,

    So as discussed this is kind of in support of what @Helder1981 is doing with his hardware project. The OLED screen at the minute must be an SSD1331 module - and I have used some MIT and BSD licensed pieces of code for the OLED in here with the relevant licenses displayed where necessary.

    In the future it should be possible to adapt this to use other displays.

    Also adds bank switching support, via buttons attached to GPIOs 2 and 3.

  • VBUS connected to 3.3v

    VBUS connected to 3.3v

    Hey,

    Just setting this up, and I've noticed you say to connect VBUS on the pico to 3.3v on the PS2, which creates the danger that when plugging in the pico to usb, you'd be connecting that to 5v.

    You can just connect the 3.3v memory card pin to 3.3v on the pico, and it'll power it just fine. That'll also allow you to safely have the board plugged into the PC for debugging at the same time.

  • Picomemcard+ can't figure why I get a green blinking led

    Picomemcard+ can't figure why I get a green blinking led

    I updated my raspberry pi pico from a picomemcard to a picomemcard+ image. While On the picomemcard image, everything worked fine. When I updated it to the picomemcard+ , my pc recognizes the pi as a usb drive. On my psx though, no save files apprear or recognizes that I have inserted a memory card. I got the sample mcr file (which worked fine in the picomemcard) named as 0.mcr, as well the blank save file, named 1.mcr. I am using the exact micro sd module,as the one pictured on the github page. I solder cs to pin 22, sck to 24, mosi to 25, miso to 21, vcc to 39,gnd to 23 . I used both a 1 and 16 gb cards, formated to fat32 with 512 allocation space. What else should I do?

  • pi2040-zero can't find micro sd

    pi2040-zero can't find micro sd

    Hi, i soldered and troubleshooted everyting by following the readme, howewer, when i connect the rp2040-0 the the pc after i flasched it, the sd won't appear and it flash red. Tryied also with a raspberry pi pico and it works, is there any problem with the fw maybe?

    Thank you for thia awesome project

  • My PicoMemcard+ is not reading any images at all? Stuck blinking red

    My PicoMemcard+ is not reading any images at all? Stuck blinking red

    Like the title says, I soldered it all up and I know everything with the SD card works because when I put the image for the RP2040 into it it automatically switches to the memory card through the USB-C port. I tried it with the correct version of FreePSXBoot and one I got from PCSXR, both named 0.MCR when I put it in. Do you think this is a software thing or something I did?

  • Strange issue with Toy Story 2 Game

    Strange issue with Toy Story 2 Game

    Hi, I'm using the RP2040-Zero Version v1.0.2 with Toy Story 2 [ITA ver SLES-02407] and when I try to load the save from PicoMemcard+ the game fails to load. After various attemps the game succed to load and I can finally continue the game normally (So the game save is not corrupted). Seems the game use a strange way to manage the memory card because even if I try to switch the MC image with the controller, the game behave randomally glitching at the moment of save. Like sometimes only half MC loaded or corrupting randomally the image, owerwriting a save even of another game.

    The MC works great with other games...

    I've attached the save file to test, maybe someone can try and confirms this strange behavior...

    P.S: I'm using the latest release of xstation if it matters.

    Test MC.zip

  • Image Swtitching Hardware Button

    Image Swtitching Hardware Button

    As mentioned by @Androxilogin since on PS2 memory card and controller bus are separate PicoMemcard cannot detect controller input therefore memory card switching is not functional. Additional hardware buttons are required for memory card switching, which likely requires the availability of two GPIO inputs (for two buttons) and software support.

  • Missing Driver for PicoMemcard CDC

    Missing Driver for PicoMemcard CDC

    I am using windows 7 x64 and raspberry pi pico

    After loaded PicoMemcard+.uf2, my windows ask for the driver of PicoMemcard CDC

    USB\VID_CAFE&PID_4003&REV_0100&MI_00

    Please advise the correct driver for it.

A FAT filesystem with SPI driver for SD card on Raspberry Pi Pico
A FAT filesystem with SPI driver for SD card on Raspberry Pi Pico

no-OS-FatFS-SD-SPI-RPi-Pico Simple library for SD Cards on the Pico At the heart of this library is ChaN's FatFs - Generic FAT Filesystem Module. It a

Dec 27, 2022
Tetris on a Raspberry Pi Pico mounted on a Pimoroni Pico Explorer

PicoTetris Classic Tetris game running on a Raspberry Pi Pico microcontroller. Pico C port by Richard Birkby Original JavaScript implementation - Jake

Dec 3, 2022
Breakout game for Raspberry Pi Pico with Pimoroni Pico Display pack
Breakout game for Raspberry Pi Pico with Pimoroni Pico Display pack

breakout_rpi_pico Breakout game for Raspberry Pi Pico with Pimoroni Pico Display pack Prebuilt binary (breakout.uf2) is here. To build your own binary

Oct 15, 2022
Pico-uart-bridge - Raspberry Pi Pico UART-USB bridge

Raspberry Pi Pico USB-UART Bridge This program bridges the Raspberry Pi Pico HW UARTs to two independent USB CDC serial devices in order to behave lik

Dec 23, 2022
Digital rain animation gif with glow squeezed into a raspberry pi pico and pimoroni pico-display
Digital rain animation gif with glow squeezed into a raspberry pi pico and pimoroni pico-display

pico-display-matrix Digital rain animation gif with glow squeezed into a raspberry pi pico and pimoroni pico-display or how to actually use all Flash

Sep 10, 2022
Prueba del Raspberry PI PICO con un display Raspberry PI TFT 3.5"

Raspberry-PI-PICO-display-RPI35 Prueba del Raspberry PI PICO con un display Raspberry PI TFT 3.5" Con ayuda de la libreria https://github.com/khoih-pr

Nov 10, 2021
Windows kernel-mode driver emulating well-known USB game controllers.

Windows kernel-mode driver emulating well-known USB game controllers.

Jan 4, 2023
An in-progress matching decompilation of Final Fantasy VII For the PSX.

FFVII An in-progress decompilation of the original US release of Final Fantasy VII on the PSX. Building (Linux) Install build dependencies The build p

Dec 14, 2022
Macos-arm64-emulation - A guide for emulating macOS arm64e on an x86-based host.

macos-arm64-emulation Use the following guide to download and configure all of the necessary tools and files for emulating the macOS arm64e kernel. Th

Jan 7, 2023
A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control.
A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control.

N.A.G.E.K.I. A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control. 中文版

Dec 8, 2022
A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control.
A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control.

N.A.G.E.K.I. PLEASE CHECK Main Project A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Us

Dec 30, 2021
Web Server based on the Raspberry Pico using an ESP8266 with AT firmware for WiFi
Web Server based on the Raspberry Pico using an ESP8266 with AT firmware for WiFi

PicoWebServer This program runs on a Raspberry Pico RP2040 to provide a web server when connected to an Espressif ESP8266. This allows the Pico to be

Jan 7, 2023
Open source PCB for arcade sticks using Raspberry Pi Pico.
Open source PCB for arcade sticks using Raspberry Pi Pico.

Pico Fighting Board Open source PCB for arcade sticks using Raspberry Pi Pico. Introduction They say imitation is the highest form of flattery. If tha

Dec 30, 2022
USB host implementation using PIO of raspberry pi pico (RP2040).

Pico-PIO-USB USB host implementation using PIO of raspberry pi pico (RP2040). You can add additional USB port to RP2040. ?? This library is WIP. API m

Dec 30, 2022
This is a set of utilities that allow you to read, write or erase SPI flash chips using a Raspberry Pi Pico (RP2040) chip.

Pico SPI Utilities This is a set of utilities that allow you to read, write or erase SPI flash chips using a Raspberry Pi Pico (RP2040) chip. While th

Aug 7, 2022
A multi-bank MRAM based memory card for Roland instruments
A multi-bank MRAM based memory card for Roland instruments

Roland compatible multi-bank MRAM memory card (click to enlarge) This is a replacement memory card for old Roland instruments of the late 80s and earl

Nov 25, 2022
custom esp8266 controller for driving the pwm led controller

room8266 custom esp8266 controller for driving the pwm led controller designed to drive this: https://github.com/austinscreations/PWM-LED-Controller t

Nov 1, 2021
Raspberry Pi Pico (RP2040) and Micro-ROS (ROS 2) Integration

The Pico is an amazing microcontroller and I couldn't wait for ROS 2 support or Arduino Core, so here is my approach. Once the Arduino Core for RP2040 is out it will be easier to use micro_ros_arduino.

Jun 19, 2022
built-in CMSIS-DAP debugger tailored especially for the RP2040 “Raspberry Pi Pico”

RP2040 has two ARM Cortex-M0+ cores, and the second core normally remains dormant. pico-debug runs on one core in a RP2040 and provides a USB CMSIS-DAP interface to debug the other core. No hardware is added; it is as if there were a virtual debug pod built-in.

Dec 30, 2022