www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Compactflash Karte - Memory mode


Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich versuch eine CF karte im Memory mode mit dieser hardware
http://mcselec.com/an_123.htm  anzusteuern. Hardwaretechnisch dürfte
alles korrekt sein.

Nur leider klappt nichtmal das Lesen und schreiben von registern :-(.

Normalerweise müsste ja das RDY signal auf 1 gehen wenn die karte
ready
ist, nur bei mir ist es dauerhaft 0. (RDY leitung habe ich mit
transistor an eine led gehängt)

So läuft ungefähr mein init ab:

Das reset Signal schalte ich einmal von 0 auf 1 um die karte zu
resetten. CE lege ich auf masse. Dann müsste das RDY Signal doch
eigentlich auf 1 gehen oder mache ich etwas falsch??

Als ich den Controller einmal programmiert habe und noch die CF karte
noch im sockel hatte ging die led plötzlich an und nach dem
programmieren sofort wieder aus. Weiß jedoch nit wieso....

Ich hoffe ihr könnt mir helfen! was mach ich beim init falsch??

danke schonmal im vorraus

MFG Jörn

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

So, habe es endlich geschafft das lesen von Registern der CF karte
funktioniert endlich.  Für das status register erhalte ich einen wert
von 0x50 und vom Error register lese ich 0x01.  Kann das überhaupt sein
? Müsste das Error register nicht 0 sein weil ja im status register kein
 Error bit gesetzt ist???

Habe auch schon versucht in ein register zu schreiben und den wert dann
wieder auszulesen allerdings war nie mein wert drin, scheint so als
würde das schreiben von registern nicht funktionieren...??

QuellCode "lesen":

  .global CF_read_register
  .func CF_read_register

CF_read_register:

  ldi  r16, 0x00      ;0x00 nach r16
  out  DDRC, r16      ;Datenport auf Eingang stellen

  ldi  r16, 0xff      ;0xff nach r16
  out  PORTC, r16      ;Interne Pullups für PORTA aktivieren

  rcall  CF_check_ready

  out  CF_ADDR, r24    ;Addresse ausgeben
  cbi CF_CONTROL, CE
  cbi  CF_CONTROL, OE      ;RD=0

  nop
  nop
  nop
  nop

  in  r24, PINC  ;Daten nach r24 lesen

  sbi  CF_CONTROL, OE      ;RD=1

  sbi CF_CONTROL, CE

  ret
  .endfunc





Quellcode "schreiben":

.global CF_write_register
  .func CF_write_register

CF_write_register:

  ldi  r16, 0xFF      ;0xFF nach r16
  out  DDRC, r16      ;Datenport auf Ausgang stellen

  out  CF_ADDR, r24      ;Addresse ausgeben

  ldi  r22, 0x24
  out  CF_DATA_PORT_WR, r22  ;Daten von r22 auf Datenport ausgeben

  rcall  CF_check_ready
  cbi CF_CONTROL, OE
  nop
  nop
  cbi  CF_CONTROL, WE      ;WR=0
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  sbi  CF_CONTROL, WE      ;WR=1
  nop
  nop
  sbi CF_CONTROL, OE


  ret
  .endfunc


Sind die routinen so richtig oder habe ich was wichtiges vergessen?

Bin für jede hilfe dankbar!!

MFG Jörn M

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hat denn keiner ne idee wo der fehler liegt??

bin langsam echt am verzweifeln....


MFG Jörn

Autor: Andreas Auer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.

Also mir scheint, dass deine Routinen eigentlich ganz ok sind, bis auf
die Funktion zum Schreiben eines Registers. Was machst du da mit:
"cbi CF_CONTROL, OE"

Wenn mich nicht alles täuscht, sollte dies doch die RD Leitung sein,
oder?? Könnte der Grund für das nicht funktionierende Schreiben eines
Registers sein.

Das Lesen des Statusregisters, scheint richtig funktioniert zu haben.
Der Wert 0x50 ist in Ordnung, denke ich.
Der Wert für das Error Register ist im Prinzip auch ok, da es nur einen
gültigen Wert enthält, wenn im Statusregister auch das Error Bit gesetzt
ist. Es muss also nicht 0 sein.

Zu Testzwecken, würd ich dann mal das Commandregister mit dem Wert 0xEC
füllen. Danach musst 512 Bytes vom Data-Register lesen. Der Befehl 0xEC
heisst "Identify Device" und gibt dir einige kartenspezifische Infos
zurück (Seriennummer, Versionsnummer, usw.). Mehr kannst dem CF
Datasheet entnehmen.

mfg
Andreas

--
Andreas Auer                 aauer1 (at) sbox.tugraz.at
Student of Telematics        http://home.pages.at/aauer1
Graz, University of Technology

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.