Hola muxaxos, soy nuevo aki asi k espero me disculpen si cometo alguna sonsera con la imagenes y todo eso.
He seguido todo sobre este post, yo tambien estoy realizando un datalogger, y tambien he tenido las dificultades, hasta k al final me aparece tambien lo de la perdida del formato.
Probando y probando encontre k en la libreria Fat16_SDCard1.4 hay un segmento k lo que hace es grabar en el cluster 0, sector 0(si no me ekivoco), y ahi es donde se pierde el formato. Sucede cuando se escriben 512 veces cualquier numero de caracteres, con 511 no pasa nada.
Bueno al grano, lo que hize, (y me funciona bien, ya no tengo ese problema para nada), es borrar cierta parte de la libreria, especificamente la funcion FAT_WriteAddFile.
int1 FAT_WriteAddFile(int32 SecClusEnd,int32 SecClusNew,int16 NSecAddWrite,int16 AddDirWrite,
int32 SecFileDir,int16 AddDirSec,int32 Size,char *WriteString){
char BufferFAT[512], j;
int16 i;
if(AddDirWrite==0){ ////////////////////////////////////////////////////////////////////////borren esto
j=0;/////////////////////////////////////////////////////////////////////////////////////////borren esto
do{ ///////////////////////////////////////////////////////////////////////////////////////borren esto
i=0;///////////////////////////////////////////////////////////////////////////////////////borren esto
do{///////////////////////////////////////////////////////////////////////////////////////borren esto
BufferFAT[i++]=*WriteString++;/////////////////////////////////////////////////////borren esto
}while((i<512)&&(*WriteString!='\0'));/////////////////////////////////////////////////borren esto
if(i<512){/////////////////////////////////////////////////////////////////////////////////borren esto
do{BufferFAT[i++]=0x00;}while(i<512);/////////////////////////////////////////////borren esto
}//////////////////////////////////////////////////////////////////////////////////////////borren esto
// Grabamos en la memoria.-////////////////////////////////////////////////////////////borren esto si desean
if(SDCard_write_block(((int32)(SecClusNew+j)*512),BufferFAT)==0){///////////////borren esto
return(0);//////////////////////////////////////////////////////////////////////////////borren esto
}//////////////////////////////////////////////////////////////////////////////////////////borren esto
j++;///////////////////////////////////////////////////////////////////////////////////////borren esto
}while(*WriteString!='\0');/////////////////////////////////////////////////////////////////borren esto
}else{//////////////////////////////////////////////////////////////////////////////////////////borren esto
// leemos el último sector donde se encuntra el archivo para agregar datos.-
if(SDCard_read_block(((int32)(SecClusEnd+NSecAddWrite)*512),BufferFAT)==0){
return(0);
}
do{
i=AddDirWrite;
do{
BufferFAT[i++]=*WriteString++;
}while((i<512)&&(*WriteString!='\0'));
if(i<512){
do{BufferFAT[i++]=0x00;}while(i<512);
}
// Grabamos en la memoria.-
if(SDCard_write_block(((int32)(SecClusEnd+NSecAddWrite)*512),BufferFAT)==0){
return(0);
}
AddDirWrite=0; // Lo reseteamos para la proxima iteracion.-
NSecAddWrite++;
}while(NSecAddWrite<BPB_SecPerClus); // Mientras se complete el cluster.-
// Si es necesario escribimos en el siguiente Cluster.-
if(SecClusNew!=0){
j=0;
do{
i=0;
do{
BufferFAT[i++]=*WriteString++;
}while((i<512)&&(*WriteString!='\0'));
if(i<512){
do{BufferFAT[i++]=0x00;}while(i<512);
}
// Grabamos en la memoria.-
if(SDCard_write_block(((int32)(SecClusNew+j)*512),BufferFAT)==0){
return(0);
}
j++;
}while(*WriteString!='\0');
}
}////////////////////////////////////////////////////////////////////////////////////////////////Y no se olviden de borrar esto
// Cambiamos tamaño del archivo.-
if(SDCard_read_block(((int32)SecFileDir*512),BufferFAT)==0){
return(0);
}
BufferFAT[AddDirSec+28]=make8(Size,0);
BufferFAT[AddDirSec+29]=make8(Size,1);
BufferFAT[AddDirSec+30]=make8(Size,2);
BufferFAT[AddDirSec+31]=make8(Size,3);
if(SDCard_write_block(((int32)SecFileDir*512),BufferFAT)==0){
return(0);
}
return(1);
}
Lo que hago es borrar la parte del codigo responsable de mandarnos al diablo el formato, bueno espero les funcione cualquier cosa me avisan. Como repito esto hizo que me funcionara muy bien y pude grabar mas de 6000 lineas sin problemas y nada de aveces si a veces no, es definitivo. Saludos.
P.D.: Si he hecho alguna pavada me avisan, jeje.
Edit: Para visualizar el código....