uControl
Octubre 21, 2014, 04:52:57 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  

La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: 1 ... 14 15 16 17 18 [19] 20 21 22 23 24 ... 41   Ir Abajo
  Imprimir  
Autor Tema: Manejo de Memoria SD con CCS-Librería nivel Hardware + FAT16.-  (Leído 145155 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5439


Con Qt...


WWW
« Respuesta #270 : Agosto 22, 2010, 01:51:24 »

Como dice al comienzo de la librería, está basada en las especificaciones de las SD SanDisk. Yo utilizo el microcontrolador a 40MHz y el SCK del SPI a 10MHz.


Saludos!
En línea

Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 602



« Respuesta #271 : Agosto 22, 2010, 02:14:49 »

Las memorias SD siguen un standar para funcionar...tendrías que probar si la memoria responde bien a los comandos CMD en la librería a nivel hardware que te dejó suky....y luego ver como implementar la FAT.
En línea
abdel666
PIC10F
*
Desconectado Desconectado

Mensajes: 6


« Respuesta #272 : Agosto 23, 2010, 12:13:17 »

Las memorias SD siguen un standar para funcionar...tendrías que probar si la memoria responde bien a los comandos CMD en la librería a nivel hardware que te dejó suky....y luego ver como implementar la FAT.

gracias por contestar
la verdad tengo dudas por que mi memoria no tiene ningun tipo de marca, solo dice microSD sd-c026 no se que tipo de memoria es, venia en un cel que compre, es de 2gb y yo le di formato utilizando windows xp en FAT creo que es equivalente a FAT16, sinembrago he leido que las memorias de esta capacidad vienen solo en FAT32, quisiera saber si tengo que utilizar algun tipo de programa para formatearla o esta bien asi como esta; ademas no logro recivir respuesta de mi sd siempre se queda en la parte que dice "Se envia CMD0", otra duda que tengo es que en las librerias de suky aparecen la direccion del directorio raiz como 0 "cero", es esta la direccion del directorio raiz o si es otra como hago para saber cual es???
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5439


Con Qt...


WWW
« Respuesta #273 : Agosto 23, 2010, 12:18:04 »

Las memorias SD siguen un standar para funcionar...tendrías que probar si la memoria responde bien a los comandos CMD en la librería a nivel hardware que te dejó suky....y luego ver como implementar la FAT.

gracias por contestar
la verdad tengo dudas por que mi memoria no tiene ningun tipo de marca, solo dice microSD sd-c026 no se que tipo de memoria es, venia en un cel que compre, es de 2gb y yo le di formato utilizando windows xp en FAT creo que es equivalente a FAT16, sinembrago he leido que las memorias de esta capacidad vienen solo en FAT32, quisiera saber si tengo que utilizar algun tipo de programa para formatearla o esta bien asi como esta; ademas no logro recivir respuesta de mi sd siempre se queda en la parte que dice "Se envia CMD0", otra duda que tengo es que en las librerias de suky aparecen la direccion del directorio raiz como 0 "cero", es esta la direccion del directorio raiz o si es otra como hago para saber cual es???


Lo de directorio raíz es una identificación, nada que ver con la dirección. Esa es determinada al inicializar FAT

Saludos!
En línea

e-Bang
PIC10F
*
Desconectado Desconectado

Mensajes: 1


« Respuesta #274 : Agosto 23, 2010, 12:51:29 »

Hola Suky!

En primer lugar, muchas gracias por todo. Un gran trabajo por tu parte, que además me ha facilitado muchísimo las cosas en mi proyecto. Estoy almacenando, en una MMC (via SPI, con tus librerías), datos procedentes de un acelerómetro (vía SPI por software, que he definido en unas patillas diferentes). Tras inicializar la tarjeta y crear un archivo (lo cual me funciona perfectamente), creo un bucle en el que leo del acelerómetro y utilizo tu función "OpenAddFile" para añadir esos datos leídos a la tarjeta. No obstante, tengo dos problemillas, que te pregunto por si acaso te ha sucedido algo similar, o sabes a qué podría deberse.

1) No puedo escribir en la tarjeta a una velocidad nada razonable. El acelerómetro crea datos a razón de 40Hz (que ya ves tú, no es nada!), pero en la tarjeta no puedo escribir mas de 6 o 7 muestras por segundo. Tengo un cristal de 20MHz, y tras inicializar paso a Fosc/4 (5MHz), como muestro a continuación, por lo que ese no debería ser el problema.

        ...
   SDCard_init();                  // Initialize SPI for MMC (Multi Media Card)
   FAT_init();                     // Initialize FAT16 Files System
   CloseSPI();                     // Turn Up SPI Speed (From 312.5 KHz To 5 MHz)
   OpenSPI(SPI_FOSC_4, MODE_11, SMPMID);
        ...


2) A pesar de eso, va escribiendo bien. Pero hasta llegar a una determinada cantidad de información. Cuando llevo escritos en la tarjeta al rededor de 20KB, empieza a sobreescribir en lo escrito anteriormente.

Los datos que leo del acelerómetro (y, por tanto, los que escribo) son de 32 Bytes (31 + '\0'). El buffer para escribir en la tarjeta en tu código es de 512, pero tampoco debería importar, no? pues hay una condición que dice que se deje de enviar cuando se alcance un carácter '\0'.

Si tienes alguna idea de por qué puede suceder esto, te ruego me ayudes.

Un saludo!
En línea
abdel666
PIC10F
*
Desconectado Desconectado

Mensajes: 6


« Respuesta #275 : Agosto 23, 2010, 06:20:08 »

Las memorias SD siguen un standar para funcionar...tendrías que probar si la memoria responde bien a los comandos CMD en la librería a nivel hardware que te dejó suky....y luego ver como implementar la FAT.

gracias por contestar
la verdad tengo dudas por que mi memoria no tiene ningun tipo de marca, solo dice microSD sd-c026 no se que tipo de memoria es, venia en un cel que compre, es de 2gb y yo le di formato utilizando windows xp en FAT creo que es equivalente a FAT16, sinembrago he leido que las memorias de esta capacidad vienen solo en FAT32, quisiera saber si tengo que utilizar algun tipo de programa para formatearla o esta bien asi como esta; ademas no logro recivir respuesta de mi sd siempre se queda en la parte que dice "Se envia CMD0", otra duda que tengo es que en las librerias de suky aparecen la direccion del directorio raiz como 0 "cero", es esta la direccion del directorio raiz o si es otra como hago para saber cual es???


Lo de directorio raíz es una identificación, nada que ver con la dirección. Esa es determinada al inicializar FAT

Saludos!
hola de nuevo
buenas noticias luego de algunos cambios en la configuracion del SPI logre inicializar correctamente la sd ahora el problema que surge es a la hora de crear el archivo y la carpeta; no logro crearlas, tengo algunas dudas acerca de la libreria FAT16 ya que estoy utilizando el compilador c30 de mplab, si existe algun tipo de modificacion para estas librerias por favor muestremenlas. o deberia buscar una librerioa especifica para este compilador???
En línea
abdel666
PIC10F
*
Desconectado Desconectado

Mensajes: 6


« Respuesta #276 : Agosto 23, 2010, 06:59:24 »

Las memorias SD siguen un standar para funcionar...tendrías que probar si la memoria responde bien a los comandos CMD en la librería a nivel hardware que te dejó suky....y luego ver como implementar la FAT.

gracias por contestar
la verdad tengo dudas por que mi memoria no tiene ningun tipo de marca, solo dice microSD sd-c026 no se que tipo de memoria es, venia en un cel que compre, es de 2gb y yo le di formato utilizando windows xp en FAT creo que es equivalente a FAT16, sinembrago he leido que las memorias de esta capacidad vienen solo en FAT32, quisiera saber si tengo que utilizar algun tipo de programa para formatearla o esta bien asi como esta; ademas no logro recivir respuesta de mi sd siempre se queda en la parte que dice "Se envia CMD0", otra duda que tengo es que en las librerias de suky aparecen la direccion del directorio raiz como 0 "cero", es esta la direccion del directorio raiz o si es otra como hago para saber cual es???


Lo de directorio raíz es una identificación, nada que ver con la dirección. Esa es determinada al inicializar FAT

Saludos!
luego de lograr iniciar la sd correctamente tengo problemas en la parte de crear los archivos y la carpeta; en la funcion FAT_init me corre sin errores pero tengo problemas en la funcion:
FAT_CreateFile

BOOL FAT_CreateFile(UINT8 *NameLong,UINT8 *NameShort,UINT16 NClusP,UINT8 *WriteString){

UINT8 NSecFree;
UINT16 NClus, AddDir,ClusEnt;
 
   
   if(FAT_FindFreeEnt(NClusP,&ClusEnt,&NSecFree,&AddDir)==0){    // Dentro del Directorio a crear archivo se busca..
      return(0);                                      // ..Sector y direccion adicional para crear entrada.-
   }

   printf("hola");
   NClus=FAT_FindClusFree();
   if(NClus==0){return(0);}                           // Buscamos Nº Cluster libre para crear archivo.-
 
   // Creación entradas en la FATs
   if(FAT_CreateEntFAT(NClus,0xFFFF)==0){
      return(0);
   }
   
   if(FAT_DefineFile(NameLong, NameShort, ClusEnt, NClus, NSecFree, AddDir,WriteString)==0){
      return(0);
   }
   
   return(1);
}

esta funcion me da error podrias revisarla para ver si todo esta bien???
ademas esta tambien me da error al ejecutarla
UINT16 FAT_CreateDirectory(UINT8 *NameLong,UINT8 *NameShort,UINT16 NClusP){

UINT8 NSecFree;
UINT16 NClus, AddDir,ClusEnt;

   
   if(FAT_FindFreeEnt(NClusP,&ClusEnt,&NSecFree,&AddDir)==0){    // Dentro del Directorio a crear archivo se busca..
      return(0);                                      // ..Sector y direccion adicional para crear entrada.-
   }
   
   NClus=FAT_FindClusFree();
   if(NClus==0){return(0);}                           // Buscamos Nº Cluster libre para crear directorio.-
   
   // Creación entradas en la FATs
   if(FAT_CreateEntFAT(NClus,0xFFFF)==0){
      return(0);
   }
   
   if(FAT_DefineDirectory(NameLong, NameShort, ClusEnt, NClus, NSecFree, AddDir)==0){
      return(0);
   }
   
   return(NClus);
}  si es posible revisar estas funciones para ver que anda mal....
gracias
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5439


Con Qt...


WWW
« Respuesta #277 : Agosto 23, 2010, 07:36:09 »

Tu puedes tratar de resolver el problema. La librería está bastante comentada, y por aquí tienes información:

http://staff.washington.edu/dittrich/misc/fatgen103.pdf

http://www.ucontrol.com.ar/wiki/index.php?title=FAT_al_desnudo

Microchip tiene también librería para FAT, ocupa mucho más recursos y si falla es más complicada de entender. También hay otras dando vuelta, es solo cuestión de buscar. Pero claro está, que quién necesita implementar algo por el estilo, necesita conocimiento y tiempo para trabajar en ello.

Saludos!

En línea

Duncan
PIC10F
*
Desconectado Desconectado

Mensajes: 1


« Respuesta #278 : Septiembre 02, 2010, 04:13:44 »

Hola a todos!
 Lo que he aprendido leyendo este hilo del foro! Llevo tiempo rompiendome la cabeza con una SD. Ya la inicializo, encuentro la FAT ( no en la direccion 0) y cuando voy a crear un fichero la cosa se tuerce.

 Una pregunta sencilla: Esta librería solo funciona con una SD con tamaño de cluster 512 bytes?

Soy incapaz de formatear la tarjeta de 512 MB con sectores de menos de 65535 bytes, no me deja windows. Sospecho que este es mi problema.

 Un millon de gracias a los que compartis toda esta informacion.
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5439


Con Qt...


WWW
« Respuesta #279 : Septiembre 02, 2010, 04:31:09 »

Una pregunta sencilla: Esta librería solo funciona con una SD con tamaño de cluster 512 bytes?

Nop.


Saludos!
En línea

Slaxtrack
PIC10F
*
Desconectado Desconectado

Mensajes: 3


« Respuesta #280 : Septiembre 08, 2010, 05:01:10 »


Hola amigos  pues estoy teniendo problemas al tratar de manejar una memoria  Micro SD y un Pic 18F2550 , estoy llevando a la practica la libreria que tiene publicada el colega Skuy , la cosa esta q si tengo comunicacion con la memoria , pero el problema es a la hora de mandar llamar al Fat_init(); que no levanta nada ,,,  no se si sea problema de Ram o de la funcion SDCard_read_block(0,BufferFAT) donde se obtiene el block de memoria  tengo el Debuger RS 232 y me sale esto

Código:
Iniciando SD Card                                                                                                                                                                                                                                   
++++++  CId  **********************                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                   
--> Se envia CMD10 (Lectura de CID)                                                                                                                                                                                                                 
   >> Toquen recibido: 0xFE                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                   
Manufacturer ID: 02                                                                                                                                                                                                                                 
OEM/Application ID: TM                                                                                                                                                                                                                             
Product Name: SD128                                                                                                                                                                                                                                 
Product Revision: 22                                                                                                                                                                                                                               
Serial Number: 610EB591                                                                                                                                                                                                                             
Manufacturer Date Code: 0075                                                                                                                                                                                                                       
CRC-7 Checksum: 8B                                                                                                                                                                                                           

CRC-7 Checksum: 8B                                                                                                                                                                                                                                 
++++++  ++  **********************                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                   
--> Se inicia sincronizacion                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                   
--> Se envia CMD0 (Se desactiva SD Card)                                                                                                                                                                                                           
                                                                                                                                                                                                                                                   
--> Se envia CMD1 (Se activa SD Card)                                                                                                                                                                                                               
                                                                                                                                                                                                                                                   
--> Se envia CMD16 (Se fija largo del Bloque para escritura/lectura : 512)                                                                                                                                                                         
Se ha iniciado correctamente la memoria!!!                                                                                                                                                                                                         
                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                   
--> Se envia CMD17 (Lectura de bloque)                                                                                                                                                                                                             
   >> Toquen recibido: 0xFE                                                                                                                                                                                                                         
   >> Terminada la lectura                                                                                                                                                                                                                         
FAT_init:                                                                                                                                                                                                                                           
-->Bytes por sector:0                                                                                                                                                                                                                               
-->Sectores por cluster:0                                                                                                                                                                                                                           
-->Numero de sectores reservados:0                                                                                                                                                                                                                 
-->Numero de copias FATs:0                                                                                                                                                                                                                         
-->Numero de entradas directorio raiz:0                                                                                                                                                                                                             
-->Numero de sectores ocupados por un FAT:0                                                                                                                                                                                                         
-->Primer sector de FAT1:0                                                                                                                                                                                                                         
-->Primer sector de FAT2:0                                                                                                                                                                                                                         
-->Primer sector del directorio raiz:0                                                                                                                                                                                                             
-->Numero de sectores utilizados por directorio raiz:0                                                                                                                                                                                             
-->Numero de bytes por cluster:0                                                                                                                                                                                                                   
Creando Archivo:                                                                                                                                                                                                                                   
Error al crear archivo                                                                                                                                                                                                                             
Creando Carpeta:                                                                                                                                                                                                                                   
Error                                                                                                                                                                                                                                               

                       

Este es mi main

Código:
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
//#USE RS232(BAUD=19200, XMIT=PIN_A4, RCV=PIN_A5, stream=RF)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8)






#include <SDCard_hard.c>
#include <FAT16_SDCard.c>

char Texto[600]="La Tierra es el tercer planeta del Sistema Solar (contando en orden de distancia de los ocho planetas al Sol), y el cuarto de ellos de menor a mayor. Está situada a unos 150 millones de kilómetros del Sol. Es el único planeta en el que hasta ahora se conoce la existencia de vida. La Tierra se formó al mismo tiempo que el Sol y el resto del Sistema Solar, hace unos 4570 millones de años. El volumen de la Tierra es más de un millón de veces menor que el Sol y la masa de la Tierra es nueve veces mayor que la de su satélite.";






void main(){
INT RUNNER=0;
char NombreArchivo[13]="NOMBRE~1.txt";
char NombreLargo[16]="NombreLargo.txt";
char NombreDirectorio[13]="CARPETA";



   delay_ms(1000);

   printf("Iniciando SD Card\r\n");
   printf("++++++  CId  **********************\r\n");
   SDCard_read_CID();
   printf("++++++  ++  **********************\r\n");   
   if(SDCard_init()==0){
      printf("Error\r\n");
   }else{
      printf("Se ha iniciado correctamente la memoria!!!\r\n\r\n");
      FAT_init();
     
      printf("Creando Archivo:\r\n");
      if(FAT_CreateFile(NombreLargo,NombreArchivo,DirectorioRaiz,Texto)==0){
         printf("Error al crear archivo\r\n");
      }
      printf("Creando Carpeta:\r\n");
      if(FAT_CreateDirectory(NombreDirectorio,NombreDirectorio,DirectorioRaiz)==0){
         printf("Error\r\n");
      }
 
   }
   while(1){}
   
}

Estoy algo confundido espero puedan darme un norte para saber o localizar la falla mi Micro SD es de 128 MB y soy muy novato en esto de le FAT


Un  saludo y un abrazo para toda la comunidad   Tongue
En línea
MatiasNqn
PIC12F
**
Desconectado Desconectado

Sexo: Masculino
Mensajes: 179



« Respuesta #281 : Septiembre 08, 2010, 08:28:03 »

Creo que tenes el mismo problema con el que yo me encontré. La función fat_init() asume que el primer sector de la FAT está en un lugar fijo en el disco. Lo cual, para muchos casos no es así. Revisá los ejemplos que posteé acá mismo, que los puse inclusive con simulación de Proteus incluída.
En línea
Slaxtrack
PIC10F
*
Desconectado Desconectado

Mensajes: 3


« Respuesta #282 : Septiembre 08, 2010, 03:53:06 »

Creo que tenes el mismo problema con el que yo me encontré. La función fat_init() asume que el primer sector de la FAT está en un lugar fijo en el disco. Lo cual, para muchos casos no es así. Revisá los ejemplos que posteé acá mismo, que los puse inclusive con simulación de Proteus incluída.


Gracias y si  , la solucion estuvo en fat_init y la forma de sacar los datos revise el codigo y me di un norte con tus ejemplos. Grin la aplicacion esta corriendo con el 2550 y 4550 FULL.


Gracias Matias  Wink
En línea
BrunoF
Moderador
PIC16F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 721



« Respuesta #283 : Septiembre 10, 2010, 10:28:26 »

Suky, disculpá que reincida en la pregunta. Pero vos usaste una memoria de marca SanDisk para las pruebas?

Te comento porque tengo problemas con las SanDisk. Las Kingston funcionan perfecto. Las SanDisk supuestamente inicializan bárbaro también, pero cuando el pido el primer clúster, no responde(recibo todos 0xFF).

Saludos!
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5439


Con Qt...


WWW
« Respuesta #284 : Septiembre 11, 2010, 12:24:32 »

Exactamente, con una SanDisk (Yo colocaba Scandisk  Idiota) de 512MB.  Tongue
En línea


La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: 1 ... 14 15 16 17 18 [19] 20 21 22 23 24 ... 41   Ir Arriba
  Imprimir  
 
Ir a:  


La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.20 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.262 segundos con 29 consultas. (Pretty URLs adds 0.013s, 3q)