Hallo,
ich brauche für mein Projekt eine Datenloggingfunktion. Diese wollte ich
mit einer SD-Karte realisieren. Verschiedene Beiträge und Forenbeiträge
habe ich durchstöbert und bin auf das Projekt GLogger gestoßen
(http://www.mikrocontroller.net/articles/GPS_Logger). Messwerte
aufnehmen auf der SD-Karte als z.B. txt speicher, fertig. Denkste...
Ich habe jeweils eine 16MB und 64MB SD-Karte zur Verfügung, die es
damals bei den Digicams dabei gab. Beide habe ich mit Winxp auf FAT
formatiert.
Ich habe den Quelltext des Projektes an mein Projekt angepasst.
Pinbelegung in der Datei mmc.h und die Aktivierung des CS im Quelltext,
da dieser durch die Boardstruktur (Evaluation Board) auf PortG liegt
(siehe Anhang der SD-Karten Adaptierung).
1 | #define MMC_Write PORTB
|
2 | #define MMC_WriteCS PORTG //ChipSelectPin an PORTG (PG1)
|
3 | #define MMC_Read PINB
|
4 | #define MMC_Direction_REG DDRB
|
5 | #define MMC_Direction_REGCS DDRG
|
6 |
|
7 | #define SPI_DI 3
|
8 | #define SPI_DO 2
|
9 | #define SPI_Clock 1
|
10 | #define MMC_Chip_Select 1
|
11 | #define SPI_SS 0
|
Ich habe den Quelltext mit dem JTAGGER und AvrStudio durchlaufen lassen.
Die if Abfrage löst immer aus und springt, dann auf while(1). Die
Funktion mmc_init() gibt immer etwas ungleich 0 heraus. Ich weiß aber
nicht woran es liegt.
Die Belegung der SD-Karte ist so angegeben wie der Schaltplan es vorgab.
1 | int main(void)
|
2 | {
|
3 | if ((mmc_init() != 0) || (InitFat16() != 0))
|
4 | {
|
5 | while(1);
|
6 | }
|
7 |
|
8 | File logFile;
|
9 |
|
10 | fopen_((unsigned char*)"log.txt",'a',&logFile);
|
11 | fputs_(&logFile,"***START***");
|
12 |
|
13 | while(1);
|
14 |
|
15 | return (0);
|
16 | }
|
Hat jemand vielleicht Anmerkungen bzw. kann mir einen kleinen Hint in
die richtige Richtung geben?
Bin derzeit echt am Verzweifeln.