www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATA-Zugriffs Problem


Autor: Nik Bamert (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich hoffe ihr könnt mir bei diesem Problem helfen. Ich habe zwar
schonmal eine Frage zu diesem Thema gestellt, es kam bis jetz aber
immer noch nicht das richtige heraus... Die Ata-spec hab ich
gelesen(das notwendigste(timing busycheck, register usw...))
Zum Test versuche ich, die Drive-info zu lesen.

Dazu resete ich erstmals die Harddisk.
Danach frage ich das busy flag ab, bis es low ist.
Dann schreibe ich den befehl &90 (device diagnostic) in das
befehlsregister.
Danach frage ich das busy flag ab, bis es low ist.
Dann schreibe ich den befehl &ec(identify device) in das
befehlsregister.
Danach lese ich wieder das Statusregister, bis busy low ist und warte
bis drq high ist.
Wenn dies der Fall ist, schalte ich ins Datenregister, und lese dieses
512 mal aus.(1 Sektor) Doch ich bekomme nur Wirre zeichen, und vorallem
jedesmal andere. Doch der Zugriff funktioniert garantiert. Genau in dem
Moment, wo ich das Drive-info command schreibe, 'gurgelt' die
Festplatte und zwar jedesmal, wenn ich dies versuche.


Ich hab im Anhang das Bascom Programm dran.
An portc hängen die datenbits 0...7
an pa.0 dior
an pa.1 diow
an pa.2 ad0
an pa.3 ad1
an pa.4 ad2
an pa.5 reset

Ich weiss das einige der Signal low aktiv sind.(dior, diow, reset)
Ich habe die Datenbits 8..15 nicht angeschlossen, sondern gegen low
geschaltet. Dies weil alle Register über 8 bit angesprochen wird und
ich kein fat filesystem proggen will. Daher brauche ich die restlichen
8 bits nicht. Ich verwende ausserdem einen Atmega 16
Desshalb nun meine Frage : Warum geht das nicht?
Ich habe alles geprüft, auf kurzschlüsse zwischen den leitungen,
ebenfalls mit dem durchgangsprüfer alle Leitungen gecheckt.
Auch das Kabel ist nur etwa 20 cm lang.

Nik

Autor: Mark de Jong (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Nik,

Das interface ist 16-bit, du brauchst also auch die bits 8..15.

und wie hast Du die CS leitungen angeschlossen?

Lese mal die ATA specs.

siehe mal bei der mp3 player "yampp" wie mann es anschliessen soll.

Grüße Mark,

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne, brauch ich nicht...wurde mir hier schonmal bestätigt.
Die Register sind acht bit ausser das Zylinder register. Dieses ist
jedoch in zwei acht bit register eingeteilt. Und wenn ich KEIN Fat
System machen möchte brauche ich auch keine 16-bit.
"lese mal die ata specs"-lies meinen Beitrag-hab ich nämlich
bereits:)
Bis jetzt bin ich auch soweit das ich das status register lesen kann.
Mich würde nun eher interessieren, ob mein programm im grunde richtig
ist

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

um den ID-Befehl auszuführen brauchst du aber die oberen Bit da der
Befehl eben einen Sektor (=512 Byte) über das Data-Register zurückgibt.
Du mußt also nur 256mal lesen, aber eben immer 16 Bit. Außer du
verwendest CF Karten. Die lassen sich in einen 8-Bit Modus schalten.

Matthias

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Trotzdem, 16bit sind ja nicht ein byte. Sind dann zwei bytes in den 16
bit, oder gelten nur die oberen? Wenn darin zwei bytes verpackt wären,
müsste ich ja jedenfalls die hälfte empfangen können..
ich bekomme aber nur nullen zurück also nicht ascii nullen, sondern hex
&00. sonst nix. Aber die 'normalen' write/read commanos gehen doch
auch mit acht bits, oder? Ich langsam keine pins mehr frei.
Auserdem: wenn ich das recht sehe, kann ich cs0 auf vcc schalten und
cs1 auf gnd, da diese pins low-aktiv sind, wird immer der
KOmmando-Register block ausgewählt. Für was ist der steuer
Registerblock überhaupt notwendig, wenn man nur einfache befehle
ausführen will?

Nik

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

den einen Block braucht man wirklich nicht unbedingt. In den 16 Bit
sind jeweils 2 Byte verpackt. Mit deinem Code kann ich leider nichts
anfangen weil:

1. Basic (das ginge ja noch)
2. Fast nicht kommentiert (muß ja nicht jede Zeile sein aber ein
bischen mehr wär schon schön)
3. Überhaupt nicht strukturiert (ein paar tabs können ganz klar die
Übersicht erhöhen)

Matthias

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ich werde den code noch mehr kommentieren und nochmals reinstellen,
diesen hab ich einfach in etwa 30 minuten zusammengebastelt :) aber
kein proble, ich mach ihn etwas verständlicher, wird jedoch noch etwas
dauern

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.