Embedded FAT16/32 for CF cards
Project name:
| | Embedded FAT16/32 for CF cards
| | | | Language: | | ANSI C, with use of a few extensions for interrupt handling etc. This could be easily changed for other platforms | | | | Target platform: | | Currently running on a Ti C6000, but suited to most other embedded platforms | | | | Abstract: | | This code takes data and stores it as files in the standard FAT16 or FAT32 file format. Functions are also included for formatting the drive. | | | | Key features and advantages: | | The software is a complete tested solution. The solution has been optimised for high data rates at low processor loading. Caching of sectors is built in to improve speed and special writing techniques are used to improve card performance. For a modern CF card, raw read rates of 10MBytes/s and raw write rates of 8MBytes/s are typical. | | | |
Full Description The library was originally developed for a very high speed data logging system running on a c6000 DSP from Ti. The library was designed to read and write data to/from a compact flash interface. The compact flash card is connected directly to the c6000 memory bus with only a few simple external logic gates required. There are several methods of reading and writing to compact flash cards, including UDMA and memory mapped. To keep the electronic interface as simple as possible our library uses a standard memory mapped mode of interface. The system reads information from the card (the PIO mode) and using this information sets up the maximum speed of access possible. All standard ANSI C disk operations are supported, making interfacing with existing code very simple indeed.
Overview of FAT16/32 library
Simultaneous Disk Access FAT16/32 library can access files on unlimited number of disk volumes at the same time.
Unlimited Number of Files FAT16/32 library can handle as many open files as required by the application.
Supports FAT16, and FAT32 FAT16/32 library supports the same FAT (File Allocation Table) formats as MS-DOS, Windows, and many other systems.
Supports Compact Flash FAT16/32 library supports LBA (Logical Block Addressing) to read from disk drives and tested with many different Compact Flash cards.
Support for Fast Writes FAT16/32 library can write large chunks of data at once making it to achieving the maximum possible data throughput for real-time writes.
Efficient Cache Support FAT16/32 library will cache frequently accessed data such as a volume's FAT or directories. The application has full control over the size of the cache and how delayed write operations should be handled.
Optimised FAT operations FAT16/32 library has its own native API consisting of about 20 functions highly optimised for maximum performance and control.
Compatible API FAT16/32 library emulates about 32 file I/O related functions. These are written with the prefix of “fs_” to remove ambiguity with ANSI C Standard I/O functions.
Disk Format FAT16/32 library supports FAT32 Disk Format according to the standards. Performance Parameters RAM requirements: xxkB minimum, typicall xxkB Typical code space requirements: xxkB Typical read speed: 10MB/s at xx% processor load (DM648 @900MHz) Typical write speed: 8MB/s at xx% processor load (DM648 @900MHz)
FAT16/32 library Application Programming Interface
fs_InitFATFS - FS initializing function (should call before file operations) fs_DoneFATFS - Close fs_FAT safely fs_chdir - change directory fs_getcwd - get current directory fs_fopen - file open fs_fclose - file close fs_fcloseall - close all files fs_fseek - seek to a specific place in the file given a starting position by 'whence' fs_rewind - go to the beginning of a file fs_ftell - get the current position of the file fs_feof - check whether end of file fs_fsize - get file size fs_fgetpos - get current position fs_fsetpos - set current position fs_fread - read file fs_fwrite - write file fs_fwrite_fast - Write the maximum possible sectors at once Limitations: * Recommended to start with a new file (Partially written files may provide problems) * Files with partially written clusters at end are not supported * All writes restricted to begin at end of file
fs_fgetc - get character fs_fputc - put character fs_fgets - get string fs_fputs - put string fs_fflush - flush file buffers fs_flushall - flush all file buffers fs_remove - delete file fs_mkdir - make directory fs_rmdir - remove directory fs_fstat - get statistics of a given file fs_chmod - change file mode fs_utime - change time of a given file fs_filecount - return file count for given extension fs_filename - return filename for given index fs_init_file - Initialise file structure (need to call for every file structure before use)
|