Heyho,
ich arbeite an einer Messelektronik für ein Studentenprojekt.
Ein Teil der Aufgabe ist es, Daten auf eine SD Karte zu speichern.
Wir benutzen einen Atmega8535. Die SD-Karte ist via SPI mit dem Mega
verbunden. Ich benutze eine leicht abgeänderte version des petitFatFs
codes (avrmmcp.c) um rohdaten(!) ohne FS auf die Karte zu speichern (RAM
is knapp, daher so und nicht in ein file)
Ich habe die Kommunikation sowohl über UART ausgegeben als auch mit
einem Logic analyzer die Übertragungen begutachtet. Die SD Karte
initialisiert erfolgreich und diskWritep gibt auch Erfolg zurück. Im
Analyzer konnte ich auch deutlich sehen, das die Kommunikation klappt
und eine positive data-response zurück kommt.
Dieser code (angenommen das die Rückgabewerte erfolg anzeigen - ich
teste das aber das würde hier etwas unübersichtlich glaub ich)
1 | // irgendwo in einer funktion "initLink" die in aufgerufen wird
|
2 | initSpi(); // fsk/128 -> 125khz
|
3 | initDisk();
|
4 | spiMaxSpeed(); // fsk/2 -> 8mhz
|
5 | const char* x = "Hallo Welt";
|
6 | diskWritep(NULL,0x1);
|
7 | for (int i = 0; i < 10; i++) {
|
8 | diskWritep(x,11);
|
9 | }
|
10 | diskWritep(NULL,0x0);
|
Ich nehme mir nun die Karte, setze sie auf null auf linux
1 | dd if=/dev/null of=/dev/sdb bs=512 count=3906250
|
Tue sie in die Elektronik, Schalte das Ding an, warte einen Moment und
sehe sofort dass das erfolgreich durchläuft. Schalte ich das ab. Karte
zurück in den Rechner und
1 | dd if=/dev/sdb of=out.bin bs=512 count=3906250
|
Dann mache ich strings auf out.bin - und finde nichts. Auch wenn ich mir
über hexedit die ersten Blöcke der Karte anschaue kann ich nichts sehen.
Hat hier irgendwer eine Idee woran das liegen könnte? Die Verwendete
SD-Karte wird sonst in einem 3D-Drucker benutzt (2GB SD von SanDisk) und
funktioniert mit dessen Arduino einwandfrei (da wird halt nur gelesen
aber das geht)
Danke Schonmal
~mkalte