mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CF-Karte kontaktieren, ansteuen usw.


Autor: Carsten Pietsch (papa_of_t)
Datum:
Angehängte Dateien:
  • cf.zip (11,8 KB, 70 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Liebe Mit-Bastler,

ich hatte ja schon geschrieben, daß ich mich mit CF-Karten beschäftigen 
will. Jetzt gibt es erste kleine Ergebnisse, aber auch Fragen. Ich 
schreibe hier weiter, weil der alte Thread eine falsche Kopfzeile hat 
(SD statt CF).

Beitrag "SD-Karte und RDY-Signal (Pin 37)"

Zuerst habe ich mich gefragt, wie ich die Karte kontaktiere. Da gibt es 
bei eBay so CF zu IDE -Adapter. Habe ich gleich ganz euphorisch bestellt 
für < 5 Euro schon inkl. Versand - dann gesehen, daß die Teile aus 
Hongkong kommen und ich warten muß *ärger, selbst ausgetrickst*. Zum 
Leiterplattenmachen (belichten, ätzen usw.) hab ich nichts zu Hause - 
ich arbeite lieber auf einem Breadboard.

Also ein Mega 16 (DIP40, toll zum Basteln) draufgesteckt. Weil ich 
ungeduldig war und die CF-Karte schon hatte, hab ich einfach passend 
dünnen Draht gesucht und "zu Fuß" kontaktiert, siehe Foto. Lacht nicht! 
Die Leitungen hab ich dann an der Karte mit Klebeband fixiert (siehe 
Foto, Anfangsstadium). Funktioniert, aber Nachteil: Man kann die Karte 
nicht mehr ohne erheblichen Aufwand in einen Kartenleser stecken, aber 
die Karte ist ja nur zum Testen. Schon wieder blöd angestellt hab ich 
mich trotzdem: Hab die Karte gebraucht und ungetestet bekommen und sie 
nicht im Kartenleser vorher ausprobiert! Naja, die Hoffnung besteht, daß 
sie funktioniert.. :-)

Die Beschaltung ist prinzipiell so, wie hier angegeben, nur daß ich 
einen Mega16 dran habe (Portbelegung siehe Programm im Anhang)

http://www.mikrocontroller.net/attachment/6746/com...

Also hab ich ein kleines Programm geschrieben, und erstmal versucht, die 
Register zu schreiben und zu lesen. Wer mal schauen will, Programm ist 
anbei (Entschuldigung für den etwas widerlichen deutsch-englisch-Mix). 
Ausgabe des Programms im Terminal:


Start CF-Test
Karte gesteckt
Bereit (Signalleitung)
test2 F6
test3 00
test4 04
test5 05
test6 F6


Wie man sieht (wenn man ins Programm schaut), funktioniert das bei 
Register 2 und 3 nicht, bei 4-6 schon.. Seltsam. Evtl. noch Daten in 
einem Puffer und der Fehler kommt nur, weil ich 2 und 3 zuerst gelesen 
habe? Naja ich werde weiter untersuchen und mich dann wieder melden.

Aufgetauchte Fragen:

1) Die RDY-Leitung zeigt mir, daß die Karte bereit ist, das 
Statusregister andererseits (das ich vorher mit einem modifizierten 
Programm untersucht habe) steht permanent auf 50 (hex) - dies würde doch 
bedeuten, die Karte ist Busy, oder?

2) Mir ist so als hätte ich gelesen, daß die Register 16bit breit sind - 
muß ich da irgendwie 2x lesen? Evtl. stimmt das auch einfach nicht..

3) Der Code vertraut darauf, daß die Karte im PC-Card-Modus betrieben 
wird - allerdings - wie wird der eingestellt? In Datenblatt steht immer, 
was verschiedene Pins in welchem der 3 Modi bedeuten, aber irgendwie hab 
ich überlesen, wodurch die Modi eingestellt werden..?

Sachdienliche Hinweise zu 1 bis 3 werden gerne entgegengenommen.. :-)

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Sachdienliche Hinweise zu 1 bis 3 werden gerne entgegengenommen.. :-)

Warte auf den CF-Adapter aus Hongkong.

Bitte, gerne.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du wenigstens einen Schaltplan reinstellen und einen Link zur 
CFspec,
hab meine gerade nicht hier.
1.
Die RDY Leintung kannst du auswerten, das Statusregister enthält nur 
richtige Informationen wenn du richtig zugreifst und dies ist nicht 
sicher!
2. ja funktioniert aber nur wenn die Karte im 8Bit modus ist ,ansonsten 
alles (D0..D15)auswerten.
3. über 2 Pins siehe CFspec

Könnest du mal angeben auf WAS du eigentlich zugreifen willst. Da gibt 
es ja auch noch einen Attributspeicher oder sollen es die IDE Register 
sein?
Dein Programm ist da nicht sehr hilfreich.

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke fuer den Link, aber ich habe schon genügend Spam in der Mailbox...
früher gabs die mal, bei SANDISK aber die Seiten sind auch nur bunter 
geworden...

Autor: JojoS (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
oh sorry, früher gabs die da glaube ich auch mal ohne Reg, war schon 
lange nicht mehr da. Aber für solche Fälle hat man doch eine 
Wegwerf-Adresse beim Freemailer... Ich habe noch ein älteres Doc von 
SanDisk auf der Platte gehabt, ist im Anhang.
Zum Thema: kann es sein das die Adressleitung A02 'klemmt' ?

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit der A2-Leitung werde ich prüfen.

Die CF-Karte ist so beschalten wie im zweiten, oben angegebenen Link. 
Das Datenblett aus dem Link von JoJoS ist etwas anders als meins 
(übersichtlicher..) Muß nochmal nachlesen, wie das mit den Modes 
funktioniert.

Ich will auf die Steuerregister (0 bis 7 bzw. 0 = Data, ...,..., 7 = 
Status / Command) zugreifen. In Register 0 werden also später die Daten 
zum Lesen / Schreiben drinstehen.

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch etwas anschaulicher: die CF-Karte ist genau so angeschlossen wie 
hier,

http://members.aon.at/voegel/Downloads/Driver/CF_H...

zusätzlich ist noch RDY/BSY mit PinD.6 verbunden

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist es die alte Falle mit dem JTAG Interface das per Fuses aktiviert ist 
?Auffälligerweise beginnt das gerade bei PortC.2 und da ist auch die A2 
angeschlossen.

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Fuses sind noch im Lieferzustand (internet Oszillator, 1MHz, ...) 
Habe gerade nachgelesen: Datenblatt Seite 217 sagt, daß JTAG 
standardmäßig eingeschaltet ist - Daran könnte es also tatsächlich 
liegen!

Hatte bisher immer kleinere AVRs ohne JTAG, da kannte ich diese "Falle" 
noch nicht.. Ich probiere gleich heute abend..

Autor: Carsten Pietsch (papa_of_t)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
JoJoS, Du bist der Held des Tages - ich hab JTAG "weggefused" und schon 
hat alles funktioniert! Ich hab mein Programm ein bischen werweitert, 
Sektoren geschrieben und prüfgelesen - alles prima. So mußte ich also 
nicht mal warten, bis ich meinen Oszi wiederhabe, um zu sehen, daß an 
der A2 Müll 'rauskommt.

Wenn ich so darüber nachdenke, wie lange ich mit den SD-Karten probiert 
habe, bis es funktioniert hat mit CMD0, CMD1 usw. (und dann zicken 
einige spezielle Karten immer noch) - Da ging das irgendwie zu einfach 
:-)

Im Anhang hab ich nochmal ein Foto von der absoluten "low 
budget"-Variante für "ganz viel Speichern am uC". Von den (jeweils 
verschiedenen) Transportkosten abgesehen, kosten Chip und Karte 
(letztere gebraucht bei eBay) zusammen gerdae mal 5 Euro.. (ist eine 
16MB Karte)

Jetzt werd ich mal einen Quarz anschließen und die zeitkritischen 
Stellen in Assembler umbauen - mal sehen, wie weit sich die Karte von 
der Geschwindigkeit reizen läßt.

Eine Frage allerdings bleibt - ich nutze ja die RDY - Leitung, um 
festzustellen, ob die Karte bereit ist. Wenn ich stattdessen das 
Statusregister lesen wollte - es steht immer auf 50 Hex. Das 
höchstewertige Bit (siehe Datenblatt oben Seite 47) wiederum bedeutet 
BUSY, und wenn dem so ist sollen andere Bits ungültig sein (Also auch 
bit 6, RDY). andererseits kann ich ja trotzdem immer lesen und schreiben 
- da ist wohl irgendein Denkfehler. Mit welchen Beinchen ich jetzt den 
funktionierenden Modus eingestellt haben weiß ich auch nicht so recht, 
ist mir aber jetzt auch nicht mehr so wichtig :-)

Viel Spaß beim Basteln weiterhin!

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gestern ist nun mein Adapter (CF auf IDE) angekommen. Prima, dachte ich, 
gleich mal durchmessen. Siehe da: mein o.g. Programm, mit dem alles so 
super läuft, muß modifiziert werden:

Der Adapter zieht die OE-Leitung auf Masse - Nachlesen brachte die 
Erkenntnis, daß die Karte dann im "TRUE IDE MODE" arbeitet. (Was bei 
einem CF zu IDE-Adapter ja nicht so abwegig ist.. :-).

Also hab ich gesehen, daß ich statt WE und OE jetzt IORD und IOWR 
benutzen muß. Eine gute Erklärung fand ich in diesem Artikel:

http://www.compuphase.com/mbr_fat.htm

Jetzt bleibt noch herauszufinden: Kriege ich es mit diesem Adapter (also 
im "TRUE IDE MODE") hin, daß ich die Daten mit 8 bit statt mit 16bit 
übertragen kann? Wenn ja, wie? Ich hab zwar im Datenblatt nachgeschaut, 
aber da krieg ich immer vor lauter Tabellen so Schwindelanfälle .. :-) 
Naja evtl. vergeht das noch. Aber wenn das schonmal jemand gemacht hat, 
wäre ein Tip sehr nett.

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.