www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATAPI Status Register


Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

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

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.