Forum: Mikrocontroller und Digitale Elektronik ATA-Zugriffs Problem


von Nik Bamert (Gast)


Angehängte Dateien:

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

von Mark de Jong (Gast)


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,

von Nik Bamert (Gast)


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

von Matthias (Gast)


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

von Nik Bamert (Gast)


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

von Matthias (Gast)


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

von Nik Bamert (Gast)


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

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.