www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IDE-Harddisk am uC


Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alban (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, das ist doch schon viel besser als vieles was ich bisher gefunden
habe ;)
Hast du sowas schon mal gebaut?

Autor: Bjoern Buettner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

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.

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Edward Cardew (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Jim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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!

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

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.