Está en la página 1de 3

Librería FAT16 - Documento de Suky

Aquí se presenta una librería para el manejo de memorias SD Card con el sistema de archivos FAT16. Está
desarrollada en C, compatible con varios compiladores. Para lograr la integración de varios compiladores se tiene
el archivo GenericTypeDefs.h en el cual se definen los tipos de variables y HardwareSPI.c/HardwareSPI.h para
allí realizar las modificaciones respecto al control del módulo SPI del microcontrolador. Por el momento se han
realizado pruebas en CCS y C18.

Funciones disponibles y sus parámetros:

Buscando una dirección de carpetas. Por ejemplo si en nuestra memoria SD tenemos la siguiente estructura de
directorios “/Logger/temp/data”, y deseamos crear una carpeta o archivo en ella debemos determinar el cluster
donde se encuentra definida para trabajar en ella. Para ello utilizamos la siguiente función:

FAT_FindDirectory(Direccion,DirectorioInicial,UbicacionCarpeta);

donde:
Dirección: indica la estructura de directorios a buscar (“/LOGGER/TEMP/DATA”).
DirectorioInicial: Indica a partir de que carpeta buscamos estructura. En principio iniciaríamos en la carpeta raíz
y este valor seria 0.
UbicacionCarpeta: En esta variable se devuelve el cluster donde trabajar.

NOTA: La búsqueda se realiza a partir de los nombres cortos.-

Crear una carpeta. Para ello primero definimos el nombre corto (Mayúscula) y el nombre largo, que puede ser el
mismo.

NombreCorto[12]=”CARPETA”
NombreLargo[30]=”Carpeta creada con PIC”

Utilizamos la siguiente función:

FAT_CreateDirectory(NombreLargo,NombreCorto,Ubicación)

donde:
Ubicación: es la dirección del Cluster en donde la crearemos. Esta dirección puede ser DirectorioRaiz (Definida
dentro de la librería como 0) o una que se obtiene a buscar una dirección de carpetas con FAT_FindDirectory(…).
Retorna: La dirección donde se ha creado la carpeta para posterior trabajo dentro de ella (Crear un archivo, otra
carpeta, ect…)

Creación de un archivo. Es idéntico a crear una carpeta pero con el adicional de indicar el string a escribir en
dicho archivo. Dadas las capacidades físicas del microcontrolador el tamaño del string siempre será menor a un
cluster.

FAT_CreateFile(NombreLargo,NombreCorto,Ubicacion,Texto)

Agregar datos a un archivo. Si tenemos ya un archivo creado con datos almacenados y necesitamos agregar más
datos con esta función es relativamente sencillo donde podemos ir generando un archivo de cualquier tamaño. La
función a utilizar es la siguiente:
FAT_OpenAddFile(NombreArchivo,UbicacionCarpeta,Texto)

donde:
NombreArchivo: Nombre corto de archivo en donde agregaremos datos.
UbicacionCarpeta: Dirección de carpeta contenedora del archivo.
Texto: Texto a agregar al archivo.

Abrir un archivo y leer su contenido: En la librería se lee el archivo y se envía por puerto serial, es aquí donde se
debe cambiar a gusto.

FAT_OpenFile(NombreArchivo,UbicacionCarpeta)
donde:
NombreArchivo: Nombre corto de archivo en donde leeremos datos.
UbicacionCarpeta: Dirección de carpeta contenedora del archivo.

Ejemplo en CCS:

#include <18F4620.h>
#device adc=8
#fuses H4,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=40000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#include "FAT16.c"

UINT8 Texto[512]="Texto Creado con PIC....\r\n";

void main(){

int1 Card_Work=0;

char NombreCorto[13];
char NombreLargo[50];
UINT16 UbicacionFolder=0;

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED|T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

InitHard_SDCard();
delay_ms(1000);
while(1){
if((SD_DETEC==0)&&(Card_Work==FALSE)){
delay_ms(500);
if(SD_DETEC==0){
Card_work=1;
SDCard_init();
FAT_init();
strcpy(&NombreCorto[0],"CARPET~1");
strcpy(&NombreLargo[0],"Carpeta de PIC");
UbicacionFolder=FAT_CreateDirectory(&NombreLargo[0],&NombreCorto[0],DirectorioRaiz);
strcpy(&NombreCorto[0],"ARCHIV~1.txt");
strcpy(&NombreLargo[0],"Archivo con PIC.txt");
FAT_CreateFile(&NombreLargo[0],&NombreCorto[0],UbicacionFolder,&Texto[0]);
FAT_OpenAddFile(&NombreCorto[0],UbicacionFolder,&Texto[0]);
}
}

if((SD_DETEC==1)&&(Card_Work==TRUE)){
Card_work=0;
}
}

También podría gustarte