Hice el intento de montar el FATFS de chan en un PIC18F4550.
El problema con este microcontrolador en específico es que no tiene más que un puerto UART y un Puerto SPI y para completar tienen pines compartidos.
Siendo que me estaba comunicando con la tarjeta decidí dejar el SPI de hardware para la SD e implementar un UART por software.
El requerimiento de trabajo con SPI requiere que tengas una velocidad para la inicialización de la tarjeta y después una mucho mayor para la transferencia de datos. El SPI por hardware hace esto pero no así el de software, de hecho en ninguna documentación de microchip se encuentra el manejo de la velocidad para el SPI por software, incluso al revisar las librerias .h del SPI por hardware encontre los delays con los que trabaja pero no tienen documentación como para saber como modificarlos. En fin, el SPI por software esta mal documentado, no que no funcione, solo que no tienes mucho control sobre el.
Monté entonces el UART por software, funciona bien en sentido de temporización y de que lo que envias lo recibes, sin embargo es la librería más mal hecha que existe!
Para imprimir tienes que crear una variable de memoria
char cadena [] = "Hola Mundo";
printSoftware(cadena);
no puedes simplemente hacer:
printSoftware("Hola mundo");
No lo compila!!!!
si no puedes hacer esto último entonces no puedes usar comandos para imprimir enteros, caracteres, cadenas etc. ex print("hola %l %c", numerolong,caracter)
por lo que te toca hacer tus propias rutinas para hacerlo.
En fin, las hice!!!!! pero el consumo de memoria es altisisimo, si ya tenías problemas con la memoria del chip esto lo hace mucho peor aun si implementas esas variables en memoria de programa
rom char cadena [] = "Hola mundo";
todavía así es demasiado el uso de la memoria de programa.
Sin embargo solo por que ya había trabajado mucho en eso y quería ver el FAT32 de chan funcionando lo monté. La verdad solo monte las rutinas de inicialización de la SD (me funciono con todo tipo de tarjetas, yo uso tarjetas micro SD y lo use con tarjetas desde 128 MB hasta 8GB), solo tuve que hacer modificaciones de temporización para hacerlas correr.
Finalmente monte el fat32, lo inicialice, después revise el número de sectores, tamaño de sector, etc. Y funcionó...............
Pero eso fue todo, para ese punto ocupe toda la memoria de programa y toda la ram, fue triste solo llegar hasta eso, jejeje.
Ya lo monte en el PIC24F como está en el ejemplo y funciona de maravillas, tengo que aprender a usar todas las rutinas pero a este momento ya puedo hacer el listado de todos los archivos de mi tarjeta micro de 8GB.
Solo me falta leerlos pero estoy en esas y no creo que tome mucho tiempo.
Solo estoy usando la mitad de la memoria de programa del Chip y un 60% de la ram!!!
Mi conclusión después de esta odisea es que ya es hora de empezar a trabajar con PIC24s PICds y PIC30, tienen muchisima más memoria, son más baratos, los encuentras en presentación DIP y puedes remapear los puertos por lo que el impreso es más facil de hacer.
El único problema que me he encontrado es una documentación algo deficiente.
Espero esta información sea útil!!!
Por cierto, el 30 de septiembre microchip lanzó su versión del FAT32, antes solo tenían soporte de FAT16. eso puede ser una opción viable para muchos, por mi parte me parece que el FAT32 de chan lleva mucho tiempo funcionando y ya han corregido muchas pulgas que pueden aparecer con microchip.