Forum: Mikrocontroller und Digitale Elektronik IDE - Platte lässt mich nicht lesen


von Oliver L. (ollil)


Lesenswert?

Hi,

Habe auf meinem ATMega 1284P PATA zum laufen gebracht. Von den 6 Platten 
die ich noch hier habe, funktionieren 5 offenbar inzw. problemlos. Kann 
jedenfalls lesen und schreiben ohne Probleme. Die älteste ist eine 
Samsung 560MB Platte von 1995.

Eine Platte bereitet mir jedoch Sorgen. Eine WD Caviar 31600 von 1996.

Sobald ich das READ SECTOR(S) Kommando absetze, quitiert sie das mit dem 
Error Status Register 0x04 (Command Aborted). Der Alternate Status steht 
auf 0x40 (Drive Ready), der Status steht auf 0x51 danach (Error, Drive 
Ready, Drive Seek Complete).

Initialisiert wird die Platte wie folgt:
- warte 200ms
- warte bis Rdy und nicht mehr Bsy
- Schreibe ins Device Head Register 0x40
- warte bis Rdy und nicht mehr Bsy
- Schreibe ins Feature Register 3
- schreibe ins Sector Count Register 1
- Schreibe ins Command-Register "Set Features"
- warte bis nicht mehr bsy
- Schreibe ins Command-Register "Recalibrate"

Damit sollte die Platte auf den Default-PIO-Mode ohne IORDY eingestellt 
sein - auch wenn man den ganzen Set Features block auslaesst taucht der 
Fehler auf.

!!
Danach setze ich ein "Identify Device" ab, und die zurückgelesenen 
16Bit-Werte sind OK - Model Name, Firmware-Ver, Sektor usw. sind korrekt
!!
--> 16Bit von der Platte lesen funzt also grundsaetzlich schon....

Ich gehe beim lesen von Sektor 0 wie folgt beim lesen vor:

1. Setzen Sector Count Register auf 1
2. Setzen Sector Number Register auf 0
3. Setzen Cylinder Low Register auf 0
4. Setzen Cylinder High Register auf 0

bis hierhin nach jedem CMD: Err 0x00, AltStat 0xe0, Stat 0x50

5. Setzen Device Head Register auf 0x40 (-> LBA)

jetzt: Err 0x00, AltStat 0x40, Stat 0x50

6. Setzen Command Register auf 0x20 (READ SECTOR(S))

jetzt: Err 0x04, AltStat 0x40, Stat 0x59
(Eine funktionierende: Err 0xd0, AltStat 0x40, Stat 0x58)

Hier taucht also schon der Fehler auf...

Nun geht es so weiter:

7. Setze AVR-Port auf Eingabe
8. Warte bis HDD nicht mehr Busy und DRQ auf High
9. Nehme entsprechende CS und DA Pins auf Low
10. Aktiviere /RD, nop(), nop(), nop()
11. Lese Low-Byte
12. Gleichzeitig wird High-Byte in einem '573 gespeichert
13. Deaktiviere /RD
14. Output-Enable des '573, nop(), nop(), nop()
15. Lese High-Byte
15. Output-Disable des '573
16. Goto 10. Bis 512B gelesen
17. Setze alle CS und DA Pins auf High

Ich habe auch schonmal die LBA-Register welche vor dem READ SECTOR(S) 
gefuellt werden nochmal zurueckgelesen. Es stehen die Werte drinn, 
welche ich vorher eingetragen habe.

Achja... an einem PC kann ich mit dem LW im WDMA2-Modus problemlos Daten 
lesen und schreiben - irgendwas muss ich also falsch machen.

Hat einer Eine Idee, wiso mein Laufwerk das Read-Sectors Command nicht 
mag?

von Dario B. (abcd)


Lesenswert?

wenn du noch festplatten von 1996 hast, hast du doch bestimmt auch genug 
alte hardware, um einen pc zusammen zu schrauben, an den du diese alte 
festplatte anschliessen und ein testprogramm des herstellers (ibm drive 
fitness test o.ä.) laufen lassen kannst.

wenn sie im testprogramm auch zickt, weisst du bescheid ;-)

von Oliver L. (ollil)


Lesenswert?

Ich schrieb ja schon, das ich problemlos von der Platte lesen und 
schreiben kann aufm PC (unter FreeBSD). Zwar keine Drive-Fitness-Test, 
aber immerhin...

OK, betreibe sie jetzt dort nicht im PIO-Modus sondern WDMA, aber ich 
hoffe das ist belanglos ;)

Ich vermute eher, das an meiner Initialisierung etwas faul ist, oder an 
meinem Lesevorgang.

Mein lesen (ich lese trotzdem, auch wenn schon nach READ SECTORS error 
auf 04 steht) liefert immer die gleichen Daten zurueck. Irgendwie findet 
man auch nicht raus, was man mit denen anfangen soll....

von oszi40 (Gast)


Lesenswert?

Oliver Lehmann schrieb:
> Ich habe auch schonmal die LBA-Register welche vor dem READ SECTOR(S)
> gefuellt werden nochmal zurueckgelesen. Es stehen die Werte drinn,
> welche ich vorher eingetragen habe.

Evtl.LBA-Problem? http://de.wikipedia.org/wiki/FreeDOS

Bei 500 MB und 2GB war eine magische Grenze. Zum Test würde ich die 
fragliche HD frisch mit einem alten (damals zeitgemäßen) DOS 5.0 
partitionieren und gründlich formatieren um zu sehen, daß die gesund ist 
und sich der Norm entsprechend verhält.

von oszi40 (Gast)


Lesenswert?

Es könnTe auch eine Jumper-Frage sein. Frag Google nach dem Typ.

von Oliver L. (ollil)


Lesenswert?

Wiso denkst du, MS-DOS 5.0 wäre '96 zeitgemäß gewesen? Ich hatte '94 
schon MS-DOS 6.22 ;)

Ich habs gerade mal ausprobiert - kann die Platte problemlos unter 
MS-DOS 6.22 partitionieren und verwenden

Mir kommt gerade eine Idee - es könnte ja sein, dass das Model kein LBA 
unterstützt - das frage ich naemlich nicht ab. Das prüfe ich mal...

von Oliver L. (ollil)


Lesenswert?

Doch... sie sichert LBA-Mode zu. Feature-Byte 53 ateht auf 2.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.