Forum: Mikrocontroller und Digitale Elektronik Probleme mit den ATA Befehlen...


von Nik Bamert (Gast)


Lesenswert?

Hallo zusammen!

Ich versuche gerade eine Festplatte mit IDE Interface an einen
Mikrocontroller zu hängen. Es treten jedoch immer wieder einige
Probleme auf, ich hoffe das einige von euch so etwas schonmal gemacht
habt...


Eigentlich könnte man die Festplatte auch in einem 8 Bit Modus
betrieben, denn alle Befehle sind höchstens bis hex FFh?!

...bis auf auf einige Befehle wie z.B. Read Sector.

zu diesem Befehl steht in Elektor 3/01 als Befehl : 20h 21h
wie ist das zu verstehen? Ist hiermit ein Befehl gemeint (2021h =
dezimal 8225) ? Oder muss man die Befehle nacheinander senden, also
zuerst 20h und dann 21h?


Und hier noch meine letze Frage:

Soweit ich das richtig verstanden habe, wird immer der ganze Sektor(512
bytes) gelesen.

Man schreibt also  die Kopfnummer, den Startsektor und die
Zylindernummer in die entsprechenen Sektoren. Und danach noch den
benötigten Befehl in das Befehlsregister(Read Multiple oder Read
Sector????)

Danach denke ich sollte das erste Byte ja schon am Datenbus anliegen.
Aber wie sagt man der Festplatte dann, das sie das zweite, dritte ..usw
Byte ausspucken soll??-geschieht das mit einem Impuls an IOWR/, oder
muss man nach jedem Byte wieder den Read Sector Befehl ins command
Register schreiben??

Ich bin für jeglich e Hilfe dankbar. ;-)

MFG Nik

von Matthias Weißer (Gast)


Lesenswert?

Hi

Wie wärs wenn du selber mal in die ATA-Specs kuckst? IIRC ist 0x20/0x21
ReadSector w/o retry

Wenn du den Befehl abgesetzt hast und die Platte bereit meldet (über
das Busy Bit) mußt du 256 mal ein Wort lesen. Es wird nach jedem
Lesevorgang ein Wort weitergeschaltet. Diverse Statusbits gilt es aber
davor abzufragen. Welche ließt du bitte selber.

BTW:
Moderne Platten (<10a) unterstützen den 8 Bit Modus nicht mehr. CF
Karten allerdings schon.

Matthias

von Mark de Jong (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Nik,

Also zum ersten, das IDE interface ist 16-bit, mit 8-bit wird es nicht
funktionieren.

Hast Du schon die ATA-x specificationen gelesen, da ist alles gut
beschrieben.

Ich habe es schon selbst gemacht, und selbst geschrieben, davon lernst
Du am meinsten.

Meine source code werde Ich demnächst auf meine homepage stehen haben.

Meine source code ist im anhang.

Diese code ist für einen SAB C167CR mit der Tasking C166/ST10 compiler
geschrieben.

Grüße Mark,

von Nik Bamert (Gast)


Lesenswert?

Hi

Danke mal für die Antworten!

@Matthias
ich hab die Ata-spec zum Teil gelesen, die CF-Spec zu dem noch
Teilweise. Ebenfalls die Artikel in Elektor.
Aber ich hab eben noch das Fach Englisch eben noch nicht abgeschlossen,
ich bin 13 und habe dieses Fach erst seit einem Jahr.

@Mark
Danke für den Source, er ist mir bis jetzt schon sehr hilfreich
gewesen. Vorallem weil der Code in C geschrieben ist und nicht in ASM.

MFG Nik

von Gast (Gast)


Lesenswert?

@Mark de Jong:

Das ATA- (nicht IDE) Interface ist nicht zwangsläufig 16bit. Ältere
Platten unterstützen zum Teil den 8Bit-Modus und CF geht nur 8bittig!

Und was das Ausgeben des jeweilig nächsten Datenworts angeht:
Das macht das ATA-Device nach dem Read-Strobe (DIOR, nicht DIOW).

von Matthias Weißer (Gast)


Lesenswert?

Hi

@Gast
Wie kommst du zu der Aussage das CF-Karten nur 8-Bittig angesteurt
werden können. Das ist absoluter Blödsinn (entschuldige aber es ist
nunmal so)
CF Karten können 8-Bit oder 16-Bit breit angesprochen werden. Hab ich
beides schon gemacht und hat auch beides funktioniert. Und so steht es
auch in der CF Spec. 1.4 beschrieben.

@Nik
http://dict.leo.org

Mit 13 schon so weit sein eine IDE-Platte anzusteuern -> Respekt. Ich
mußte 19 werden bis mir das zum ersten mal gelungen ist.

Matthias

von Nik Bamert (Gast)


Lesenswert?

Hi!

Mit dem 8 bit Modus dachte ich auch nicht unbedingt daran, das die
Festplatte in diesem Modus betrieben werden muss.
Denn die Befehle sind alle 8 bit also hächstens bis FFh.


Und wenn man nicht unbedingt Words speichern will sondern nur Bytes
speichern will, dann könnte man die oberen 8 bit des Daten busses
einfach auf GND 'legen'. Denn solche Dinge wie das Error Register
sind mir nicht so wichtig, ich muss nicht zwingend wissen, was für ein
Fehler aufgetreten ist.

Soviel ich weiss sind auch die Head/Sector/Cylinder Register nur acht
bittrig, ausser Cylinder, aber dort gibt's zwei verschidene 8-Bit
Register.

Eigentlich sollte man die Festplatte auf diese Art ja acht-bittrig
ansteuern, ohne das die Festplatte in einen bestimmten Modus
umgeschaltet werden müsste.


@Matthias
Danke für das Lob ;-)

MFG Nik

von Matthias Weißer (Gast)


Lesenswert?

Hi

das könnte man natürlich. Aber ein Dateisystem wie FAT32 kannst du dann
natürlich nicht mehr nutzen. An deiner Stelle würde ich das Interface
schon 16-Bittig auslegen.

Außerdem solltst du die Ansteuerung gleich im LBA-Modus erledigen.
Diesen Modus sollten alle Platten ab etwa 500MB unterstützen. Es
ermöglicht dir eine lineare Adressierung aller Sektoren der Platte ohne
die lästige CHS-Umsetzung.

Matthias

von Nik Bamert (Gast)


Lesenswert?

Hi

@Matthias

LBA kenn ich bereits,  (2^28*512 = maximal 128 Gigabyte)
Aber wie sagt man der festplatte, das sie im LBA Modus geschrieben und
geleses werden soll? Ich finde dazu nichts. Kann man die Register
einfach wie beschrieben mit der 28 Bit langen LBA Adresse auffüllen,
und die Festplatte weiss dann selbst ob es sich um den LBA oder den
'normalen' Modus handelt, oder muss man das irgendwie festlegen? Wenn
ja, wie?

Nik

von Matthias Weißer (Gast)


Lesenswert?

Hi

über das DH-Register im Command Block.
Bit 6 = 0 -> CHS-Adressierung
Bit 6 = 1 -> LBA-Adressierung

Matthias

von Jörn (Gast)


Lesenswert?

Hi

Wie sage ich denn einer CF card ob ich sie im 8 oder 16 bit modus
ansteuere??

von Matthias Weißer (Gast)


Lesenswert?

Hi

Set Features -> 0x01 (Enable 8-bit data transfers)

CF Spec. 1.4 Seite 96 PDF/ Seite 85

Matthias

von Jens Renner (Gast)


Lesenswert?

Hallo!

Mal 'ne andere Frage zum Thema CHS/LBA: letzteres kann ich mit meinem
Controller ohne Probleme lesen.
Manche Platten hingegen unterstuetzen nur den CHS-Modus. Weiss jemand,
wo ich Infos zum Thema FAT32-CHS (FAT-ID 0x0B) bekomme?
Insbesondere ueber den Startcluster der FAT, Clusterchains, moegliche
Umwandlung LBA->CHS etc.

Im Internet habe ich dazu nicht viel gefunden. Bzw. mir ist noch nicht
ganz klar, inwieweit meine LBA-Routinen CHS-tauglich sind.
Hat jemand Erfahrungen damit?

Gruesse


Jens

von Jörn (Gast)


Lesenswert?

Hi,

Muss die CF Card bevor man register oder sektoren lesen oder schreiben
kann immer resettet werden (software und oder hardwaremäßig)?

MFG Jörn

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.