Forum: Mikrocontroller und Digitale Elektronik MSP430 + SD mit Energia


von Werner L. (sardine)


Lesenswert?

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);


}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Werner L. schrieb:
> Leider schaffe ich noch nicht einmal die Intialisierung(rc=6).

Und, was sagt die Dokumentation, was der Rückgabewert 6 bedeutet?

von Jim M. (turboj)


Lesenswert?

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.

von Voila (Gast)


Lesenswert?

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

von Werner L. (sardine)


Lesenswert?

Hallo Jim,

vielen Dank für die Info. Aber wo und wie kann ich (als C-Laie) den Wert 
von _USE_DIR setzen?

Werner

von Falk B. (falk)


Lesenswert?

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
Noch kein Account? Hier anmelden.