Вы находитесь на странице: 1из 17

FatFs

Utilizao da biblioteca FatFs para manipulao de arquivos em um carto de memria SD pelo LM3S6965
1

Introduo
Caractersticas de hardware:

Pinagem:

Introduo
A FatFs uma API desenvolvida para sistemas embarcados simples, podendo ser utilizada em diversos microcontroladores. Foi desenvolvida de modo a ser o mais independente possvel da plataforma de hardware utilizada, necessitando que o usurio fornea as funes bsicas para a comunicao serial entre MCU e carto SD. Possui suporte ao FAT12,FAT16 e FAT32 Diagrama de blocos:

O usurio deve desenvolver esta parte

Caractersticas
A Luminary desenvolveu todas as rotinas de comunicao serial entre o LM3S6965 e o carto SD, permitindo a utilizao imediata da FatFs. Verifique o arquivo mmc-ek-lm3s6965 . Existem verses prontas do Disk I/O , no site do desenvolvedor, para os MCUs : AVR, PIC24, LPC2000, V850ES, H8/300H, SH-2A, RX62N. Algumas informaes teis sobre o sistema de arquivos FAT:

Cada carto 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 formatao do carto SD no Windows pode ser de 32 KB ou 64 KB. O FAT16 trabalha com clusters de 32KB, como o endereamento de 16 bits, pode-se acessar at 216 16 = por partio. O FAT32 pode trabalhar com clusters de 32KB ou 64KB, permitindo enderear no mximo por partio.

Memria
Uso de memria da FatFs em diversos MCUs:

ARM7 32bit Compiler _WORD_ACCESS text (Full, R/W) text (Min, R/W) text (Full, R/O) text (Min, R/O) bss Work area (_FS_TINY == 0) Work area (_FS_TINY == 1) GCC 0 10495 6523 4539 3307 D*4 + 2 V*560 + F*550 V*560 + F*36

ARM7 Thumb GCC 0 7205 4749 3183 2495 D*4 + 2 V*560 + F*550 V*560 + F*36

CortexM3 Thumb-2 GCC 0 6661 4335 2893 2191 D*4 + 2 V*560 + F*550 V*560 + F*36

AVR

H8/300H PIC24

V850ES SH-2A

RX62N

IA-32

GCC 1 12646 8306 5960 4366 D*2 + 2 V*560 + F*544 V*560 + F*32

CH38 0 10686 6986 4876 3770 D*4 + 2 V*560 + F*550 V*560 + F*36

C30 0 11430 7413 5250 3939 D*2 + 2 V*560 + F*544 V*560 + F*32

CA850 1 7732 4938 3554 2684 D*4 + 2 V*560 + F*544 V*560 + F*36

SHC 0 8752 5576 3804 2940 D*4 + 2 V*560 + F*550 V*560 + F*36

RXC 1 5747 3746 2659 2025 D*4 + 2 V*560 + F*550 V*560 + F*36

VC6 1 7545 4923 3450 2664 D*4 + 2 V*560 + F*550 V*560 + F*36

Funes
A API fornece as seguintes funes de manipulao no sistema de arquivos FAT:
f_mount - Register/Unregister a work area f_open - Open/Create a file f_close - Close a file f_read - Read file f_write - Write file f_lseek - Move read/write pointer, Expand file size f_truncate - Truncate file size f_sync - Flush cached data f_opendir - Open a directory f_readdir - Read a directory item f_getfree - Get free clusters f_stat - Get file status f_mkdir - Create a directory unlink - Remove a file or directory f_chmod - Change attribute f_utime - Change timestamp f_rename - Rename/Move a file or directory f_mkfs - Create a file system on the drive f_forward - Forward file data to the stream directly f_chdir - Change current directory f_chdrive - Change current drive f_getcwd - Retrieve the current directory f_gets - Read a string f_putc - Write a character f_puts - Write a string f_printf - Write a formatted string f_tell - Get the current read/write pointer f_eof - Test for end-of-file on a file f_size - Get size of a file f_error - Test for an error on a file

Note que algumas funcionalidades mais avanadas como Defrag ou Fdisk no foram implementadas, a API tambm no possibilita a formatao de um carto SD

Limites
Suporta: FAT12, FAT16 and FAT32. Nmero de arquivos abertos: Depende da memria disponvel do MCU Nmero 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

Manipulao de arquivos
Passos para desenvolver uma aplicao, 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 funo prepara o sistema para a interface com determinado carto de memria SD, iniciando o carto de memria , identificando o sistema de arquivos presente e preparando toda a API; existe a possibilidade de interface de mais de um carto SD ao mesmo tempo ( suporte a mltiplos volumes ).

Funo : FRESULT f_mount ( Byte Drive, FATFS* FileSystemObject) ;


Drive : Qual drive ser utilizado, pode variar entre 0 e 9 FileSystemObject : Ponteiro para a rea de trabalho da FatFs Retorna : FR_OK ou FR_INVALID_DRIVE Exemplo: f_mount(0, &wFatFs); wFatFs deve ser declarada como FATFS : static FATFS wFatFs;

Manipulao de arquivos
2- Abrir o arquivo O prximo passo consiste em abrir o arquivo .txt em questo, para isso utiliza-se a funo f_open:

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


FileObject ir representar a manipulao do arquivo, contem uma estrutura de dados que armazena todas as informaes do mesmo, muito til pois permite ao usurio escrever ou ler dados na posio que desejar em um determinado arquivo. FileName o nome do arquivo a ser aberto.

Manipulao de arquivos
ModeFlag representa o tipo de acesso a ser atribudo ao arquivo:
ModeFlag FA_READ Descrio 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 escrita Pode ser combinada com FA_READ. (FA_READ | FA_WRITE) .
Abre um arquivo que j existe no disco Tenta abrir o arquivo, se o mesmo no existir, cria o arquivo. Cria um novo arquivo Cria um novo arquivo, se o mesmo existir o arquivo ser sobrescrito

FA_OPEN_EXISTING FA_OPEN_ALWAYS FA_CREATE_NEW FA_CREATE_ALWAYS

10

Manipulao de arquivos
Exemplo : 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 funo f_mount obteve sucesso, inicializando o carto SD e detectando o sistema de arquivos nele presente, a funo f_open ir tentar abrir o arquivo ti.txt, como nenhuma funo de manipulao de diretrios foi utilizada, a funo ir procurar o arquivo no diretrio raiz. A varivel resultado dever resultar em FR_OK se tudo ocorreu bem. Observe que o arquivo ser colocado em modo de leitura. As variveis fobj , wFatFs e resultado devem ser declaradas: FRESULT resultado; FATFS wFatFs; FIL fobj;

11

Manipulao de arquivos
3 - Ler dados do arquivo Com o arquivo devidamente aberto em modo de leitura, a funo f_read pode ser utilizada para a leitura de dados. Cada vez que esta funo executada, uma nova parte do arquivo ser lido, obedecendo a sequencia incio -> fim do arquivo (eof). Funo: FRESULT f_read ( FIL* FileObject, void* Buffer, UINT ByteToRead, UINT* ByteRead);

Buffer: Onde os dados sero armazenados.


ByteToRead: Quantidade de bytes a serem lidos. ByteRead: Quantidade de bytes lidos. Importante: FileObject incrementado conforme o nmero de bytes que foram lidos, portando caso a funo seja chamada novamente, garantido que novos dados sero lidos ao menos que haja um eof. 12

Manipulao de arquivos
Exemplo: 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

Manipulao de arquivos
4 - Escrever dados no arquivo Com o arquivo devidamente aberto em modo de escrita, a funo f_write pode ser utilizada para a escrita de dados.

Funo: FRESULT f_write ( FIL* FileObject, void* Buffer, UINT ByteToWrite, UINT* ByteWritten);
Buffer: Dados que sero escritos.

ByteToWrite: Quantidade de bytes a serem escritos.


ByteWritten: Quantidade de bytes escritos. Importante: FileObject tambm incrementado conforme o nmero de bytes escritos, portando caso a funo seja chamada novamente, garantido que os novos dados no iro sobrescrever os anteriores ao menos que os dados j estavam no txt e FileObject ainda no est em uma posio adequada.

14

Manipulao de arquivos
Exemplo: 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 comeo 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

Manipulao de arquivos
5 - Fechar o arquivo Para fechar o arquivo utiliza-se a funo f_close: Funo: FRESULT f_close ( FIL* FileObject);

16

Consideraes Finais
Site do Desenvolvedor : http://elm-chan.org/fsw/ff/00index_e.html Duvidas: eduardobernardi7@gmail.com

17

Вам также может понравиться