17
FatFs Utilização da biblioteca FatFs para manipulação de arquivos em um cartão de memória SD pelo LM3S6965 1

FAT FS

Embed Size (px)

DESCRIPTION

Fat Fs

Citation preview

Page 1: FAT FS

FatFsUtilização da biblioteca FatFs para manipulação de arquivos em um cartão de memória SD pelo LM3S6965

1

Page 2: FAT FS

Introdução Características de hardware:

Pinagem:

2

Page 3: FAT FS

Introdução A FatFs é uma API desenvolvida para sistemas embarcados simples, podendo ser

utilizada em diversos microcontroladores.

Foi desenvolvida de modo a ser o mais independente possível da plataforma de hardware utilizada, necessitando que o usuário forneça as funções básicas para a comunicação serial entre MCU e cartão SD.

Possui suporte ao FAT12,FAT16 e FAT32

Diagrama de blocos:

Aplicação

FatFs

Disk I/OComunicação com o cartão SD

Dependente do HardwareRTC

O usuário deve

desenvolver esta parte

3

Page 4: FAT FS

Características A Luminary desenvolveu todas as rotinas de comunicação serial entre o

LM3S6965 e o cartão SD, permitindo a utilização imediata da FatFs. Verifique o arquivo mmc-ek-lm3s6965 .

Existem versões prontas do Disk I/O , no site do desenvolvedor, para os MCUs : AVR, PIC24, LPC2000, V850ES, H8/300H, SH-2A, RX62N.

Algumas informações úteis sobre o sistema de arquivos FAT:

• Cada cartão SD comum possui N setores (dependendo de sua capacidade) de 512 bytes.

• O sistema de arquivos FAT utiliza um sistema de clusters, que é um agrupamento de setores. O tamanho de cada cluster durante a formatação do cartão SD no Windows pode ser de 32 KB ou 64 KB.

• O FAT16 trabalha com clusters de 32KB, como o endereçamento é de 16 bits, pode-se acessar até por partição.

• O FAT32 pode trabalhar com clusters de 32KB ou 64KB, permitindo endereçar no máximo por partição.

4

Page 5: FAT FS

Memória Uso de memória da FatFs em diversos MCUs:

ARM732bit

ARM7Thumb

Cortex-M3Thumb-2

AVR H8/300H PIC24 V850ES SH-2A RX62N IA-32

Compiler GCC GCC GCC GCC CH38 C30 CA850 SHC RXC VC6

_WORD_ACCESS 0 0 0 1 0 0 1 0 1 1

text (Full, R/W) 10495 7205 6661 12646 10686 11430 7732 8752 5747 7545

text (Min, R/W) 6523 4749 4335 8306 6986 7413 4938 5576 3746 4923

text (Full, R/O) 4539 3183 2893 5960 4876 5250 3554 3804 2659 3450

text (Min, R/O) 3307 2495 2191 4366 3770 3939 2684 2940 2025 2664

bss D*4 + 2 D*4 + 2 D*4 + 2 D*2 + 2 D*4 + 2 D*2 + 2 D*4 + 2 D*4 + 2 D*4 + 2 D*4 + 2

Work area(_FS_TINY == 0)

V*560 +F*550

V*560 +F*550

V*560 +F*550

V*560 +F*544

V*560 +F*550

V*560 +F*544

V*560 +F*544

V*560 +F*550

V*560 +F*550

V*560 +F*550

Work area(_FS_TINY == 1)

V*560 +F*36

V*560 +F*36

V*560 +F*36

V*560 +F*32

V*560 +F*36

V*560 +F*32

V*560 +F*36

V*560 +F*36

V*560 +F*36

V*560 +F*36

5

Page 6: FAT FS

Funções A API fornece as seguintes funções de manipulação no sistema de arquivos FAT:

Note que algumas funcionalidades mais avançadas como Defrag ou Fdisk não foram implementadas, a API também não possibilita a formatação de um cartão SD

unlink - Remove a file or directoryf_chmod - Change attributef_utime - Change timestampf_rename - Rename/Move a file or directoryf_mkfs - Create a file system on the drivef_forward - Forward file data to the stream directlyf_chdir - Change current directoryf_chdrive - Change current drivef_getcwd - Retrieve the current directoryf_gets - Read a stringf_putc - Write a characterf_puts - Write a stringf_printf - Write a formatted stringf_tell - Get the current read/write pointerf_eof - Test for end-of-file on a filef_size - Get size of a filef_error - Test for an error on a file

f_mount - Register/Unregister a work areaf_open - Open/Create a filef_close - Close a filef_read - Read filef_write - Write filef_lseek - Move read/write pointer, Expand file sizef_truncate - Truncate file sizef_sync - Flush cached dataf_opendir - Open a directoryf_readdir - Read a directory itemf_getfree - Get free clustersf_stat - Get file statusf_mkdir - Create a directory

6

Page 7: FAT FS

Limites Suporta: FAT12, FAT16 and FAT32.

Número de arquivos abertos: Depende da memória disponível do MCU

Número de volumes: 10

Tamanho do arquivo: até 4 GB (FAT32)

Tamanho do volume (FAT16): Até 2 GB (considerando 512 bytes/setor)

Tamanho do volume (FAT32): Até 2 TB (considerando 512 bytes/setor)

Tamanho do cluster: Até 64 KB (considerando 512 bytes/setor)

Tamanho do setor: Até 4KB

7

Page 8: FAT FS

Manipulação de arquivos Passos para desenvolver uma aplicação, utilizando a FatFs, de modo a manipular

um arquivo do tipo txt.

1- Montar a unidade:Inicialmente deve-se montar a unidade para que a FatFs seja iniciada. Esta função prepara o sistema para a interface com determinado cartão de memória SD, iniciando o cartão de memória , identificando o sistema de arquivos presente e preparando toda a API; existe a possibilidade de interface de mais de um cartão SD ao mesmo tempo ( suporte a múltiplos volumes ).

Função : FRESULT f_mount ( Byte Drive, FATFS* FileSystemObject) ;

Drive : Qual drive será utilizado, pode variar entre 0 e 9FileSystemObject : Ponteiro para a área de trabalho da FatFs Retorna : FR_OK ou FR_INVALID_DRIVEExemplo:f_mount(0, &wFatFs);

wFatFs deve ser declarada como FATFS : static FATFS wFatFs;

8

Page 9: FAT FS

Manipulação de arquivos 2- Abrir o arquivo

O próximo passo consiste em abrir o arquivo .txt em questão, para isso utiliza-se a função f_open:

FRESULT f_open ( FIL* FileObject, const TCHAR* FileName, BYTE ModeFlags);

FileObject irá representar a manipulação do arquivo, contem uma estrutura de dados que armazena todas as informações do mesmo, muito útil pois permite ao usuário escrever ou ler dados na posição que desejar em um determinado arquivo.

FileName é o nome do arquivo a ser aberto.

9

Page 10: FAT FS

Manipulação de arquivosModeFlag representa o tipo de acesso a ser atribuído ao arquivo:

ModeFlag Descrição

FA_READ Coloca o arquivo em modo de leitura. Pode ser combinada com FA_WRITE. (FA_READ | FA_WRITE) .

FA_WRITE Coloca o arquivo em modo de escritaPode ser combinada com FA_READ. (FA_READ | FA_WRITE) .

FA_OPEN_EXISTING Abre um arquivo que já existe no disco

FA_OPEN_ALWAYS Tenta abrir o arquivo, se o mesmo não existir, cria o arquivo.

FA_CREATE_NEW Cria um novo arquivo

FA_CREATE_ALWAYS Cria um novo arquivo, se o mesmo existir o arquivo será sobrescrito

10

Page 11: FAT FS

Manipulação de arquivosExemplo :

f_mount(0, &wFatFs); // monta a unidade /* abre o arquivo ti.txt */resultado = f_open(&fobj, "ti.txt", FA_OPEN_EXISTING | FA_READ);

Considerando que a função f_mount obteve sucesso, inicializando o cartão SD e detectando o sistema de arquivos nele presente, a função f_open irá tentar abrir o arquivo ti.txt, como nenhuma função de manipulação de diretórios foi utilizada, a função irá procurar o arquivo no diretório raiz.A variável resultado deverá resultar em FR_OK se tudo ocorreu bem.

Observe que o arquivo será colocado em modo de leitura.

As variáveis fobj , wFatFs e resultado devem ser declaradas:FRESULT resultado;FATFS wFatFs;FIL fobj;

11

Page 12: FAT FS

Manipulação de arquivos 3 - Ler dados do arquivo

Com o arquivo devidamente aberto em modo de leitura, a função f_read pode ser utilizada para a leitura de dados.Cada vez que esta função é executada, uma nova parte do arquivo será lido, obedecendo a sequencia início -> fim do arquivo (eof).

Função: FRESULT f_read ( FIL* FileObject, void* Buffer, UINT ByteToRead, UINT* ByteRead);

Buffer: Onde os dados serão armazenados.

ByteToRead: Quantidade de bytes a serem lidos.

ByteRead: Quantidade de bytes lidos.

Importante: FileObject é incrementado conforme o número de bytes que foram lidos, portando caso a função seja chamada novamente, é garantido que novos dados serão lidos ao menos que haja um eof.

12

Page 13: FAT FS

Manipulação de arquivosExemplo:

f_mount(0, &wFatFs); // monta a unidade /* abre o arquivo ti.txt */resultado = f_open(&fobj, "ti.txt", FA_OPEN_EXISTING | FA_READ);

/* le uma parte do arquivo, a quantidade depende do tamanho do buffer ! */resultado = f_read(&fobj, buffer, sizeof(buffer), &bytesLidos);

Buffer deve ser declarado como um array de caracteres, bytesLidos como WORD (tipo definido pela API).

Observe se bytesLidos for igual a zero, temos um fim de arquivo (eof).

13

Page 14: FAT FS

Manipulação de arquivos 4 - Escrever dados no arquivo

Com o arquivo devidamente aberto em modo de escrita, a função f_write pode ser utilizada para a escrita de dados.

Função: FRESULT f_write ( FIL* FileObject, void* Buffer, UINT ByteToWrite, UINT* ByteWritten);

Buffer: Dados que serão escritos.

ByteToWrite: Quantidade de bytes a serem escritos.

ByteWritten: Quantidade de bytes escritos.

Importante: FileObject também é incrementado conforme o número de bytes escritos, portando caso a função seja chamada novamente, é garantido que os novos dados não irão sobrescrever os anteriores ao menos que os dados já estavam no txt e FileObject ainda não está em uma posição adequada.

14

Page 15: FAT FS

Manipulação de arquivosExemplo:

f_mount(0, &wFatFs); // monta a unidade /* abre o arquivo ti.txt */resultado = f_open(&fobj, "ti.txt", FA_OPEN_EXISTING | FA_WRITE);

/* Escreve “Ola Mundo” no buffer*/strcpy( buffer , ”Ola Mundo”);bytes = strlen( buffer );

/* Escreve no começo do arquivo “ti.txt” */f_write(&fobj,buffer, bytes, &bytesEscritos);

Buffer deve ser declarado como um array de caracteres, bytesEscritos e bytes como WORD (tipo definido pela API).

15

Page 16: FAT FS

Manipulação de arquivos 5 - Fechar o arquivo

Para fechar o arquivo utiliza-se a função f_close:

Função: FRESULT f_close ( FIL* FileObject);

16

Page 17: FAT FS

Considerações Finais Site do Desenvolvedor : http://elm-chan.org/fsw/ff/00index_e.html

Duvidas: [email protected]

17