uDrive uSD G1 - a (very) small mass storage for CP/M computer...
While surfing through Internet, I found a small, intelligent solution based on a chip made from 4D Systems, an innovative hardware solution manufacturer in Australia.
The device is named "micro-DRIVE" (uDRIVE-uSD-G1), an embedded disk drive with a build in serial interface (TTL level). The microcontroller which makes this possible is named "GOLDELOX-DOS" chip.
There's an on board microSD memory card interface and adapter, which supports microSD cards up to 2GB - that's a lot of space for CP/M computer indeed.
The only thing you have to do is converting the TTL signal based serial interface into V24/RS232 voltage level, which can easily done by a small module with a MAX232N chip (and a few capacitors).
This is the module itself:
I placed a RS232 9-pin plug for size comparison reasons nearby.
And this is the whole, pluggable solution:
(click on image to view more details)
I already reported also an >european source< to obtain the 4D Systems module in my blog entry >here< - the module itself costs about 30 Euro with shipping.
A manual describing all the needed commands to control the module can be seen >here<.
A Microsoft Windows based test program can be found at 4D Systems own page >here< (look for "FAT Controller - Software" entry):
In this example, I requested the Revision first, then I've clicked on "DIR".
The device has an "autobaud" feature, that means you have to send an "U" char (55hex) after any power-up or reset, the device responds with an ACK byte (06hex).
The microSD card must be formatted with FAT16 file system format. If you already have a "used" microSD card, format it again (don't try to delete the files only).
If the card is not inserted before power-up, you have to send an "init" command ("@i") after inserting the memory card.
All needed commands are described in the above mentioned pdf file.
But anyway, here's a short list:
U - autobaud (do this at the beginning of all transaction)
@i - initialize / mount the memory card
@d - list directory (subsequent filemask follows)
@a - read file (subsequent handshake control byte and filename follows)
@t - write file
(subsequent handshake 'or'ed with append mode byte and filename follows,
additionally the file size to write and finally the file data must be added, too)
Read and write sector commands exists also, so a low level BIOS/BDOS driver for CP/M must be possible, too.
Really important is the communication flow diagram shown also in the above mentioned pdf, there's also a description what acknowledge answers per command exists.
I will publish an example code as soon as possible for DOS and CP/M. I plan to implement a non-resident file manager first.
So far, I programmed a very small example program in Turbo C 2.0 (or Turbo C++ 1.0). It does run at a command line prompt even in Windows XP, and shows the root directory of the sd card. It uses COM1 and sets the interface to 19200 baud.
Download Source and EXE >here<.
After this I can try to make an RSX for it (but in Assembler....). Be patient.
Others already did some development already even for CP/M.
Below are some links pointing to discussion threads or newsgroup entries:
James Moxham ("Dr. Acula") entries: >1< >2< >3< and >4< ...
... maybe also the related files (meanwhile these N8VEM files moved to an unknown place, there is only an archive for group messages left)
Interesting also his introduction pages (PC related) >here<.
Roger H Hanscom's pages: >1< and a screen shot >2<
Btw.... there is another similar device named uALFAT-SD, see >here<. This one can communicate via RS232 (TTL), but there is also >one< which is able to store data on an USB memory (instead of using a SD card for that).
Meanwhile (mid of February 2011) James Moxham sent me his sources, so I am able to adapt it faster and now I just have to modify the sources for (e.g.) a Kaypro.
Milford Instruments sells this product now, not 4D Systems. Search on their home page for "udrive", only then it will be visible for you.
You can download PDFs / more infos also directly from >here<.
(page still not finished yet)