IDE knowledge anyone?

Oliver Lehmann lehmann at
Wed Dec 30 13:58:25 CST 2015

Command 91h did the trick. Issueing this once before any
read/write commands makes the drive finally work!

Oliver Lehmann <lehmann at> wrote:

> I checked now with MS-DOS and issuing a simple "DIR D:\" command  
> with a power cycled disk:
> Command: C4h (Read Multiple)
> -> 51h, 51h -> 04h
> Command: 10h (Obsolete???)
> -> 50h, 50h -> 04h
> Command: 91h (Initialize Drive Parameters)
> -> d0h, d0h, d0h, .... 50h
> Command: C6h (Set Multiple Mode)
> -> 50h
> Command: C4h (Read Multiple)
> -> 58h
> The first C4h Command returns the same error, but
> after this it seems like the drive is "initialized"
> and then the 2nd C4 command afterwards works! Great.
> I guess C6h is only needed because read multiple is
> used, so I probably have to do only the 10h and
> 91h stuff... just need to find out more about it.
> Does anyone know what command 10h is? The documentation
> I have only states "obsolete".
> Oliver Lehmann <lehmann at> wrote:
>> OK,
>> detatching the power cord of the disk from my PC while
>> running FreeBSD and reattaching it also brings up error
>> code 4 on the next access. This does not happen with
>> other drives. So it must be some sort of initialisation
>> the OS or BIOS does which readies up the drive.
>> Oliver Lehmann <lehmann at> wrote:
>>> OK, I just got my Logic Analysator and traced the
>>> communication on my PC while forcing it to do PIO
>>> instead of DMA.
>>> I then changed my AVR code to do the exact same
>>> commands and nearly the same timings and... nothing
>>> changed - the drive still responds with error code
>>> 0x04 after the read sector 0x20 command is issued.
>>> On the PC:
>>> I noticed a time frame of 115,230ns between the
>>> 0x20 Command and the first alternate status register
>>> read. during that time, INTRQ goes high so the drive
>>> "is done" and wants the host to interact with it
>>> again. IORDY is the whole time high from the host.
>>> The status read is 0x58 on the PC.
>>> On the AVR:
>>> IORDY is the whole time low (it is not connected),
>>> INTRQ stays low the whole time, and the first status
>>> read back is 0xD0 for a long time and then it goes to
>>> 0xD1 and then 0x59.
>>> Things I plan to try next:
>>> - power down the drive on the pc, power it up and then
>>> try to access sector 1 again and see what happens.
>>> Maybe some magic "initialization" is done on bootup
>>> what I don't do.
>>> - make IORDY high on my AVR too

More information about the cctalk mailing list