Hallo, ich versuche hier schon seit ein paar Stunden vergeblich, eine alte IDE-Festplatte anzusteuern. Ich kann die Platte problemlos in den Standby-Modus schicken und auch alle Register auslesen... Wenn ich aber versuche, einen Sektor von der Platte zu lesen, wird sofort das Error-Flag gesetzt, aber im Error-Register steht nichts, und im Datenpuffer der Festplatte steht nur Datenmüll. Das passiert sowohl im CHS- als auch im LBA-Modus und auch bei verschiedenen Festplatten. Defekt sind die Platten definitiv nicht. Die Festplatte ist über 4k7-Angstwiderstände folgendermaßen an den µC (ATMEGA32) angeschlossen: PORTA = DD0...7 PORTC = DD8...15 PORTB0...1 = CS0...1 PORTB2...4 = DA0...2 PORTD2 = DIOR PORTD3 = DIOW Ich hoffe, jemand kann mir sagen, was ich falsch mache... Gruß Jonathan P.S.: Sorry, dass der Quälcode so unübersichtlich ist. P.P.S.: Die Bezeichnung und die Parameter der Festplatte kann ich auch auslesen. Nur eben einen Sektor nicht...
Jonathan Strobl schrieb: > P.S.: Sorry, dass der Quälcode so unübersichtlich ist. Vermutung, ohne dass ich mir das antun muss: die Platte arbeitet im DMA-Modus, und dein Controller hat keinen DMA. Gruss Reinhard
Jonathan Strobl schrieb: > Die Festplatte ist über 4k7-Angstwiderstände folgendermaßen an den µC > (ATMEGA32) angeschlossen: Ist das nicht vielleicht ein bisschen sehr hochohmig?
Rufus Τ. Firefly schrieb: > Ist das nicht vielleicht ein bisschen sehr hochohmig? Nee, die Kommunikation klappt ja. Ich kann die Platte ja problemlos in den Standby schicken, Register lesen/schreiben usw. Das Problem hat sich eben übrigens (wahrscheinlich) geklärt: Im Wiki-Artikel "Festplatte" hat sich wahrscheinlich ein Zahlendreher eingeschlichen... Konkret wurden wohl das Register "Sector Number" (Adresse 110) und das Register "Device Register" (Adresse 011) vertauscht... Jedenfalls meldet die Platte keinen Fehler mehr, wenn ich sie "unvertauscht" ansteuere. Ob die Daten dann auch richtig sind, muss ich noch schauen. Gruß Jonathan
Scheint wohl zu funktionieren. Da hat sich wohl tatsächlich ein Fehler in den Wiki-Artikel eingeschlichen. Gruß Jonathan
So, vielleicht kann es ja jemand mal gebrauchen. Mit dem Programm im Anhang kann man (fast) alles Mögliche mit so einer Festplatte anstellen. Sektor lesen, Sektor schreiben, Register lesen, Register schreiben... Die Pinbelegung ist wie im ersten Post. Ach ja: Über die serielle Schnittstelle (345600 Baud, 8N1) werden die Befehle im Klartext übertragen. Da wären: "Readsector", "Writesector", "Getstatus", "Getdata", "Geterror", "Putcommand", "GET", "PUT". Wenn nach einer "CS/DA"-Adresse gefragt wird, dann wird so eine Bitfolge erwartet: DA2-DA1-DA0-CS1-CS0. Bei "PUT" muss man einen Wert hexadezimal, binär oder dezimal eingeben: Hexadezimal z.B. "HE0" (also mit "H" am Anfang), binär z.B. "B11010", dezimal z.B. "65". Viel Spaß damit ;) Gruß Jonathan
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.