Hallo beisammen, ich versuche verzweifelt, einen 8515 als IDE-Controller zu programmieren (per BasCOM und Proteus). Schreiben funktioniert ganz gut, nur lesen funktioniert nicht so, wie es soll. Das Problem muss grundlegender Natur sein, denn das Leseproblem geht schon los, wenn ich nur versuche, die Plattendaten auszulesen (mit 0xEC) Ich hab der Einfachheit halber auf die Abfrage des Statusregisters verzichtet und dafür ziemlich lange Delays eingebaut (100 ms nach jedem Befehl). Anschluss: AD0 an PC0 AD1 an PC1 AD2 an PC2 CS0 an PC3 CS1 an PC4 (in Proteus CD3) WR über 4009 an PC5 RD über 4009 an PC6 Daten 0-7 über PortB, auf 8-15 vorläufig verzichtet, will nur sehen, ob überhaupt was zurückkommt. So. Takt 1 MHz. Halbe Sekunde warten, portb auf Ausgang, Cs0 = 0 : Cs1 = 1 : A2 = 1 : A1 = 1 : A0 = 0, portb =236 (für 0xec),wr=1, 100 ms warten, Wr=0, 100 ms warten, portb löschen + auf eingang. Die 100 ms müssten eigenlich locker reichen. Dann Cs0 = 0 : Cs1 = 1 : A2 = 0 : A1 = 0 : A0 = 0, Datenkanal öffnen. Da fange ich schon an zu zweifeln, denn ich weiss nicht, ob ich dieses Kommando mit einem Write-Signal bestätigen muss, hab´s aber auch schon mit Write probiert, bringt nix. Meine Theorie: Datenkanal öffnen, RD auf 1: Daten von Portb holen, rd=0, 255 mal ausführen. Meine Frage: Ist es so richtig oder wenn nicht, spielt in dem Fall evtl. IOReady von der Platte eine gewisse Rolle (muss der Controller über diese Leitung einen Impuls abliefern, wenn er Daten lesen will?) und wenn -ja-, wann muss dann /RD gesetzt werden? Bis jetzt schaltet die Platte nach dem öffnen des Datenkanals -anscheinend- nicht auf Ausgang, was sie wohl nach dem 0xEC-Kommando tut, aber dennoch keine Daten liefert... Schreibzugriffe funktionieren wunderbar, folgedessen kann an CS0 und CS1 kein Inverter fehlen (wie in Faasee´s Dokumentation angegeben), ansonsten würde die Befehlsausführung beim Schreiben auch nicht funktionieren..... Wäre nett wenn mir jemand weiterhelfen könnte, irgendwie komme ich nicht weiter.... Grüsse Stefan
Gut, zumindest das Auslesen der Plattendaten über 0xEC funktioniert bis jetzt; beim Sektorlesen das selbe in Grün: Nach erfolgtem Setzen von CHS=>Kommando 0x21, DRQ prüfen, öffnen des Datenkanals, Read=1,Daten auslesen (übertragener Wert=0), RD=0, wieder DRQ überprüfen=> nicht gesetzt, dann Error-Register ausgelesen, kommt 0x41 als Fehler zurück= u.a. "Adress Mark not found"..... Was kann das nur sein...?! :-/ Gruß
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.