PS2 [MX4SIO/SIO2SD] SD Card Adapter and SD-driver for the PS2 SIO2 interface

I noticed that on slim (> = 75x) joystick always dead on port 2, with or without Micro SD, only with the adapter connected.
This is because ACK pin always LOW
DATA send PS2 to MC, ACK = LOW.
DATA send MC to PS2, ACK = HIGH.
It seems to me that the Memory card works with SPI protocol similar to Joystick, I'm still not sure if we can fix it via software or hardware.
I recently wrote a code to emulate DS2 with the microcontroller stm32f103, we could use it as a reference.

uint8_t SPI_SlaveReceive(uint8_t outData, uint8_t doACK)
{
uint8_t inData = 0;//clear the status bit if it is pending
TxBuffer[0] = outData;
digitalWrite(ackPin, HIGH);
SPI.transferSlave(RxBuffer, TxBuffer, sizeof(TxBuffer));
if (doACK)
{
delayMicroseconds(20);
digitalWrite(ackPin, LOW); //ack gets pulled back high at the beginning of next call
}
 
Congratulations @ Fabio Kuntze.
Last year I was trying to emulate DS2 with a stm32f0 but no luck. I thought I had problems with that ACK pin.
I was trying to make a wireless controller using an official DS2 and SPP BT modules.
Could you please share your whole code?
 
Last edited:
Congratulations @ Fabio Kuntze.
Last year I was trying to emulate DS2 with a stm32f0 but no luck. I thought I had problems with that ACK pin.
I was trying to make a wireless controller using an official DS2 and SPP BT modules.
Could you please share your whole code?

Hello @Dariush Aghaee!
I have plans to share this, yes, I have not yet uploaded to github, I still have to clean and organize the code, libraries.
The development continues along with the portable ps2 that I am building, and there is no free time.
Works well with bluetooth, I used a esp32 on i2c and a DS3 joystick, it worked fantastic!
I think that BT serial modules also worked fine.
The goal is in the SPI full duplex between micorocontroller and ps2.
I would like to talk more about it, but here is not the correct topic.
greetings
 
Here's some rough STL of a Memory Card Case I made based on measurements. Haven't tested it yet. But makes a good base to start with

Just got my printer back working again so I'll be able to test this soon.

571adecd7ed2dda7e637a58c16ad011f.png
 

Attachments

I've got a 'Prototype #6' PCB that appears to be slightly different than a newer PCB I see with a 'MX4SIO' label, mine says 'SIO2SD'
 
SIO2SD = 1st prototype-batch with Micro-SD-Slot
MX4SIO = 2nd prototype-batch with a PCB where either an SD-Slot or Micro-SD-Slot can be mounted/assembled to.

Keep it honored! It is VERY RARE! I think it was 20 PCBs and I myself already have 3 (I have a Foto-frame for those which are not assembled!)! ;)
 
First prototype (02-005-0): 1.00 mm
Second prototype (02-002-3): 1.55 mm

The recommended thicknes is documented in the package. The ZIP package for the first version (09-001-1) ist linked in the first post, the second (09-002-0) isn't.
 
I will update the first post later on, but I have barely any time.
It WILL be in a few days, not today.
 
First prototype (02-005-0): 1.00 mm
Second prototype (02-002-3): 1.55 mm

The recommended thicknes is documented in the package. The ZIP package for the first version (09-001-1) ist linked in the first post, the second (09-002-0) isn't.
thank you, i see that now.
so does those recommendations still stand?
1.0mm for the SIO2SD and 1.55mm for the MX4SIO
 
Yes, bit it is depending on the case (and its thickness) you will use. With the thickness of the original case, you need 1.00 mm and with a thickness of 0.3 mm (I used for the custom case) you can use a board thickness of 1.55 mm. If you want to print a case with a greater wall thickness, you have to reduce the board thickness.
 
Hello !
I also made one of these but i came up with a problem.
When i plug the memory card then the controller freezes.
Here is my build:
IMG_0508.JPG
IMG_0510.JPG

I built it using this schematic
Schematic_PS2 Memory Slot to SD Card_Sheet_1_20200425010618.png

Now the problem maybe could be the resistor between memory card's pin 4 and 8. What's the recommended value ?
I used this build as reference
20200424_080224.jpg
It has 2 x 100 ohm resistors in parallel.

So i did the same, i soldered 2 smd 100 ohm resistors in parallel.

Also i just found another build without resistor.


What do you think ?:sco hmmthink:


ps: it's a sloppy job, i will wire it properly later. xD
 
When i plug the memory card then the controller freezes.
It seems you have a SCPH-750xx or later. It's a know issue with the Deckard models.

The resistor is a pull-down for the ACK pin (8). The ACK pin must be low after a transmission to tell the console, that the transmission was okay. With this resistor it's okay everytime, even _before_ the transmission.
 
It seems you have a SCPH-750xx or later. It's a know issue with the Deckard models.

The resistor is a pull-down for the ACK pin (8). The ACK pin must be low after a transmission to tell the console, that the transmission was okay. With this resistor it's okay everytime, even _before_ the transmission.
I tested it on a SCPH-39004 :sco hmmthink:
 
New test build of OPL with BDM and sio2sd / mx4sio:
- Mode 2 is no longer needed to get games working
- Game compatibility greatly increased
- SD compatbility should still be the same
- "release" build, so no debug info, but fastest speeds

Other noteworthy things:
- USB driver has issues, I'm working on them
- IEEE1394 driver is included. With a compatible drive you should be able to at least see a list of games. But don't expect many games to work.
- My 240p / 288p code is included, this can result in an unexpected (OPL GUI) resolution
- PADEMU seems to be working, but it could conflict with sio2sd as they both "hack" into sio2man
- The same for MCEMU, but I have not tested.

Demo of all 3 BDM drivers:

EDIT: New version "bdm2" uploaded with workaround for controller issue on SLIM/DECKARD models. @wisi do you know why I cannot save/restore the ctrl register? What I did is:

Code:
// Save ctrl register
sio2man_save_crtl = sio2_ctrl_get();

// do MX4SIO stuff...
// ...

// Restore ctrl register
sio2_ctrl_set(sio2man_save_crtl);

The workaround I'm now using restores ctrl to a fixed value of 0x3bc. This seems to work, but I don't like restoring a value other than the one I saved. One other solution would be to check what model it is, then do the right solution for FAT, and the workaround for SLIM.
What's the simplest way to detect if the model is DECKARD or not?

EDIT2: The "bdm2" release accidentally had a debugging commit in there I used to debug IOP modules used in the GUI. That version does not work in normal conditions. Iǘe removed the commit and uploaded "bdm3", without that faulty commit.
 

Attachments

Last edited:
tested on some consoles

90001 ok
79003 ok
75001 ok
70001 not read
39001 ok

I left running the game "ape scape 2" for 14 hours and there was no loss of connection with SD, very good!

compatibility with games I could not see differences, only 3 games work here

continue with this fantastic work

have a good week
 

Similar threads

Back
Top