
A Linux driver to connect PATA/IDE directly to GPIO - crizzlenizzle
https://github.com/Manawyrm/pata-gpio
======
myself248
Going the other way, a PATA port in PIO mode can be used as GPIO:
[https://hackaday.com/2011/02/03/stk200-pocket-change-
program...](https://hackaday.com/2011/02/03/stk200-pocket-change-programmer/)

~~~
flingo
When I saw the title, I thought it was going this way.

Or, more specifically, a driver to turn an IDE port into GPIO pins that PC
programs can control. Closing the gap on making a feature-complete Windows 95
arduino core.

~~~
myself248
I think you can do this directly, the linked project just tells the kernel
"this is a parallel port here", and it just uses normal I/O instructions. The
IDE port is already exactly that, though I think the data-direction register
controls the whole port at once, rather than one bit at a time.

------
crizzlenizzle
An interesting project I found on twitter. Interfacing PATA/IDE directly to
Raspberry Pi’s GPIO is pretty trivial and manages to transfer 500 KiB/s.
Enough to play CDs. The driver code is around 500 LOC.

------
ChuckMcM
This is a fun hack. FWIW, similar sorts of things can be used to add a PATA
drive to a Cortex-M microprocessor like the STM32 series.

Who doesn't want a micropython board with gigabytes of code space ? :-)

~~~
jack12
It hadn't occurred to me that PATA/IDE could be so simple to speak. Now I'm
excited about the possibility of being able to dump a 25 or 30-year-old IDE
drive I have that my USB adapter doesn't want to talk to (via another SATA-to-
IDE adapter).

The README says this option relies on the kernel's "ATA framework" (presumably
for the protocol/non-interfacing logic?). Is that part of the "talking to a
drive" stack very much to have to implement? Or do you know of any existing
code for microcontrollers?

~~~
manawyrm
Depends on what you want to do :) If you just want to read/write sectors of
512 bytes at a time, it's pretty easy to implement even on a simple MCU.

There's a couple of registers which need to be set:
[https://wiki.osdev.org/ATA_PIO_Mode](https://wiki.osdev.org/ATA_PIO_Mode) and
you can then just read/write the data from the parallel lines.

Here's a similar project using an ATmega32:
[https://github.com/zwostein/idetrol](https://github.com/zwostein/idetrol) (i
used this code, ported to ARM to check my hardware before I wrote the
kerneldriver)

~~~
stefan_
How can this be so easy but talking to an SD card is an impossible task
without implementing a billion vendor/type quirks.

~~~
myself248
ATA was implemented by engineers and then described in a spec.

SD was designed by committee and then implemented as best they could.

------
h2odragon
> Data transmission is well outside the design scope of libgpiod.

But it can do it, anyway. Lovely hack.

------
dillonmckay
I was just watching ‘Anna’ on Hulu, and was thinking about IDE drives.

This does look really cool.

------
awiesenhofer
I wonder if you could implement a floppy interface the same way?

