IDE knowledge anyone?

Oliver Lehmann lehmann at ans-netz.de
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 ans-netz.de> 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 ans-netz.de> 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 ans-netz.de> 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 cctech mailing list