Академический Документы
Профессиональный Документы
Культура Документы
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:
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)
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 ).
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:
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
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);
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.
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