www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MMC ansteuerung


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

Bewertung
0 lesenswert
nicht lesenswert
hallo,
hab ein problem beim aufruf von read befehlen bei meiner MMc karte im 
SPI modus.
also die initialisierung funktioniert perfekt.
bekomme bei cmd0 eine 0x01, und bei cmd1 eine 0x00 als response.
danach versuche ich einen cmd17(read_block) oder einen cmd10(cid 
register) befehl audzuführen, jedoch bekomme keine antwort. warte in 
einer schleife auf die 0x00, aber die kommt net. mache ich irgendwelche 
timingfehler???
nach dem cid read will ichm mir die responses auf dem display anzeigen 
lassen, aber da kommt nix. glaube es bleibt in der schleife, wo ich auf 
0x00 warte, einfach hängen(wie gesagt die responses nach der mmc_init 
kommen, aber net die von CID read). muss ich nach der init warten oder 
irgendwas???????            ;-(

im anhang ist mein code.
und hier die stelle wo es sich anscheinend aufhängt(spi_init und 
mmc_init funzen ja, deswegen nur aufrufe und der cid befehl).

         rcall spi_init  ;nit aufgeführt da funzt
  rcall mmc_init   ;net aufgeführt, da responses 0x01 und 0x00
         rcall CID_read   ;hier in dem aufruf bleibts hängen
         rcall tstbild  ;hier komme ich nit hin, zeigt das response von 
CID
                         ;auf dem display  ;-(


CID_read:


CMD_10:
  ldi temp1, 0x4A    ;//Commando 10
  sts CMD,   temp1           ;CMD is a 6 byte label in sram
  lds temp1, 0x00
  sts CMD+1, temp1
  sts CMD+2, temp1
  sts CMD+3, temp1
  sts CMD+4, temp1
  ldi temp1, 0xFF
  sts CMD+5, temp1

  rcall Write_Command_MMC       ;siehe befehle weiter unten

  lds temp1, response_save      ;store response
  sts response_read+1, temp1
  cpi temp1, 0x00
  breq read_CID         ;wenn response 0x00 springe zu read_CID
  rcall send_end
  rjmp CMD_10


;Wartet auf Start Byte von der MMC/SD-Karte (FEh/Start Byte)

read_CID:

  ldi  temp1,  0xFF
  rcall  Write_Byte_MMC    ;siehe befehle weiter unten
  in  temp1,  SPDR
  sts   response_read, temp1
  cpi  temp1,  0xFF   ; Antwort sollte 0xFE für lesebstätigung
  breq  read_CID2
  cpi temp1, 0xFE
  brne  read_CID


read_CID2:


ldi ZL, LOW(cluster*2) ; Adresse von clusterspeicher in den z pointer 
laden
ldi ZH, HIGH(cluster*2)
ldi temp2, 0x10           ;weil antwort 16byte sind

read_CID2_1:
    ldi  temp1,  0xFF
    rcall  Write_Byte_MMC
    in  temp1,  SPDR
    st  Z+,  temp1
    dec temp2
    cpi temp2, 0x00
    breq read_CID_crc
    rjmp read_CID2_1


read_CID_crc:    ;nicht wichtig darum auslesen und net speichern
  ldi  temp1,  0xFF
  rcall  Write_Byte_MMC
  ldi  temp1,  0xFF
  rcall  Write_Byte_MMC

  rcall send_end

  ret


;________
;BEFEHLE
;--------



Write_Command_MMC:

  ldi temp1, 0xFF
  rcall Write_Byte_MMC

  ;//sendet 6 Byte Commando
  cbi  MMC_Write,  MMC_Chip_Select    ;//set MMC_Chip_Select to low 
(MMC/SD-Karte Aktiv)

  ldi  temp1,  0xFF
  rcall  Write_Byte_MMC

  lds temp1, CMD        ;//sendet 6 Byte Commando zur MMC/SD-Karte
  rcall Write_BYTE_MMC
  lds temp1, CMD+1
  rcall Write_Byte_MMC
  lds temp1, CMD+2
  rcall Write_Byte_MMC
  lds temp1, CMD+3
  rcall Write_Byte_MMC
  lds temp1, CMD+4
  rcall Write_Byte_MMC
  lds temp1, CMD+5
  rcall Write_Byte_MMC

response:

  ldi  temp1,  0xFF
  rcall  Write_Byte_MMC     ;//Wartet auf ein gültige Antwort von der 
MMC/SD-Karte
  in  temp1,  SPDR
  sts response_save, temp1    ;sichern des der antwort(response) von der 
MMC
  cpi  temp1, 0xFF   ;antwort sollte 0x00 sein aber kommt net
  brne  response2
  cpi temp1, 0xFF
  breq  response

response2:

  ret
      ;//Abbruch da die MMC/SD-Karte antwortet



Write_Byte_MMC:
    out  SPDR,  temp1
lp7:  sbis  SPSR,  SPIF
      rjmp  lp7
    ret


send_end:

  sbi MMC_Write,  MMC_Chip_Select
  ldi temp1, 0xFF
  rcall Write_Byte_MMC
  ret

Autor: fabse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso vielen dank im voraus ;-)

Autor: Kettensägenöler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, aber dein Anhang ist ne Zumutung. Stell ein vernünftiges File 
rein, und dann geht auch was.

Autor: fabse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also weiss keienr rat????

Autor: fabse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs schon vergesst es

Autor: Ludwig Wagner (lordludwig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was wars denn?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach langem Suchen:

Der Fehler in fabses Code liegt an einem Überschreiben der 
SPI-Kontrollregister in der Funktion Testbild.
Grummel, die Lösung zu Posten ist eigentlich nicht schwer oder?

Grüße
    Sebastian

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.