Forum: Mikrocontroller und Digitale Elektronik MMC ansteuerung


von fabse (Gast)



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

von fabse (Gast)


Lesenswert?

achso vielen dank im voraus ;-)

von Kettensägenöler (Gast)


Lesenswert?

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

von fabse (Gast)


Lesenswert?

also weiss keienr rat????

von fabse (Gast)


Lesenswert?

habs schon vergesst es

von Ludwig W. (lordludwig)


Lesenswert?

was wars denn?

von Sebastian (Gast)


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

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
Noch kein Account? Hier anmelden.