Autor Tema: Implementando fat32 con un PIC18F4550  (Leído 1710 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Implementando fat32 con un PIC18F4550
« en: 15 de Junio de 2020, 13:00:20 »
Aunque hay varias librerías para el manejo de ficheros con los microcontroladores, en el confinamiento he tenido mucho tiempo libre y  he aprovechado para estudiar  varias cosas, entre ellas, el sistema de archivos FAT, aunque ya algo obsoleto, para lo que vamos a hacer con los pic creo que es mas que suficiente.

 Poder manejar una tarjeta de 32 Gb y tener todo ese almacenamiento no parece ser poca cosa.

  Por ello, me propuse y me lancé a crear una librería que fuese capaz de inicializar una tarjeta de memoria vía SPI formateada con un sistema de archivos FAT, que puede ser 12/16 o 32 y después de darle varios pulidos os la presento y comparto por si a alguien le es útil. A mi si, bastante. La he llamado Remi_fat.    (Y si, admito que estoy un poco gordo  :D)
 

   Quería que se pudiesen manejar archivos y carpetas con nombre de tipo estándar de MsDOS, " 8 caracteres de nombre + 3 de extensión" pero también que se pudiesen manejar los que tienen nombres largos. Sistema LFN (Long File Name) y así lo he hecho.

 De modo que esta librería puede crear carpetas y archivos con o sin extensión. con nombres cortos de tipo MsDOS o largos (el máximo que admite FAT), con mayúsculas o minúsculas, etc.

 He escrito funciones que permiten acceder a distintas carpetas , volver al directorio raíz, ir una carpeta atrás.

 Se puede abrir un archivo para leer y/o escribir contenido dentro del mismo.
 Se puede eliminar un archivo.

 He habilitado macros para permitir que se pueda optar por no compilar fat32 y/o LFN. permitiendo ahorrar espacio en ram y flash. Por ejemplo, si en un proyecto se usa una tarjeta de memoria de 1 Gb, con fat16 es suficiente. Si los archivos y carpetas tienen todos nombres estándar, se puede evitar usar LFN y así se ahorra aun más.


    La librería ya incluye además otras sub-librerías para habilitar y dejar configurado el módulo SPI para comunicar el pic con la tarjeta de memoria.
    El modulo SPI utiliza al principio el timer2 para obtener 500 Khz de velocidad en el puerto y negociar con la tarjeta. Una vez inicializada la tarjeta
  ya el módulo SPI queda conectado al oscilador principal y el timer 2 queda libre.
   
   También se incluye otra sub-librería que habilita y configura el módulo uart del PIC por si se quiere enviar a una terminal datos por rs232.
   
  Mediante unas macros, se habilitan los pines que se usarán para las señales CS, si se desea utilizar el sensor switch del zócalo de la tarjeta, si ese switch es pull_up o push_pull, etc.
   
  En el interior del fichero rar incluyo un fichero txt con mas detalles de todo esto.

   Por otro lado, decir, que he dejado plasmado por escrito todo lo que he aprendido y entendido acerca del sistema de archivos fat así como acerca de los protocolos de las tarjetas SD.  Todo está comentado en el código a modo de tutorial (Entiendo que ello pueda provocar dificultad en la lectura del código fuente).  Todo lo que ahí expongo es lo que YO a nivel personal he entendido después de leer decenas de documentos en internet, lo cual no tiene por que ser cierto todo. Lo mas normal es que contenga errores de conceptos u otros.

  Digamos que sobre el código voy explicando las cosas a la misma vez que las implemento.

  Así que nada, si a alguien le sirve, ahí lo tiene, y si alguien quiere mejorar cosas, pues se agradece.  Se puede trabajar para reducir el espacio en flash que ocupa y algo mas de ram. Ya lo he reducido bastante, aun así admito que ocupa un huevo...  Las cosas como son. Aunque el ejemplo esté basado en un 18f4550, en verdad lo suyo es utilizar algo de mayor capacidad.  Yo hace tiempo que lo mas pequeño que uso son 18f46k20 que es lo mas parecido al 18f4550.

  El código de ejemplo, si se compila y se monta el circuito, debería generar tres carpetas, algunas dentro de otras. Generar varios archivos y colocar contenido de texto dentro de algunos de ellos.

   Luego se saca la tarjeta, se mete en el ordenador y si todo está bien, desde windows ahí debería estar todo.

  Un saludo.
 
 
* Remi_fat.zip
(89 kB - descargado 171 veces)










Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re:Implementando fat32 con un PIC18F4550
« Respuesta #1 en: 16 de Junio de 2020, 14:19:19 »
Hola amigo, muy buen trabajo aunque no me compila, podrias subir todo el proyecto en mplabx y tambien la simulacion en proteus porfavor me interesa analizar tu codigo para aprender un poco mas, muchas gracias.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Implementando fat32 con un PIC18F4550
« Respuesta #2 en: 16 de Junio de 2020, 19:24:24 »
Hola amigo, muy buen trabajo aunque no me compila, podrias subir todo el proyecto en mplabx y tambien la simulacion en proteus porfavor me interesa analizar tu codigo para aprender un poco mas, muchas gracias.

  Hola. Te adjunto toda la carpeta del proyecto MPLAB.

 En dist tienes incluso un hex compilado.

   Respecto a la simulación no las utilizo.  No soy muy amigo de los simuladores. Mi mejor simulador es la placa de desarrollo  :)

  Un saludo.

Te lo subo a dropbox, que pesa 4 y pico Mb.

https://www.dropbox.com/s/mkkb3fmhpmgwc1u/file_system.X.zip?dl=0
 Un saludo



Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re:Implementando fat32 con un PIC18F4550
« Respuesta #3 en: 17 de Junio de 2020, 10:58:38 »
Ya logre compilarlo, el problema era que estaba usando el xc8 1.45 y tu lo has compilado con el 2.10, ademas me di cuenta que con el 2.20 el ahorro de memoria es considerable osea lo compila mejor, tambien hay muchos warning que podrian causar problemas futuros, tratare de corregirlos para que la compilacion sea limpia, por el momento eso es todo si consigo mejorarlo lo publicare aqui mismo, ahora me toca estudiar el codigo que hiciste, muchas gracias.

Se me olvidaba, tu codigo solo compila con c99 no con c90.

Desconectado osmelfb5

  • PIC10
  • *
  • Mensajes: 10
Re:Implementando fat32 con un PIC18F4550
« Respuesta #4 en: 12 de Agosto de 2021, 00:10:24 »
Buenas noches amigo muchas gracias por compartir ta importante información me gustaria saber si para este proyecto se puede utilizar algun pic16f628a o el pic 16f887.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Implementando fat32 con un PIC18F4550
« Respuesta #5 en: 12 de Agosto de 2021, 03:48:49 »
Buenas noches amigo muchas gracias por compartir ta importante información me gustaria saber si para este proyecto se puede utilizar algun pic16f628a o el pic 16f887.

 Hola.

  En principio no.  El 628 es un micro de solo 2 KWord que no creo que te diese ni para implementar el protocolo de la tarjeta sd.

  No tiene SPI que también es necesario aunque se podría hacer por software.

   Si consigues algo sería muy muy limitado.

  El 887 ya si que puede hacer más, claro que luego te quedaría poquísimo o nulo espacio para el resto del programa que quieras correr aparte de la fat.

Desconectado osmelfb5

  • PIC10
  • *
  • Mensajes: 10
Re:Implementando fat32 con un PIC18F4550
« Respuesta #6 en: 12 de Agosto de 2021, 14:45:11 »
muchas gracias amigo por ayudar disculpa que te pregunte tanto por el tipo de pic `para este proyecto es que me resulta muy dificil conseguir esos micros logre conseguirme un pic 18f2420 este me servira para el proyecto?

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Implementando fat32 con un PIC18F4550
« Respuesta #7 en: 12 de Agosto de 2021, 15:01:19 »
muchas gracias amigo por ayudar disculpa que te pregunte tanto por el tipo de pic `para este proyecto es que me resulta muy dificil conseguir esos micros logre conseguirme un pic 18f2420 este me servira para el proyecto?

  En principio si. Si puedes pillarte el 2520 mejor, son 32K, el doble.

  Pero el 24 ya si te vale para compilar, cargar y probar.  Revisa toda la parte del oscilador sobre todo.  Ponla a 40 Mhz.

Desconectado osmelfb5

  • PIC10
  • *
  • Mensajes: 10
Re:Implementando fat32 con un PIC18F4550
« Respuesta #8 en: 14 de Agosto de 2021, 01:38:17 »
Ok Amigo de todas maneras me a servido de mucho su ayuda, realmente no soy un experto en el tema de la programación con pic es que resulta algo dificil implamentar el codigo 100*100% puede que tenga que apollarme de su ayuda, en el futuro.


 

anything