Forum: Mikrocontroller und Digitale Elektronik ATAPI Status Register


von Heinz (Gast)


Lesenswert?

Hallo, ich habe folgendes Problem,

ich versuche mit einem MEGA8 ein CD/DVD Laufwerk anzusteuern.
Laut ATAPI Protokoll sollte mit
/CS0 = 1  /CS1 = 0 DA2 = 1 DA1 = 1 DA0 = 1
und mit
/DIOW =1 und DIOR=1
das Statusregister ausgegeben werden.
Stattdessen, zieht das ATAPI LAufwerk die Pins DD0-DD15
so "halb hoch" das heisst die LEDs die ich daran angeschlossen haben
glimmen leicht.

Ich bastel da jetzt schon seit Tagen dran rum und komme irgendwie nicht
weiter. Hat vielleicht jemand einen Tip ?

Vielleicht kann mir auch jemand sagen was ich mit DMACK und CSEL machen
soll ?
Auf Masse legen ?

von tobi (Gast)


Lesenswert?

Hast du die Led's ohne Treiber IC's angeschlossen ?.
Der avr hat ja interne Pull-Ups wenn du die Ports als eingang benutzt
werden. Die sind auch dringend nötig. Vielleicht schickt das Atapi gar
nichts auf die Reise, und der AVR ist der treibende Punkt. Das könnte
auch das glimmen der LED's erklären. Unbedingt treiber zwischen AVR
und LED's setzen. Für sowas ist HC573 oder HCT573 bestens geeignet.

von Heinz (Gast)


Lesenswert?

@tobi
DD0-DD15 (und somit auch die LEDs)habe ich über 2 Latches 74LS374
angeschlossen, da ich etwas knapp an I/Os bin.
Das "glimmen" kommt eindeutig vom Laufwerk. Es glimmt auch wenn ich
die Latch IC herausziehe.
Und warum brauche ich die Pull-Ups ?
Sind die Datenleitungen etwa auch LOW-aktiv ?
Hast du schon mal ein ATA bzw. ATAPI Laufwerk angesteuert ?
Falls Ja, könntest du mir etwas zur Beschaltung sagen ? Vielleicht habe
ich da ja was übersehen.

von A.K. (Gast)


Lesenswert?

> /CS0 = 1 /CS1 = 0 DA2 = 1 DA1 = 1 DA0 = 1

Dieses Register ist historisch bedingt sowohl mit dem
Harddisk-Controller als auch mit dem Floppy-Controller verbandelt. Als
sich später diese beiden Controller voneinander trennten wurde es
folglich etwas schwierig damit. Da es andererseits auch ganz gut ohne
geht:  einfach nicht benutzen.

von Heinz (Gast)


Lesenswert?

@AK

Stimmt schon. Da habe ich mich vertan.
Aber mit

/CS0 = 0  /CS1 = 1 DA2 = 1 DA1 = 1 DA0 = 1 (Kommando/Status)

ist es das selbe. Ebenso mit

/CS0 = 0  /CS1 = 1 DA2 = 0 DA1 = 0 DA0 = 0 (Daten)

Überall nur dieses Glimmen.
Ist der Ansatz zum Lesen /DIOW = 1 und DIOR = 1 (1 = 5V, 0 = 0V)
und zum schreiben /DIOW = 0 und DIOR = 0 korrekt ?

von A.K. (Gast)


Lesenswert?

Die Bezeichnungen /DIOR und /DIOW habe ich so noch nicht gesehen,
mangels Alternativen nehme ich jedoch an, dass es diejenigen sind, die
ich als /IOR und /IOW kenne.

Und dann kann das so natürlich nichts werden. Denn /IOR steuert den
Lesezyklus (/IOR=0 /IOW=1) und /IOW den Schreibzyklus (/IOR=1 /IOW=1).
Bei /IOR=1 /IOW=1 passiert also garnichts und /IOR=0 /IOW=0 ist Unfug.

von A.K. (Gast)


Lesenswert?

Sorry, muss natürlich
 ... und /IOW den Schreibzyklus (/IOR=1 /IOW=0).
heissen.

von Heinz (Gast)


Lesenswert?

Uff ! Das weicht doch stark von meiner Doku ab. Ich probier das gleich
mal aus. Kannst du mir evtl. noch mal für anderen Leitungen
(Adressleitungen usw.) schreiben welche /LOW-Aktiv und welche HIGH
aktiv sind ?

von A.K. (Gast)


Lesenswert?

http://www.repairfaq.org/filipg/LINK/F_IDE-tech.html

Grundsätzlich gilt in dieser Branche: "/" davor, oder "-" davor
oder dahinter: aktiv=0, inaktiv=1. Eigentlich gehört da ein Strich
obendrüber statt davor oder dahinter, aber das geht in ASCII halt
schlecht.

von A.K. (Gast)


Lesenswert?

Yep, ich sehe das Missverständnis. In dem FAQ ist das etwas irreführend
beschrieben. Such mal eine Beschreibung vom ISA-Bus bzw. PC104-Bus, das
sind die gleichen Signale.

IOR und IOW sind Strobe-Signale, active-low. Anno PC/AT sah das mal
ungefähr so aus:

Ruhezustand: IOR=1 IOW=1

Lesezyklus:
- Adressen, CS etc anlegen
- IOR=0
- 0,5µsec warten
- Daten abholen
- IOR=1

Schreibzyklus:
- Adressen, CS etc anlegen
- IOW=0
- Daten anlegen (kann man auch schon vor IOW)
- 0,5µsec warten
- IOW=1

Bei Blocktransfers ist das Timing enger. Dazu ist dann aber die
passende ATAPI-Referenz notwendig.

von Benedikt (Gast)


Lesenswert?

Die IDE Spezifikation ist echt miserabel:
Bei den CS, RD, WR Leitungen ist mit Aktiv (bzw. Asserted) Low gemeint,
bei den Adressleitungen ist es genau umgekehrt....

von Heinz (Gast)


Lesenswert?

@AK
Erst mal Danke ! Du hattest den entscheidenden Hinweis.
In Meiner Doku stand DIOR statt /DIOR.
Jetzt kann ich schon mal das Status-Register auslesen.
Es kommen aber bestimmt noch mehr Fragen !

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.