How to build your own Arduino Pro Mini Amiga Disk Reader/Writer
- 1 x (USB) 26-pin FFC Slimline Floppy Disk Drive - more info - Guide for Nano
- 1 x Arduino Pro Mini 5V, 16Mhz
- 1 x FTDI USB to Serial Breakout Board (2M baud min) - DO NOT USE CH340
- 1 x 1Kohm Resistor
- 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
- 1 x Soldering Iron, or Breadboard, to build this with
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.
- If the USB port provides enough power, most do, connect the dotted red line and don't use an external supply.
- 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.
Connect the cable to the Arduino as shown in the diagram below.
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
* 1k pull-up resistor required
|Arduino||PC IDC||Slimline 26-pin FFC||PIN||PIN|
|PIN||34-Pin||Variant A||Variant B||Name||Code|
|0 || || || ||connected via adapter (see below)|
|1 || || || ||connected via adapter (see below)|
|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 GND||Enables DiskChange|
Support for WinUAE
|A0 ||24 ||18 ||9 ||Write Gate||/WGATE|
|A1 ||28 ||22 ||5 ||Write Protect||/WPT|
|A2 || || || ||
CTS on adapter (see below)|
|A3 ||2 ||9 ||18 ||Density Select||/REDWC|
|5V** || ||1,3,5 ||22,24,26 ||5V|
|GND ||odd |
|15,17,23,25 ||2,4,6,8, |
** If drive is powered by separate source do not connect to Arduino
FTDI Adapter Connection and CTS
You must take care when connecting this. I have noticed that the pinout at the end of the Arduino Pro Mini can be different between official and clone versions as follows: (spot the clone)
Note the order. The left one has DTR, TX, RX, VCC, GND, GND. The right one has GND, GND, VCC, RX, TX, GRN. Both will work perfectly fine, but note the adapter will need plugging in backwards on the right-hand one.
on the Arduino should go to TX
on the adapter board and vice versa. Also, as we're using a 5V Arduino, if your board has a switch on it, make sure it is set to the right setting.
Typical FTDI Adapters. Note the pin order, from top to bottom
DTR, RX, TX, VCC, CTS, GND
Pro Mini Clone A connected to FTDI Breakout Board
Pro Mini Clone B connected to FTDI Breakout Board
You will need to have this connected to program the Arduino too. The boards are designed to plug into each other. When you connect it, if soldering, bend the CTS pin out of the way, and attach it with a wire to pin A2
on the 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.
- Download and install the Arduino IDE.
- 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)
- 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.
- From the Arduino IDE select the type of board from the Tools->Board menu:
- Next, choose the COM port the device is connected on from the Tools->Port menu:
- 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.
- 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.
- Once you're happy thats working, download the Arduino sketch from either GitHub or from this website. and load the file into the IDE.
- 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: