USB SD card reader


This little project started before the CD emulation and shares the 99% of the code. Only differs in some SCSI commands. Therefore I’ll only explain some differences between the projects.

Schematic

It’s exactly the same.

Schematic

Code and features

The device is capable of booting from BIOS (tested with a Phoenix laptop and a AMI desktop computer). It works well with Linux and Windows (XP and 7 tested) and allows hot extraction of the media. This feature however has a problem that needs some fixing which consists in a device hang when the device is extracted in the middle of a block read o write. The SD code needs some rewriting supporting return values (success or error) and timeout support.]

I couldn’t manage to write anything on the card, but given that I’m using the same SD code used in the audio recorder project I must presume that it’s an electric problem (I think that the voltage was too low, I was using 2.5V aprox. with the diode rectifier).

Conclusions

Although those known issues (which on the other hand are easy to solve) the device works great and the device features a nice speed (about 90KB/s) without using any tricks. The device could be improved by the use of ping-pong buffers feature provided by the PIC MCU, but that would require a complete rework on the USB modules.

The code can be easily adapted to read/write any media if you know what you are doing. For example EEPROMs, flash memories, etc. I’ll try to use a SST flash memory I’ve just received. This is a simple way to write and read permanent memory media. I’m planing an ATA interface, I already have the circuit soldered but the ATA modules fail to read any disk sector.

Now time for some images:

Photo!

dmesg output

Gparted shot

Windows device admin

Download sources