Arduino Amiga Floppy Disk Reader/Writer

Open Source and Free! - by Robert Smith

<< Back |

How to build your own Arduino Nano Amiga Disk Reader/Writer

The advantage to this version is that no additional breakout board is required. The downside to this is that you have to make a very difficult mod to the Nano board. This is not recommended for the inexperienced soldering iron user!

Hardware Required

Optional Hardware

  • 1 x 5V power supply (See below)
  • 1 x 12V power supply (Probably not needed, I haven't seen a drive need one yet)
  • 1 x FFC Breakout board (for 26-pin drives) if you don't plan on soldering directly to the drive like I have

5V Power Supply

Depending on how much power the drive you have uses, and how much power your USB ports can provide you may not need this.
  • WARNING: The Nano has a diode between the USB and 5V pin. This drops the power below what some drives actually require! You can try finding and bypassing it, or...
  • If the USB port does not provide enough power (usually causes the Arduino or drive to keep resetting) then don't connect the dotted red line, and connect the drive to an external 5V supply.

Wiring Diagram

Connect the cable to the Arduino as shown in the diagram below. It has a few more connections compared to the reader version. You MUST make sure the CTS connection is in place.

Step 1: CTS Pin

This is the most important part of all of the wiring. Recently I discovered this connection is actually available on this type of board directly meaning you don't need a separate FTDI board.

To access this pin we need to solder directly to the FTDI chip on the back of the Nano. Do NOT use a CH340 variant. These (whilst easier to solder) will not work properly.

The CTS pin on the FTDI needs to be connected to A2 on the Arduino as shown in the following example. Be careful to check your board is using the same IC (and if not, check the pin-out on the datasheet for it) and that A2 is actually in the same spot. Trust me, on some of the clones these things move around!

Turn the board over, and connect a wire as shown:

Connecting CTS Pin 11 on FTDI TF232RL chip to A2 on the Arduino
Connecting CTS Pin 11 to Arduino Pin A2 on an FTDI FT232xx Nano Clone
Not to be tried by the faint of heart! although there are loads of
YouTube videos showing how to solder to SMD components

I attempted this. First put the board upside down and ensure it's clean:

Next carefully cover the rest of the chip and pins with Kapton tape.
This will stop solder getting onto the other pins.
Make sure its fully stuck down on all the surfaces including the other pins.
Once covered, apply a little extra solder to the exposed pin ('tinning' it with fresh solder):

Now prepare a short piece of wire and tin both ends.
Ensuring that there is a small amount of solder on the iron, place the wire
On the pin, and press the iron to it for a second or two, and this magic happens:

Now carefully bend the other end of the wire to pin A2, and
solder it in place. After you have confirmed it is soldered
correctly and is not touching any other pins, apply a small amount
of glue (I used super glue) to stop it getting caught and pulled off:

See, wasn't that hard!

Step 2: Connections/Pinout

Depending on what type of drive you want to connect to I have listed the wiring below. Please note that there are different variants of the slimline 26-pin drives and they are not always easy to tell apart. The best way would be to get a multimeter and test for connections between the GND lines, or the 5V lines as with the wrong variant these won't be connected together. Also note, these are the two I have discovered, there may be more. To be honest, it kinda looks like someone put the FFC connector in backwards to me

ArduinoPC IDCSlimline 26-pin FFCPINPIN
PIN34-PinVariant AVariant BNameCode
0 already connected
1 already connected
2 8 2 25 Index/INDEX
3 22 16 11 Write Data/WDATA
4 30 24 3 Read Data */RDATA
5 16 10 17 Motor Enable B/MOTEB
6 18 12 15 Direction/DIR
7 20 14 13 Step/STEP
8 26 20 7 Track 0/TRK00
9 32 26 1 Head Select/SIDE1
10 34 6 21 Disk Change/DSKCHG
11 12 4 23 Drive Select B/DRVSB
12 Connect to GNDEnables DiskChange
Support for WinUAE
Using ISP?
A0 24 18 9 Write Gate/WGATE
A1 28 22 5 Write Protect/WPT
A2 CTS on FTDI on reverse (see above)
A3 2 9 18 Optional RFU
HD Density
A4 2 8 19 Optional RFU
5V** 1,3,5 22,24,26 5V
GND odd
15,17,23,25 2,4,6,8,
* 1k pull-up resistor required
** If drive is powered by separate source do not connect to Arduino

PC 34-Pin IDC Cable Guide

Assuming you have cut the cable and the piece you are using does not have the twist in it, then locate the wire with the red stripe. This is Pin 1, and they continue in sequence, every other wire being a GND. You usually don't need to connect up the GND wires as they are all connected together anyway inside the drive.

If you are having trouble with the floppy drive cable then the following diagram might help (the red line is the red marking on the cable. Make sure you aren't using the part of the cable with a twist in it):

Programming the Arduino

Once you have all of the wiring complete, you now need to upload the program onto the Arduino. It's easy.

  1. Download and install the Arduino IDE.
  2. Connect the Arduino to the computer as follows:
    • Arduino UNO: Use the on-board USB connector
    • Arduino Pro Mini: Use the break-out board
    • Arduino Nano: Use the on-board USB connector (if it fails, try the old bootloader option)
  3. After a few moments the drive should be detected and be ready to use. If not you may need to install additional drivers. You may need to restart your computer, although sometimes just disconnecting and reconnecting a few times achieves the same result.
  4. From the Arduino IDE select the type of board from the Tools->Board menu:
    Board selection in the Arduino IDE
  5. Next, choose the COM port the device is connected on from the Tools->Port menu:
    Board selection in the Arduino IDE
  6. To test the board, I recommend first programming it with the BLINK example. Goto File->Examples->Basic->Blink - if you're feeling brave, change the numbers in the delay() functions to 100, that'll blink a lot faster.
  7. Now upload the blink program by going to Sketch->Upload. Some LEDs should flash for a while on the board, and then afterwards, you should see one of the LEDs turning on for one second, then turning off for one second, repeating.
  8. Once you're happy thats working, download the Arduino sketch from either GitHub or from this website. and load the file into the IDE.
  9. Now program it in the same way as before, by going to Sketch->Upload.


So, you've connected everything up and you've programmed your Arduino. I've included a diagnostics option to help you figure out if everything is working correctly. You will need a floppy disk that you don't care about, and the application available on the downloads page. This will run through a series of tests which should help you troubleshoot. Either that, or just go for it and try it out!

More Help and Other Guides

If you get stuck, there are loads of good examples showing you how to set up and get started with Arduino, for example: