FreeRTOS+FAT is still in the lab
FreeRTOS+FAT is already in use in commercial products
and we encourage you to try it yourself. Be aware however that
FreeRTOS+FAT was acquired by Real Time Engineers Ltd., and is
still being documented and updated to
ensure it meets our strict quality standards.
Please use the forum for support,
or contact us directly if you have a specific business interest.
FF_Error_t FF_Format( FF_Disk_t *pxDisk,
BaseType_t xSmallClusters );
The media is the physical device on which files are stored. Examples of
media suitable for use in an embedded file system include SD cards,
solid state disks, NOR flash memory chips, NAND flash chips, and RAM
Media cannot be used to hold a FreeRTOS+FAT file system until it has
Partitioning divides the media into multiple units, each of which is
called a partition. Each partition can then be formatted
to hold its own file system. A partition can be formatted externally
(for example Windows can format an SD-card), or using the FF_Format()
FF_Format() will dynamically determine the FAT type and cluster size to
use. The cluster size will relate to the cluster count, and the cluster
count to the FAT type. The xPreferFAT16 and xSmallClusters parameters
allow a preference to be specified. For example, for a small RAM disk
set both parameters to true to use FAT16 with small clusters, and for a
large SD-card set both parameters to false to use FAT32 with large
clusters. Larger clusters can be accessed more quickly, whereas smaller clusters
waste less space as they will have fewer unused blocks at the end of
The FF_Disk_t structure that describes the media that
contains the partition to be formatted.
The number of the partition on the media to format.
Partition numbers start from 0.
Set to pdTRUE to use FAT16 if it is possible, otherwise
Set to pdTRUE to use small clusters if it is possible,
otherwise use large clusters. When set to pdFALSE, the
largest possible cluster size will be selected. The
actual size will depends on the FAT type in use.
If the media is successfully formatted then FF_ERR_NONE is returned.
If the media could not be formatted then an error code is returned.
FF_GetErrMessage() converts error codes into error descriptions.
#define HIDDEN_SECTOR_COUNT 8
#define PRIMARY_PARTITIONS 1
#define PARTITION_NUMBER 0
static FF_Error_t prvPartitionAndFormatDisk( FF_Disk_t *pxDisk )
memset( &xPartition, 0x00, sizeof( xPartition ) );
xPartition.ulSectorCount = pxDisk->ulNumberOfSectors;
xPartition.ulHiddenSectors = HIDDEN_SECTOR_COUNT;
xPartition.xPrimaryCount = PRIMARY_PARTITIONS;
xPartition.eSizeType = eSizeIsQuota;
xError = FF_Partition( pxDisk, &xPartition );
FF_PRINTF( "FF_Partition: FF_Format: %s\n", FF_GetErrMessage( xError ) );
if( FF_isERR( xError ) == pdFALSE )
xError = FF_Format( pxDisk, ramPARTITION_NUMBER, pdTRUE, pdTRUE );
FF_PRINTF( "FF_RAMDiskInit: FF_Format: %s\n", FF_GetErrMessage( xError ) );
Using the FF_Partition() and FF_Format() functions to partition the disk, then format a partition