Hallo Forum, ich hänge bereits seit einigen Tagen an einem mysteriösen Problem und weiss mittlerweile nicht mehr weiter. Ich möchte einen Datenlogger bauen (Nutzung des AVR-GCC mit der Procyon AVRlib), der in kurzen Abständen die Werte vom A/D-Umsetzer auf einer SD-Karte ablegt. Dazu verwende ich das Mega128 Modul RS232 Rev1.2 von Embedit (http://shop.embedit.de/product_002001_205.php). Messung also kontinuierlich, die Maximalwerte gemerkt und alle 4 Sekunden mit einer Art Timestamp versehen auf der Speicherkarte ablegen. Die Ansteuerung der SD-Karte erfolgt über Hardware-SPI (mit PB0 als CS-Leitung) nach der Anleitung von Ulrich Radig mit dem Spannungsregler LM317 mit ebenfalls seinen C-Routinen dafür, allerdings ohne FAT-Unterstützung. Bisher habe ich eine Trägerplatine für das Mikrocontroller-Modul angefertigt und die gesamte Schaltung aufgebaut (als Grafik und für Eagle im Anhang). Die Abfrage der Analogwerte ist problemlos möglich, nur bei der Ansteuerung der SD-Karte treten komische Probleme auf: Die Initialisierung der Karte (mittels mmc_init()) gibt keine Fehlermeldung zurück, ebensowenig das Schreiben von Daten (mmc_write_sector()) auf die Karte (ab Block 1, Null bleibt original). Ich schlussfolgere daraus, dass die Pinbelegung der SPI-Schnittstelle ebenso wie die CS-Leitung (zur Speicherkarte) korrekt sind. Klingt zwar erstmal gut, nun aber meine Probleme: (1) Schaue ich mittels Disk Editor (Tiny Hexer) auf die Karte, so sind dort keinerlei Daten zu entdecken. (2) Sobald ich lesend (mmc_read_sector(), mmc_read_csd() oder mmc_read_cid()) auf die Karte zugreife, gerät die Software in eine Endlosschleife. Folgende mögliche Fehlerquellen konnte ich bereits ausschließen: - Verbindung zwischen Speicherkarte und Schaltung (Durchgang geprüft) - Pegelwandlung (5V TTL am Controller, 3.30V an der SD-Karte der Ausgänge vom Controller zur SD-Karte sowie umgekehrt die Eingänge durchgemessen Die SD-Bibliothek der Procyon AVRlib (Autor: Pascal Stang) habe ich ebenfalls ausprobiert, hierbei jedoch kann ich die Karte nichteinmal initialisieren (Rückgabe-Fehlercode -1 bereits beim Befehl MMC_GO_IDLE_STATE). Möglicherweise hilfreich: Das Kabel zwischen Aufnahme der SD-Karte und der Leiterplatte ist knapp 3cm, der ISP ist beim Testen nicht angeschlossen. Ein Oszilloskop besitze ich ebenso wenig wie andere Spezialmessgeräte - Multimeter ist aber vorhanden :-) Irgendwie werde ich das Gefühl nicht los, dass es sich um ein Hardware-Problem handelt... Über Hilfe oder Tipps jeglicher Art würde ich mich sehr freuen. Viele Grüße, Andreas
Hallo,
> mit PB0 als CS-Leitung
Nach der (unmodifizierten) SW von Ulrich Radig ist CS aber PB3.
Gruß,
Dennis
Hallo Dennis, jo - diesen Wert habe ich bereits an PB0 angepasst. Die originale SW von Ulrich (testweise aufgespielt) zeigt bei mir folgendes an: System Ok Karte gefunden!! Nachfolgend passiert dann nichts mehr. Zusätzliche Debugausgaben vor jeder neuen odezeile entlarven die nachfolgende Funktion fat_cluster_data_store() als Grund dafür. Wie oben bereits vermutet denke ich, dass das Problem beim Lesen von Daten von der Karte auftritt... Viele Grüße, Andreas
Hallo Andreas, ganz schön langes Post :-). Ich hatte zufälligerweise das gleiche Problem und habe es bis jetzt nicht gelöst. Ich habe mal ein Ausgaben eingebaut und habe festgestellt dass die Funktion fat_cluster_data_store die Funktion fat_addr aufruft. Dort komme ich bis zur Funktion mmc_read_sector (MASTER_BOOT_RECORD,Buffer). Diese bleibt dann hängen und ich habe keine Ahnung woran es liegt. Vielleicht ist bei dir ja ähnlich. Eine Lösung würde mich auch interessieren. Viele Grüße, Christian
Hallo, ja, mit fat_cluster_data_store hatte ich auch Probs. Ich benutze nen MEGA16, der hat bekanntlich 1kB RAM. Ulrich war so groszügig in der genannten Funktioen nen extra Buffer mit Größe 512 Bytes (BLOCKSIZE) zu spendieren, was mein RAM sprengte. Man kann den (nach meiner Meinung) getrost auskommentieren und damit ausschließlich den vorhandenen "Multi Purpose Buffer" verwenden: void fat_cluster_data_store (void) //###################################################################### ###### { struct BootSec *bootp; //Zeiger auf Bootsektor Struktur //unsigned char Buffer[BlockSize]; // DKB: Use multi purpose buffer only!!! volume_boot_record_addr = fat_addr (Buffer); /getVolumeBootRecord address . . . Außerdem empfehle ich: http://www.mikrocontroller.net/forum/read-4-125350.html#364526 Gruß, Dennis
Hallo Dennis, leider brachte Dein Vorschlag nicht den gewünschten Erfolg. Auch die Änderung des Originalcodes von Ulrich entsprechend Deiner Anleitung halfen nichts. Der Controller hängt sich immer wieder beim Aufruf von mmc_read_sector() (in diesem Fall aus der fat_addr() aufgerufen) auf. Das passiert bei wirklich jedem lesenden Zugriff - ich vermute das Problem ja in der Hardware - softwareseitig benötige ich keinerlei FAT-Unterstützung, will die Daten einfach nur blockweise ablegen und später wieder einlesen... Viele Grüße, Andreas
Hallo, habe mal meine HW-Anbindung angehängt. Vielleicht hilft's ja. Gruß, Dennis
Hallo Dennis, Danke für den Plan - werde ihn mir gleich einmal zu Gemüte führen. Ich vermute, Dein Mega8 wird mit mit 5V betrieben? Grüße, Andreas
> Der Controller hängt sich immer wieder beim Aufruf von > mmc_read_sector() (in diesem Fall aus der fat_addr() aufgerufen) auf. Init geht aber beim Lesen kommt das Daten-Start-Byte nicht an? Klingt wie das Problem mit der Flankensteilheit, das ich auch hatte. <http://www.mikrocontroller.net/forum/read-1-312491.html#321153>
> Ich vermute, Dein Mega8 wird mit mit 5V betrieben?
MEGA16 @ 3.3V und 4MHz
Dennis
Hmm, ok - das habe ich befürchtet... bin leider auf eine Spannungsversorgung von 5V angewiesen. Im Link von mh789 (PS: Danke für den Tipp mit der Flankensteilheit!) wird die Karte zwar mit 3.3V versorgt, Signalpegel jedoch TTL. Irgendwie ist mir dabei nicht wohl, hab Angst um die SD-Karte, aber werde die Idee mit den Flanken jedoch einmal näher betrachten. Danke dafür, viele Grüße, Andreas
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.