Tach miteinander, Ich weiss, das Thema wurde hier schon einige Male behandelt, doch leider nicht genau in der Richtung, wie ichs benötige. Also mir geht es darum, dass ich eine uralte IDE-Festplatte an meinem Mikrocontroller anschliessen will (Der hat 32 I/O-Leitungen, sollte also genügen oder?). Die ATA-Spezifikationen auf T13 bin ich am studieren, doch mir stellt sich folgendes Problem: Ich möchte vorerst nur ein absolutes Minimalsystem bauen, also so billig wie möglich und so wenig Komponenten wie möglich. Doch: was brauche ich alles, damit ich diese Festplatte zum Laufen bringe? Ich will weder Dateisysteme erstellen noch sonstwas in der Richtung, ich will einfach Byte für Byte der Festplatte lesen und schreiben können. Ich will also nur Rohdaten speichern (nennt man das dan RAW-Device?). Ist es auch möglich, die Festplatte lediglich im 8 Bit-Modus zu betriben sodass ich nicht alle 16 Bits auslesen brauche? oder gibts ne Möglichkeit, den 16 Bit-Bus so auf 8 Bit zu verkleinern, dass ich die zwei Teile nacheinander lesen kann? Fragen über Fragen.... Ich hoffe jemand kann mir da weiterhelfen. Evtl. würde ich mich sehr freuen, wenn mir jemand mailen könnte, der das schon mal gemacht hat und mir evtl. ein paar Schnipsel eines Schaltplans o.ä. geben kann. Dankbar bin ich auf jeden Fall für jede Hilfe ;) Grüsse Tobias PS: EMail: huby89 at gmx dot net
Wenn ich mich recht entsinne gab es da bei Atmel ein Applicationnote für. Aber hier ist auch ein Link: http://www.circuitcellar.com/dl2001/avr-r183.htm Gruß Alban
Hi. Ich hab vor einiger zeit mit der Festplatte mal etwas gespielt. Die minimalen Anforderung für die Ansteuerung ist ein Netzgerät mit +5V und +12V, ein µC (bei mir ist es ein PIC18F4220) einem 74LS04, einem Quarzoszillator, 2x 100nF Kondensator, 2x5kWiderstände, ein LEd und dazugehörigen widerstand. Ist wohl nicht wirklich viel ;-) Hier noch ein paar links: http://hem.passagen.se/communication/ide.html http://www.nomad.ee/micros/8052bas.html http://barrymichels.com/ide/ vorallem die erste seite kann ich empfehlen und dann noch diese: http://www.gaby.de/gide/IDE-TCJ.txt viel spass beim basteln.
Na, das ist doch schon viel besser als vieles was ich bisher gefunden habe ;) Hast du sowas schon mal gebaut?
Hallo! Such mal bei Google nach yampp in dem Projekt hat Jesper das schon ziemlich gut gelöst bzw. Dir ne Menge Arbeit abgenommen. mfg, Bjoern
@Schoaschi: Danke für die links. die helfen mir echt weiter. hast du mir evtl. einen kleinen schaltplan? das wäre echt super. @Björn: oke, mal googeln... grüsse tobias
Ich habe schon einen, aber der wird dir nicht wirklich was bringen. Er ist einfach nur eine kleine Testplatine wo nur der PIC und der IDE stecker drauf ist. Hier ein Link... erwarte dir aber nichts besonderes ;-) http://www.fernando-heitor.de/index.php?option=com_smf&Itemid=27&action=dlattach;topic=2268.0;attach=444 ICh werd schauen, dass ich den Schaltplan von einem Freund(mit dem ich das Projekt angefangen habe) bekommen. Der hat da etwas weiter gebaut, da ich momentan , ehrlich gestanden, keine lust am weiterbauen habe.
guten morgen Schoaschi, ja der schaltplan sieht wirklich nicht besonders komplex aus ;)) kansst du mir mal folgendes erklären: nachdem ich die ATA-Specs gelesen hab, weiss ich ejtzt über die register und so bescheid. man schreibt also die befehle, die man ausführen will, in irgend so ein register der HD. dann kann man mizt den leitungen /IOWR und /IORD (sow ars doch, nicht?) den befehl ausfphren lassen. wenn ichs recht im kopf hab. das ist mir alles klar, aber WIE sag ich der festplatte, in welches register ichw as schreiben will?? irgend ne wahrheitstabelle oder ein zeitdiagramm wär nicht schlecht. aber ich find nirgends sowas... gruss
Kann mir niemand mehr weiterhelfen? Google weiss nicht mehr rat, offensichtlich ist ausser mir ejdem klar wie eine festplatte funktioniert ;) das problem ist folgendes: nehmen wir an, ich wollte irgend einen sektor der HD auslesen. dann schreibe ich ins SN-register die nummer des sektors (0-255), ins SC-register eine 1, ins cylinder-register den zylinder (0-1024) und im head-register setze ich die letzten 4 bits auf den kopf, den ich lesen will. alles klar soweit. wenn das getan ist, schreibe ich den lesebefehl ins command register. danach wird der befehl ausgeführt. doch: wenn nun das BSY-flag gelöscht ist, wo stehen dann meine daten? laut gesundem menschenverstand müssten die dann ja an den pins DD0...DD15 erscheinen. aber die ATA-specs behaupten was anderes... das ist das 1. problem. dann das zweite: wenn ich die ersten beiden bytes gelesen habe (am ausgang der harddisk erscheinen ja immer 2 bytes, da es ja 18 bit ausgänge sind), wie komme ich dann an die restlichen 510 bytes ran? es werden ja immer min. 512 bytes = 1 sektor gelesen. wenn mir in dieser hinsicht noch jemand kurz auskunft geben kann bin ich rundum glücklich. grüsse tobias
Hast du inzwischen verstanden wie man auf die einzelnen Register zugreift. Wenn nicht schau mal ins Datenblatt z.B. ATMega128 externer SRAM Zugriff. Die Registeradressen gehen auf den Adressbus, die Daten der Register auf den Datenbus und wenn RD/WR gezogen wird werden die Daten übernommen. Ich weiss nicht welche ATA-specs du liest aber eigentlich ist es sehr gut dargestellt. Wenn du es einfacher willst dann lies mal die Compactflash specs von Sandisk ist das gleiche Protokoll wie bei Festplatten. Allerdings beschränkt auf den PIO Mode. Also das ganze für dich unnötige UDMA etc. Zeug weggelassen. Zu deiner Frage: Du hast festgestellt das die Festplatte immer 512 Byte Sektoren liefert jeweils 2 Byte (16 ! Bit) warum machst du nicht noch die anderen 255 Zugriff um die restlichen 510 Byte abzuholen? >wenn nun das BSY-flag gelöscht ist, wo stehen dann meine daten? >laut gesundem menschenverstand müssten die dann ja an den pins >DD0...DD15 erscheinen. aber die ATA-specs behaupten was anderes... nur zur Sicherheit: nach dem Busy liegen die daten nur an den Pins DD0..DD15 wenn du das Datenregister adressierst!
Nur ein kleiner Gedanke zu absolut minimal systeme. Wenn ich mich recht erinnere braucht man um die Platte zu steuern nur 8bit. Wenn du auf die haelfte der Kapazitaet verzichtest kommst du mut fast garnix an Bauteilen und sehr wenig Leitungen aus da die obere Haelfte der Datenleitungen ungebraucht sind. Ich habe damals eine Platte an einen AT89S8252 angeschlossen ohne extras aber voller Bus, obere Daten via DPH gesendet! Somit habe ich sogar den ALE latch weggelassen. Mit ein bissen Trixen geht vieles!
"Wenn ich mich recht erinnere braucht man um die Platte zu steuern nur 8bit." Den 8Bit-Modus können viele Platten nicht mehr. Also erst ins Datgenblatt schauen!
@wolfram: also da ich eine sehr sehr alte platte habe (zum üben ;)) habe ich die ata1-specs studiert. also den registerzugriff habe ich verstanden: 1. an DA0...DA2 und /CS0 und /CS1 die adresse des gewünschten registers einstellen. 2. daten, die ins register sollen an DD0...DD7 anlegen. 3. /IOWR aus- und wieder einschalten. wenn man stattdessen /IORD aus- und wieder einschaltet erscheinen die daten, die im register waren, an DD0...DD7. das macht man doch so, nicht? kann ich es denn so einrichten, dass ich auf nur ein einziges byte zugreifen kann? oder: wenn die ersten 2 bytes gekommen sind, wie mache ichs, dass ich dann die nächsten 2 erhalte? das ist das einzige was ich nicht vertsnden habe. sonst glaube ich, habe ich alles begriffen. also ich wäre echt froh wenn du mir dazu noch auskunft geben könntest :) grüsse & schönen abend tobias
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.