Skip to content

Hardware Mods

Keir Fraser edited this page Mar 26, 2024 · 37 revisions

Board Layout

Most modifications simply involve plugging new hardware add-ons into pin headers on the Gotek PCB. The PCB layout is summarised below. We will refer to this diagram for each hardware mod.

SFRKC30.AT2: This Gotek model may not have JC marked in the usual jumper position. In this case the only way to specify IBM PC interface mode is via FF.CFG.

Board Layout

Certain modifications attach to the Gotek programming header, which has the layout indicated below. Some Gotek revisions do not have all header pins, however the pins which are present will always match this layout.

Programming Header

Speaker

A speaker can be attached to the Gotek to sound whenever the drive heads move. The simplest method is to connect a piezo sounder directly to the JB header pins.

Piezo speaker

There is also a step-by-step video describing this mod:

FlashFloppy speaker install

The disadvantage is that piezo sounders are often too quiet. Instead you can attach a magnetic speaker or 5v active buzzer (easily found on Ebay) using the following circuit:

Speaker active circuit

This attaches to the Gotek at 5v, Ground and JB, all of which are available at header pins, and are easily connected or soldered to (see the Board Layout, and note that the right-hand pin of the jumper row marked JB is Ground).

LCD Display

As an alternative to the Gotek 7-segment display, FlashFloppy supports the ubiquitous two- and four-row LCDs with I2C backpack board. These are available from many Ebay sellers in compatible sizes including 16x2, 40x2, and 20x4 characters.

You can locate the required connections on your Gotek PCB as below. These connect to the corresponding header pins on your LCD I2C backpack module.

LCD data/clock interface

The SCL and SDA lines must be connected to VCC ("pulled up" to VCC) via 4.7k resistors. Note that many I2C boards have the pullup resistors on board and in this case you do not need to attach your own external pullups. You can confirm this by checking the resistance between SDA/SCL and VCC. If it is less than 10k you do not need to add pullups.

If you do require the pullup resistors, these can be soldered to the backside of the Gotek PCB between VCC and each of SDA and SCL. Alternatively the resistors can be soldered to the back of the I2C module header.

LCD Pullup Resistors

If your display is larger than the default 16x2 characters, you must configure the size via display-type= in FF.CFG.

OLED Display

Another alternative to the Gotek 7-segment display is an OLED display, as sold for Arduino projects by many Ebay sellers. You will require a display with I2C interface: you should see it has a 4-pin header marked GND, VCC, SCL, SDA.

OLED Display Front

These displays can simply connect to the 7-segment display's header, reusing the existing jumper wires.

OLED Display Front

Supported screen resolutions are 128x32 and 128x64. These come in some common sizes:

  • 128x32: 0.91", 2.23"
  • 128x64: 0.96", 1.3", 2.42"

Note that the larger 2" displays are typically configured for SPI and will need circuit changes to configure for I2C:

  • Usually a resistor must be removed or relocated
  • Usually one or two empty resistor locations must be bridged with solder
  • CS and DC pins must be connected to ground
  • RES(ET) pin must be connected to 3.3v

Additionally, the 2.23" 128x32 display will typically need explicit configuration in FF.CFG to avoid a mangled display output: display-type = oled-128x32-ztech.

On Screen Display (OSD)

FlashFloppy supports On Screen Display via the FF OSD hardware project. FF OSD is connected in the same way as an OLED display. Indeed it can be connected alongside an existing OLED display giving you two simultaneous displays.

Amiga OSD

Select/Eject/Insert Button

Also known simply as the Select button, FlashFloppy supports a third button in addition to the basic up/down controls. This should be a standard momentary microswitch, connected to the header pins JA. Note that if you have a rotary encoder, the third button is already integrated.

The button's effect depends on the current state of operation:

  • When selecting an image, the button will immediately select the currently-selected image
  • When an image is inserted, the button will immediately eject it
  • When an image is ejected, the button will immediately insert it

Rotary Encoder

As an alternative to using the up/down buttons you can instead connect a rotary encoder. The pictures below show how to connect it, either directly or via a PCB module (eg KY040). Newer Gotek models have an alternative KC30 rotary header which you may use instead.

When connecting via a PCB module, you may need to connect to 3.3v if the board has pull-up resistors mounted.

Rotary Encoder Connection

If connecting directly note that by convention GND is always the middle pin in the row of three. If there is a further row of two pins then these are connected to an internal push switch: you can wire these pins to jumper JA to use the switch as a Select/Eject/Insert button.

Rotary Encoder Connection

Rotating the dial should now have the same effect as pushing the buttons: anti-clockwise for down, and clockwise for up.

Troubleshooting:

  • SFRC922AT3: This PCB is missing the CLK/DT header. Instead the CLK/DT wires can be connected to pins PA13 (SWDIO) and PA14 (SWCLK) on the programming port.
  • SFRKC30.AT2,AT3,AT4: These models have an alternative header for connecting the rotary encoder. See below.
  • Directional controls are inverted: swap the A and B (aka CLK, DT) wires.
  • Four clicks are required to move a single step: specify rotary=gray in FF.CFG
  • PCB modules only: Both directions move up (or down):
    • Connect + to 3.3V (marked in picture above); or
    • Remove pull-up resistors from the back of the PCB; or
    • Remove the encoder from the PCB and solder wires directly.

KC30 Rotary Header

Recent Artery-based Gotek models have a new rotary-encoder header halfway along the length of the board, on the opposite side to the display header. The pins, as pictured above, can be connected to a rotary encoder as follows:

  n/c     CLK     +5V
  SW      DT      GND
 (JK)    (J8)

Blackberry Trackball

A neat alternative to a rotary encoder is the Blackberry-style miniature trackball. These can be found on Ebay and AliExpress for a few dollars. Unfortunately they are tricky to fit to a standard Gotek front panel due to the size of their PCB; however, they are an interesting option for custom designs.

Wiring is very similar to the PCB-based rotary encoder. With reference to the lines in the encoder's wiring diagram:

  • VCC connects to 3.3V (dashed orange)
  • GND connects to ground (black)
  • BTN connects to JA (green)
  • LEFT/RIGHT (or UP/DOWN) connect to the rotary pins (blue/red).

You will additionally require rotary = trackball in FF.CFG.

Here is a video demonstrating the trackball in action:

FlashFloppy trackball install

Motor Signal

The FF.CFG motor-delay option allows for emulation of correct motor behaviour: the Gotek drive does not report it is 'ready' until some milliseconds after it is ordered to spin up the drive motor.

To use this feature on board SFRKC30.AT4.35 all you need to do is strap MOR on the rear jumper block. Lucky you!

However, most standard Gotek models do not internally connect the motor signal. For these the following modification is required to:

  1. Pull Gotek interface pin 16 up to 5v via a 1k resistor
  2. Connect Gotek interface pin 16 to STM32F105 pin 36 (PB15)

STM32 pin 36 is connected to pin 5 of the unoccupied SPI Flash footprint on the Gotek PCB. The other end of this wire is soldered to pin 16 of the floppy header. A 1k resistor must also be soldered from pin 16 to the 5v rail. See pictures below (the resistor is hidden in heatshrink tubing).

Disk Change Reset

Although most drives reset their Disk Changed signal on receipt of a Step command, some older drives have an explicit Reset signal (eg. on pin 1 of some old Panasonic and Sony drives).

For disk changes to work correctly on hosts which use these old drives, it is necessary to connect the Disk Change Reset signal to the Gotek's microcontroller, and to configure support in FF.CFG: chgrst = pa14

SFRKC30.AT2: This Gotek model does not support Disk Change Reset.

Physical Connection, Option 1

Cut the ground traces to floppy header pin 1. Solder a jumper wire from pin 1 to the SWCLK pin of the Gotek programming header (refer to Board Layout).

Physical Connection, Option 2

Create a custom ribbon cabkle with the following modifications at the Gotek connector:

  1. Separate wires 1-4 from the remainder (5-34).
  2. Separate wire 4 and cut it short (so it does not make contact)
  3. Separate wire 1 and bring it across to connect in place of wire 4.
  4. You now have a connector with pin 1 unused and pin 4 connected to wire 1.

The Reset signal is now present at Jumper J5 and can be connected to SWCLK via a Dupont jumper wire.