Esta entrada no es un tutorial sobre cómo utilizar la
librería FatFs de ELM-Chan,
tan solo voy a dar las indicaciones necesarias para poder utilizar el
port que he realizado para los microcontroladores PSoC de Cypress.
Si necesitas saber más sobre la librería o el uso de
sus funciones, en internet puedes encontrar abundante información
sobre su uso y uno de los mejores sitios es la propia página de la
librería: ELM-Chan.
Sobre el Port.
El motivo para realizar el port de la librería fué la necesidad de implementar la grabación de datos en tarjetas SD con un micro de Cypress de la familia PSoC 4, para posteriormente tratar esos datos en un PC de sobremesa.
Partiendo de la versión R0.11a, que en el
momento de escribir esta entrada, es la última versión disponible y
la más moderna; los cambios necesarios para hacer funcionar la
librería con el micro PSoC 4 fueron mínimos. No fueron necesarios
cambios en ninguno de los archivos principales de la librería y se
realizaron cambios únicamente en el archivo “sdcard.c” que es el
que implementa el acceso a bajo nivel a las tarjetas SD. De hecho,
los cambios fueron tan sencillos que al final decidí comprobar que
funcionaban también en micros de la familia PSoC 4M e incluso hice
un port para los micros de la familia PSoC 5LP.
El port de la librería así como algunas aplicaciones
desarrolladas para pruebas puedes descargarlos de Github.
Cómo utilizar la librería.
Para utilizar la librería en tu proyecto sigue los
pasos que te indico a continuación:
-
Añade un módulo de comunicaciones SPI al esquema de tu proyecto y configúralo como maestro en modo CPHA = 0, CPOL = 0.
-
Añade una salida digital que será utilizada para la señal de selección del bus SPI. Para el buen funcionamiento de la librería, esta señal tendrá que ser controlada por el código de la librería en lugar de dejar al hardware y a la API que lo hagan. En PSoC 4 puedes hacerlo de dos manera distintas: añadir una salida digital, o reutilizar una de las señales SS del propio módulo SPI. Para utilizar esta última manera, habrá que desconectar la señal SS del módulo SPI del HSIOM (High Speed I/O Matrix). Si no sabes a qué me refiero, mira los ejemplos y consulta el manual de referencia de PSoC 4.
-
Añade los archivos que hay dentro de la carpeta PSoC_FatFs_Library del repositorio a tu proyecto.
-
Si vas a configurar la librería con funciones de escritura y quieres que la fecha y hora de los archivos sean los correctos tendrás que implementar por tí mismo un reloj de tiempo real (más información sobre RTC aquí).
-
Añade los “#includes” necesarios en la parte que corresponda de tu código (mira los ejemplos).
-
Retoca los valores de las macros que hay al principio del archivo “sdcard.c”:
-
SPI_NAME. En esta macro, pon el nombre que le hayas dado al módulo SPI en el esquema de tu proyecto. Gracias a esta macro, si decides cambiar el nombre del módulo SPI en el esquema, no tendrás que retocar los nombres de todas las funciones relativas al bus SPI dentro del código de “sdcard.c”, solo tendrás que cambiar el valor asignado a esta macro.
-
mmSPI_SS_Write(value). Función de la API correspondiente a la línea que hayas utilizado para la señal SS del bus SPI. Ejemplo: supón que añades en el esquema una salida digital a la que llamas SS. La api proveerá una función llamada SS_Write(valor) que permitira, desde el firmware fijar el valor lógico de esa salida. Esta es la función que has de asignar a esta macro. El motivo es el mismo que para la macro anterior.
-
CS_DELAY_US. Retardo en microsegundos desde que se activa la señal SS del bus SPI hasta que empieza el envío de datos.
-
M_DELAY_US. Retardo utilizado internamente en “sdcard.c”.
-