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
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
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,
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
@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).
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
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
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
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
Hi über das DH-Register im Command Block. Bit 6 = 0 -> CHS-Adressierung Bit 6 = 1 -> LBA-Adressierung Matthias
Hi Wie sage ich denn einer CF card ob ich sie im 8 oder 16 bit modus ansteuere??
Hi Set Features -> 0x01 (Enable 8-bit data transfers) CF Spec. 1.4 Seite 96 PDF/ Seite 85 Matthias
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.