Ich versuche mit den MSP430 Daten auf eine SD-Karte schreiben. Die Programmierung erfolgt mit Energia. Als Libary nutze ich "pfatfs.h". Leider schaffe ich noch nicht einmal die Intialisierung(rc=6). Hat einer schon Erfahrung mit einer SD-Karte und Energia. Wie kann man die SD-Routine von Arduino als Alternative nutzen? Die Libary "pfatfs" ist doch sehr rudimentär. Hier noch mein Code: #include "SPI.h" #include "pfatfs.h" #define cs_pin P2_0 // chip select pin #define read_buffer 128 // size (in bytes) of read buffer #define LOG_DELAY 5000 // 5000ms -> 5sec unsigned short int bw, br;//, i; char buffer[read_buffer]; int rc; char rr[20]; DIR dir; /* Directory object */ FILINFO fno; /* File information object */ uint32_t ui32_ReadTemp = 0; uint8_t StringLength = 0; char buf[30] = "Test1"; uint32_t counter = 0; uint32_t AccStringLength = 0; void setup() { Serial.begin(9600); // initialize the serial terminal rc = FatFs.begin(cs_pin); // initialize FatFS library calls if (rc) die(rc, 0); } /* Stop with dying message */ void die ( int pff_err , int pff_i) { Serial.println(); Serial.print("Failed with rc="); Serial.print(pff_err,DEC); Serial.print(" "); Serial.print(pff_i,DEC); for (;;) ; } /*---------------------------------------------------------------------- -*/ /* Program Main */ /*---------------------------------------------------------------------- -*/ void loop() { rc = FatFs.open("log.txt"); if (rc) die(rc, 1); delay(100); bw=0; rc = FatFs.lseek( AccStringLength ); if (rc) die(rc, 2); AccStringLength = AccStringLength + 512; rc = FatFs.write(buf, StringLength,&bw); if (rc) die(rc, 3); rc = FatFs.write(0, 0, &bw); //Finalize write if (rc) die(rc, 4); rc = FatFs.close(); //Close file if (rc) die(rc, 5); }
Werner L. schrieb: > Leider schaffe ich noch nicht einmal die Intialisierung(rc=6). Und, was sagt die Dokumentation, was der Rückgabewert 6 bedeutet?
Der Rückgabecode nützt nix, Ausschnit aus dem C++ Wrapper:
1 | disk_init(); |
2 | res = mount(&fatfs_obj); |
3 | |
4 | SPI_SET_DIVIDER(_clkdivider); |
5 | |
6 | #if _USE_DIR
|
7 | res = pf_opendir(&dir_obj, (const CHAR *)"/"); |
8 | #endif
|
9 | |
10 | return res; |
Das Symbol _USE_DIR hat 1 als default Wert. Damit wird der Rückgabecode von mount nicht ausgewertet und einfach weggeschmissen. Das nachfolgende pf_opendir() gibt den Code 6 (Dateisystem nicht geöffnet) als Folgefehler aus.
So macht es TI: http://www.ti.com. c n/cn/lit/an/slaa281b/slaa281b.pdf und generic: http://elm-chan.org/fsw/ff/00index_e.html
Hallo Jim, vielen Dank für die Info. Aber wo und wie kann ich (als C-Laie) den Wert von _USE_DIR setzen? Werner
In einer der .h Dateien. Dort steht irgendwas wie //#define _USE_DIR Die // entfernen, schon ist _USE_DIR definiert.
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.