Oh man, I hit a major roadblock yesterday.
In the PSX library I linked, the SPI communication is done using software (via digitalWrite() and DigitalRead())
for bit pushing which is ok for controllers but way too slow for Memory Cards as clock needs to be 250 kHz.
To read whole 128 kB of data one would have to wait for 10 minutes...
So I scrapped that approach and started looking for alternatives.
Atmel AVR chips (microcontroller on Arduino) have native SPI interface which is pretty flexible and
can be configured to give the required 250 kHz clock.
So after pulling an all-nighter (couldn't sleep when there is work to be done
![Smile :)](./images/smilies/icon_e_smile.gif)
) I implemented a DexDrive-like
command driven "firmware" which gave me speed up to par with DexDrive.
After I completely finish it I will post schematic and a GPLed source so people can burn it to their Arduinos.
Software side will be provided by standalone application and MemcardRex v1.8 later.
@Yogi: ATT (SS) for Memory Card and Controller are shared. When the line is low both devices are active.
The only difference that determines which peripheral will answer is the initial command (0x01 - Controller, 0x81 - Memory Card).
Schematic:
Code: Select all
Looking at the Memory Card:
_________________
|_ _|_ _ _|_ _ _|
1 2 3 4 5 6 7 8
1 DATA - Pin 12 on Arduino (MISO)
2 CMND - Pin 11 on Arduino (MOSI)
3 7.6V - 5V Pin on Arduino
4 GND - GND Pin on Arduino
5 3.6V - 5V Pin on Arduino
6 ATT - Pin 10 on Arduino (SS)
7 CLK - Pin 13 on Arduino (SCK)
8 ACK - N/C
Currenly I set the bitrate to 38400 bps (copied DexDrive) but each frame (128 bytes) takes about 70ms (pretty much like DexDrive).
Also, I know about using RS232 adapters for DexDrive but I was referring to the fact that DexDrives are out of production and getting harder to obtain.
Dev console: SCPH-7502, FreePSXBoot, CH340 serial cable.