Bueno, comienzo con el tutorial para manejo de FAT en microcontroladores AVR. Vamos a utilizar las librerías recomendadas en este blog, pongo nuevamente el enlace:
http://elm-chan.org/fsw/ff/00index_e.html (Fatfs)
http://elm-chan.org/fsw/ff/00index_p.html (Petit Fatfs)
En la sección
Resources encuentran los links de descarga, o sigan los siguientes links (pueden desactualizarse conforme vayan saliendo nuevas versiones):
http://elm-chan.org/fsw/ff/ff8b.zip (Fatfs)
http://elm-chan.org/fsw/ff/pff2a.zip (Petit Fatfs)
Existen dos versiones de esta librería: Fatfs y Petit Fatfs. La primera es la más completa, pero consume bastante memoria tanto Flash (fácilmente pueden ser 8KB pero depende de cómo se configure) como RAM (>512 por archivo abierto). La segunda está pensada para microcontroladores con muy escasos recursos (Ejemplo la subfamilia ATtiny): usa alrededor de 2 a 4 K de Flash, y alrededor de 44 bytes de memoria RAM. Si mal no estoy, las restricciones más importantes es la de no poder crear archivos, el archivo ya debe estar en la memoria. En este tutorial me concentraré en explicar la completa, no la Petit.
Lo primero es aclarar qué permite realizar estas librerías: Son una interfaz en ANSI C para gestionar archivos que se encuentren en sistemas tipo FAT, como memorias USB, SD, Discos duros, etc. No incluyen las librerías para la interfaz hardware (también llamada
capa física) con el dispositivo (como dije, puede ser una memoria SD, un disco duro IDE o ATA, un disco duro SATA, etc). Pero no hay problema, en los ejemplos de la página están incluídas las librerías para manejo de memoria SD que creo resulta ser la más interesante, ya que sólo se necesita una interfaz SPI, incluída en la mayoría de los dispositivos AVR. A continuación el link donde descargan los ejemplos:
http://elm-chan.org/fsw/ff/ffsample.zip
Ahora, comencemos explicando los archivos de los que se compone tanto la librería como los ejemplos. El primer archivo, el de la librería Fatfs, incluye básicamente los siguientes archivos en la carpeta
src:
- diskio.h (Interfaz capa física)
- ff.c (Librería Fatfs)
- ff.h (Librería Fatfs)
- ffconf.h (Configuración)
- integer.h
El
primer archivo es solo uno de cabecera, no incluye código, solo definiciones de funciones utilizadas para acceder al dispositivo (capa física). Como estas funciones son totalmente dependientes del dispositivo a utilizar (memoria USB, tarjeta SD, Disco duro, etc), la librería no las incluye, solo las define. Este archivo no lo tocaremos.
El
segundo y tercer archivo es la implementación de las funciones de la librería Fatfs. No los tocaremos.
El
quinto archivo tampoco es interesante, son solamente las definiciones de los tipos de enteros a utilizar. No lo tocaremos.
El
cuarto archivo es el más importante porque permite configurar la librería, es el único que editaremos.
Ahora descomprimamos el otro archivo, el de los ejemplos. Nos dirigimos a la carpeta
avr y ahi encontraremos, fuera de los archivos previamente mencionados, lo siguiente:
- ata.c (driver para medios ATA)
- cfc.c (driver para medios Compact Flash)
- cfmm.c (driver para medios Compact Flash y MMC)
- mmc.c (driver para memorias MMC o SD)
- mmcbb.c (driver para memorias MMC o SD sin usar SPI)
Por lo tanto, vemos que los ejemplos incluyen justamente las definiciones de las funciones en diskio.h, es decir la capa física! El único archivo que tomaremos en cuenta será el
mmc.c, que utilizaremos para acceder a memorias SD. Entonces, la lista de archivos que necesitamos para comenzar con un proyecto que implemente FAT en memoria SD es:
- diskio.h (Interfaz capa física)
- ff.c (Librería Fatfs)
- ff.h (Librería Fatfs)
- ffconf.h (Configuración)
- integer.h
- mmc.c (driver para memorias MMC o SD)
Bueno, por ahora, termino este primer post del tutorial de FAT32 para AVR, más adelante explicaré algunos cambios necesarios a realizar en estos archivos para configurar nuestro proyecto.