Forum: Mikrocontroller und Digitale Elektronik AT90S8515 und IDE


von Stefan (Gast)


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.