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
Sorry, aber dein Anhang ist ne Zumutung. Stell ein vernünftiges File rein, und dann geht auch was.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.