Implementar el protocolo FAT32 en un microcontrolador (PIC,AVR,ARM,Z80, etc)

Otra cosa, no se si podré usar SPI porque la demo board ocupa las patillas SCK (PC6) y NSS (PC5) porque son dónde esta el cristal y no lo puedo inutilizar. PA2 y PA3 las tengo libres y puedo conectar MISO y MOSI o TX y RX de USART:

http://imageshack.us/photo/my-images/90/preguntaforo.png/



¿Influye usar el cristal a la vez que SCK y CS (PC5 - PC6)?

También tengo NSS, CSK, MOSI y MISO en PB4, PB5, PB6 y PB7 respectivamente, pero ahí tengo conectados algunos segmentos del LCD el cual uso en mi aplicación.

Por otro lado, después de llevar horas leyendo, no me queda claro como usar las bibliotecas de chan junto con el SPI o USART, ¿como he de empezar?, recuerdo que no tengo ningún ejemplo para mi MCU.

Gracias y perdón por la reiteración en mis preguntas, pero es que estoy algo perdido y no se dónde acudir
 
¿El CS lo pudo conectar directamente a masa si uso un solo dispositivo? me ahorraría esa patilla, y el SCK lo podría conectar a PB5 mientras no use el LCD.
 
Hola amigos...

si quieren trabajar FAT16/32 enserio les recomiendo usar las librerías de ELm-chan...

hace poco tiempo termine el reproductor WAV player AVR, me da excelente.. la señal de salida es perfecta, la probé con una canción a 44K, y el MCU es un ATmega644 a 16Mhz, la sd es una kingston de 2GB con FAT32.

Cualquier cosa puedo subir el código pero son las mismas librerías de ELM.
también las herramientas a usar para este proyecto.
 
Última edición:
Hola tras largo tiempo,

Escribía para comentar mis avances; con respecto al esquema con el cual hice la consulta hace tiempo, he liberado el cristal de las patillas PC6 y PC5 (vease mi post anterior), para disponer de las 4 líneas necesarias para SPI. Como mi MCU dispone de dos osciladores internos RC, he podido prescindir del cristal (para usar el RTC he decido usar el famoso DS1307 en lugar del interno).

Bueno, he conseguido comunicación SPI, implementando algunas funciones (inicializar SPI, enviar los comandos necearios para poner la tarjeta sd en modo SPI, escribir un bloque de bits en un sector concrelo de la tarjeta, leer, etc ...).

Bien, consigo escribir y leer en cualquier sector de la tarjeta, el problema que me surge ahora es que los sectores de una tarjeta SD son de 512 bytes, y mi MCU es de 8 bits, no puede enviar bloques de mas de 256 bytes (incluso si intento enviar 256 me da error de memoria), luego, siguiendo la guía de chan, según he entendido, tengo que usar l implementación petit fat para crear archivos de texto.

He hecho algunas pruebas, y me da el error de que no reconoce sistema de ficheros FAT. Esto creo que es porque el petit Fat no usa los sectores de la tarjeta completamente y, seguramente el código que he escrito para leer la SD, no llegue a leer la parte del sector 0 donde se encuentra la versión del FAT , aunque todavía es una suposición.

Lo que me gustaría consultar es que si, efectivamente, con mi MUC de 8 bits es imposible completar los sectores de la SD al enviar y recibir datos y cuales son las consecuencias.

También preguntar a la gente experimentada en estos temas si estoy siguiendo los pasos correctamente implementando el petitFat y si alguien lo ha conseguido echar a andar alguna vez.

Gracias por todo y perdón por el "tocho".

P.D: Por cierto, me gustaría recomendar el software "H:LOL:" para el que este trabajando con este tema, es un visor de hexadecimal que te permite visualizar por completo todos los sectores de la tarjeta; a mi me está siendo muy muy útil.
 
Última edición:
Hola de nuevo,

Ya tengo el Petitfat funcionando en el "stm8l discoveryboard", tengo un gran problema, no puedo crear ficheros, el petitfat está limitado solo a abrir archivos existentes y escribir en ellos. Para mi datalooger necesito crear un fichero cada día automáticamente.

No puedo utilizar el módulo fat completo puesto que me da error de memoria (trabajo con un MCU de 8bits y 2Kb de RAM). Por favor necesito consejo, ¿se puede hacer algo para poder crear ficheros sin necesidad de usar todo el módulo fats?

Por favor alguien que me pueda echar una mano, solamente me queda este último escollo y mi datalogeer estará terminado.

Muchas gracias por la ayuda
 
Buenas, alepusto no continuaste con el tutorial? yo me quede intrigado como seguía ésto. Una duda....el link de la implementacion fat completa no está "erro 404" http://elm-chan.org/fsw/ff/ff8b.zip....podrían subirlo así lo podamos descargar y tratar de implementar?

Planteo mis dudas con respecto a las sdcard, micro sdcard y MMC:

1-el protocolo para leer borrar y escribir por spi de las mmc y sdcard es lo mismo?
2-sin implementar ningún fat puedo solamente usar la sdcard como una memoria? osea escribir leer y borrar por spi bloques de 512? (adjunto mis rutinas probadas en proteus con una mmc por que no hay sd).
3-alquien podría subir un ejemplo más o menos detallado de una implementacion fat32 para usar *.txt?

muchas gracias y espero puedan ayudarme! saludos!
 

Adjuntos

  • SDATmega168.rar
    36.4 KB · Visitas: 18
Me contesto solo jeje, ya las hice andar!
1-inicializo bien la sdcard
2-configuro bloques de 512byte
3-grabo el bloque de 512
4-leo y muestro en un terminal todos los datos.

corregí las rutinas que subí y ahora están andando. Las subiré si es que alguien las pide por que creo que este hilo murió =( nadie comenta creo..

Saludos!!!
 
ando en eso :p nunca use la SD
y ahora ando tratando de grabar y leer por SPI y en CCS "para rapido :LOL:"
ya logre leer y escribir en ´proteus

pero me paso algo terrible !!

no se por que el modulo SPI del 18f4550 me genera pulsos cuadrados pero de 200mv

y no tengo idea de por que

he bajado codigos y en proteus funcionan pero en fisico ya no funciona

no se si puedas hecharme una mano que ando muy verde con las SD
 
Estas usando pullup?? creo que por ahí puede ser. Otra cosa la MMC de proteus no es tan tan igual que en la realidad. Yo ya la hice andar en una placa pero como contaba recién, inicializarla, configurar bloques de 512bytes, grabar bloques y leer bloques. También use un analizador lógico el cual me ayudo mucho a saber que me contestaba la sd y que hacia mal. Pero ya quedo re bien! :). lo que me faltaría es implementar fat32 pero no entiendo lo que comparten. hay poco comentarios con el código.

Subo aquí las rutinas andando con una micro sdcard de 2gb
 

Adjuntos

  • SDATmega168.rar
    40.7 KB · Visitas: 34
Última edición:
gracias si me quedo claro lo de los bloques de 512 y los comandos

alomejor no se usar bien el CCS pero en fin lo que uno hace por aprender

¿no cres que iniciar en FAT32 es mas enbrollo que el FAT16?

por lo que he visto hay mucha documentancion del FAT16 aunque no me queda claro como se declaran los directorios

aun ando muy verde con la SD
en el osciloscopio me sale el Data del micro con valores de los 200mV eso es muy frustrante
 
yo tengo duda si el proteus me dice que mi codigo funciona y en el proto no funciona
es error mio o de la simulacion de proteus

algo que no me queda claro
¿la SD tiene una frecuencia maxima y minima de trabajo?
es algo que no logro encontrar en el internecio
 
yo tengo duda si el proteus me dice que mi codigo funciona y en el proto no funciona
es error mio o de la simulacion de proteus

No te guies de la simulación, proba solo con el hardware y usá un puerto serial para hacer debug. Colocá mensajes en partes estratégicas del programa para ver donde está el fallo.

Saludos !

¿la SD tiene una frecuencia maxima y minima de trabajo?

Si, generalmente funcionan todas a la mínima frecuencia...por lo menos con las pruebas que he realizado en mi caso. La frecuencia de trabajo del SPI tiene que rondar los 125Khz. Esto es válido tanto en CCS, como para AVR o ARM.
 
Última edición:
Atrás
Arriba