Hallo, und schonwider eine SD-Karte........Sorry, aber ich komm nicht weiter. Ich habe mir ein Board wie im Anhang gebaut, und wollte nun die SD-Karte Testen. Die Anschlüße sind nur auf Stifftleisten gezohgen, die wie bei dem STK-500 über brücken mit dem AVR-Port verbunden werden. Benutzt wird ein Mega644 mit 3,3V und 16 Mhz. Ich habe die Lib von Ulrich Radig genommen und habe folgendes Problem. Es wird manchmal angezeigt, das die Karte gefunden wurde, obwohl noch garkeine im Slot steckt. Das passiert aber nicht immer. Wenn eine Karte im Slot steckt, wird sie nicht sicher oder garnicht , weil er ja auch eine findet, wenn keine drinn ist. Hättet Ihr einen ansatz wo der fehler liegen könnte ? Danke !!!
>weil er ja auch eine findet, wenn keine drinn ist
Mach einen Pullup an den Ausgang der Karte.
Es ist auf jeden Fall nicht verkehrt, u.a. auch damit die SD Karte dem ISP nicht in die Quere kommt wenn sich diese die SPI Schnittstelle teilen.
Ich bin am verzweifeln, auch der C in der versorgung der SD-Karte brachte keine verbesserung..........................
Hätte bitte jemand ein file für mich, das nur die SD-Karte initiallisiert, damit ich das mal richtig testen kann ? Wäre echt super!!!
So, ich habe nun je einen 10K pullup am CS,DO und CLK , 2X100nF an der versorgung, und es spinnt immernoch. Ist mein Code überhaupt richtig ??? P.S. ist mein erster ............ #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> #include "lcd.h" #include "mmc.h" #include "fat.h" #include "usart.h" int main() { usart_init(9600); lcd_init(LCD_DISP_ON); while ( mmc_init() !=0) { lcd_clrscr(); lcd_puts("Keine Karte!!"); } lcd_clrscr(); lcd_puts("Karte gefunden!!"); while(1); return 0; }
Vielleicht solltest du dir erst mal ein Buch über C-Programmierung zulegen...
Andreas schrieb:
> Also ist es komplett falsch???
Sagen wir es mal so, es ist alles andere als richtig...
Hi, ist das ein "normaler" Mega 644? Im Datenblatt ist eine Grafik, die die maximale Frequenz bezogen auf die Versorgungsspannung darstellt. Ganz genau genommen dürftest du bei 3,3V mit max. 13MHz takten... Ich halte es für eher unwahrscheinlich, dass das dein Problem ist, aber du solltest vielleicht mal einen Test mit einer kleineren Taktfrequenz machen um sicher zu gehen. Viele Grüße
>wo habe ich denn einen Fehler gemacht ?
Dein gepostetes Programm macht folgendes:
USART wird initialisiert
LCD wird initialisiert
bis hierher ist noch alles OK
Dann startest du eine Endlosschleife, die erst dann abgebrochen wird,
wenn die Funktion mmc_init eine "0" zurückliefert. Solange diese
Schleife läuft, wird tausende male pro Sekunde das Display gelöscht und
gleich danach wieder mit "Keine Karte!!" wieder beschrieben. Ist das
sinnvoll?
Der Hauptfehler kommt aber erst danach:
Wenn die Funktion mmc_init das erste mal eine 0 liefert, die Schleife
also verlassen wird, schreibst du ein einziges mal "Karte gefunden!!"
ins Display. Gleich danach kommt mit while(1); eine Endlosschleife, die
nie mehr verlassen wird, dein µC hängt sich auf und macht gar nichts
mehr.
naja den µC "aufhängen" mach ich bei tests genauso... entweder er darf noch mit einer LED blinken um zu zeigen, daß er "am ende" ist oder eben einfach einfrieren wenn das programm durchlaufen ist.
Ich möchte ja auch erst nur wissen, ob die sd-karte erkannt und die ini ok ist. Ich beckomme aber auch ein "Karte gefunden", obwohl keine karte eingesteckt ist........
Vor einiger Zeit hatte ich ein ähnliches Problem. Dabei ging es darum, die SD-Karte sektorenweise auszulesen und als PWM Audio abzuspielen. Manchmal tat das Ding, was es sollte und nach irgendeiner Softwareänderung (an einer ganz anderen Stelle) plötzlich nicht mehr. Nach stundenlangem suchen bin ich dann darauf gekommen, mal dem GCC auf den Zahn zu fühlen. Mit -O0 bis -O3 lief es, mit -Os nicht. Ich habe dann nicht weiter hinterfragt, was dahinter steckt sondern einfach die mmc-Library mit -O3 und den Rest mit -Os kompiliert und gut war. Gruß Chris
Wie compeliere ich denn einzelne libs unterschiedlich ? So gut kenn ich mich noch nicht mit AVR-Studio aus......
>Wie compeliere ich denn einzelne libs unterschiedlich ? So gut kenn ich >mich noch nicht mit AVR-Studio aus...... Brauchst du nicht zu machen. >Ich möchte ja auch erst nur wissen, ob die sd-karte erkannt und die ini >ok ist. Ich beckomme aber auch ein "Karte gefunden", obwohl keine karte >eingesteckt ist........ Das dürfte ein Software oder Hardwareproblem sein. Wenn an MISO ein Pullup hängt und keine Karte drin ist, dann bekommst du immer 0xFF über SPI. Klares Zeichen für keine Karte drin.
Komipliere doch einfach mal das ganze Projekt mit anderen Optimierungseinstellungen. Nur um zu sehen, ob's hilft...
>Komipliere doch einfach mal das ganze Projekt mit anderen >Optimierungseinstellungen. Nur um zu sehen, ob's hilft... Bringt nichts.
Ist 16 Mhz bei 3,3V nicht etwas viel für den 644? Laut Datenblatt ist das außerhalb der Spezifikation. Hast Du die Möglichkeit es mit einem kleineren Quarz zu testen (evtl. auch dem internen Quarz)?
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.