Arduino Forum

International => Italiano => Software => Topic started by: BigByte on Aug 23, 2013, 10:23 pm

Title: SD error code
Post by: BigByte on Aug 23, 2013, 10:23 pm
Ciao a tutti,
cortesemente se mi potete aiutare su un problema nella scrittura di un file su SD, in pratica dopo un certo numero di scrittura il file viene corrotto, o in alcuni casi ricevo un messaggio di errore  "error code: 0x6", non c'è una costante nell'errore, a volte capita dopo pochi minuti, a volte dopo diverse ore. Ho provato anche a cambiare la modalità SPI sostituire la SD sia di formato che di produttore.

questo è il codice
Code: [Select]


#include <OneWire.h>
#include <DallasTemperature.h>
#include <SdFat.h>

#define ONE_WIRE_BUS 2

// SD chip select pin
const uint8_t chipSelect = 10;

SdFat sd;

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;

unsigned long timeWait;
int numInterval;
char ID[] = "12345";


void setup(void)

  Serial.begin(19200); 
 
  sensors.begin();
  if (!sensors.getAddress(insideThermometer, 0))
     Serial.println("Unable to find address for Device 0");
       
  Serial.print("Init SD card..."); 
 
  if (!sd.begin(chipSelect,SPI_HALF_SPEED)) { //oppure SPI_SIXTEENTH_SPEED
    sd.initErrorHalt();
    Serial.print("error \n");
   
  } else { 
Serial.print("ok \n");
  }
 
  numInterval = 4;
  timeWait = 120;
 
}

void GetDataLog()
{          
        byte nlog = 1;       

do {
  delay(timeWait*1000); 
   
  ofstream sdlog("datalog.txt", ios::out | ios::app);    

  sdlog << ID << "|" <<  getTemp() << endl;                 

  if (!sdlog)
    sd.errorHalt("append failed");
             
          Serial.print(ID);Serial.println(getTemp());         
} while(nlog++ < numInterval);
}

float getTemp()

         sensors.requestTemperatures();

         return sensors.getTempC(insideThermometer);         
}


void loop(void)
{     
  GetDataLog(); 
   
/*GPRS
invio log...
*/   
}



la schield SD è posta sopra a quella del GPRS

grazie
Title: Re: SD error code
Post by: m_ri on Aug 23, 2013, 11:30 pm
dopo l'errore hai provato a mettere la schedina nel pc?
durante la scrittura di dati non salta mai l'alimentazione?
Title: Re: SD error code
Post by: nid69ita on Aug 23, 2013, 11:43 pm
Non sono sicuro, ma in qualche altro post avevo letto che non è sicuro tenere il file aperto in scrittura senza mai chiuderlo.
Mi sembra che nel tuo codice non chiudi mai il file.
Title: Re: SD error code
Post by: BigByte on Aug 23, 2013, 11:55 pm
Quando metto la scheda nel pc, il file è illegibile, l'unico modo è riformattare la sd. Ho fatto le prove con un alimentare, e non ho mai visto sbalzi ma il risultato è lo stesso.

Title: Re: SD error code
Post by: BigByte on Aug 24, 2013, 12:05 am

Non sono sicuro, ma in qualche altro post avevo letto che non è sicuro tenere il file aperto in scrittura senza mai chiuderlo.
Mi sembra che nel tuo codice non chiudi mai il file.


ok, ho aggiunto al codice

         
          sdlog.close();


faccio qualche prova e vediamo come va
Title: Re: SD error code
Post by: leo72 on Aug 24, 2013, 07:04 am
Chiuderlo è sempre meglio, così svuoti anche il buffer.
Oppure puoi fare un flush() sempre per svuotare il buffer e costringere la scrittura sulla scheda dei dati in memoria (quando fai il close() viene prima fatto un flush()).
Title: Re: SD error code
Post by: BigByte on Aug 25, 2013, 12:47 pm
Ho fatto delle prove e ho visto che chiudendo lo stream del file aiuta, nonostante questo il problema si è ripresentato, ho notato che succede quando ho più attività da parte della shield GPRS (problemi di linea o scarsa, ripetuti tentativi di connessione)

Chiedo scusa a m_ri per non aver testato meglio i picchi di alimentazione.
Quote

durante la scrittura di dati non salta mai l'alimentazione?


Title: Re: SD error code
Post by: leo72 on Aug 25, 2013, 03:52 pm
Controlla anche la RAM libera.
Title: [RISOLTO] SD error code
Post by: BigByte on Aug 26, 2013, 10:34 am
Ho provato una shield sd che ha un traslatore di livello, e il problema non si è più presentato. Per info la shield monta un 74HC125

Grazie a tutti.

Ciao
Title: Re: SD error code
Post by: nid69ita on Aug 26, 2013, 10:37 am
Per inquadrare meglio, che shield SD usi? Può servire per altri utenti che magari possono risolvere con il tuo aiuto
Title: Re: SD error code
Post by: BigByte on Aug 26, 2013, 02:00 pm
la shield SD che ho usato adesso è questa

http://www.ladyada.net/make/logshield/

ho rimosso RTC perché non mi serviva