Jump to content

    
Sign in to follow this  
InsolentS

Встроенное в FatFs форматирование резервирует слишком много места под Fat

Recommended Posts

Всем привет!

 

Балуюсь с FatFs поверх AT45. Размер носителя 1мегабайт. После форматирования с помощью f_mkfs наблюдаю ровно 3/4 свободного места на диске (т.е. 768кб). Не понимаю, как служебная область Fat12 может так много занимать, ведь диск у меня всего-то 2048 кластеров размером (кластер = 1 сектор, 1 сектор = 512байт). Это, в теории, получается 1.5байт * 2048кластеров = 3кб на собственно таблицу. Я понимаю, что там ещё есть загрузочные сектора и прочая служебная информация, но ведь не 256кб :05: Я что-то не помню, чтобы у дискеты на 1.44мб было зарезервировано столько места под FAT.

Мои предположения:

1) Встроенное в FatFs форматирование чего-то не так форматирует.

2) Я не докурил документацию на Fat.

 

Любая помощь будет принята с благодарностью :beer:

Share this post


Link to post
Share on other sites

Приведи полную последовательность команд (с параметрами) по разбивке на разделы и форматированию.

И проверке свободного места на диске.

 

Share this post


Link to post
Share on other sites

Ура! Живой человек проявил интерес к моему вопросу!! :biggrin:

static FRESULT res;   
static uint32_t total_size, free_size;
static FATFS *fs_ptr;

res = f_mkfs("", 0, 1);
      
res = f_getfree("", &free_size, &fs_ptr);
      
total_size = (fs_ptr->n_fatent - 2) * fs_ptr->csize * 512; /* TODO: Abstract out the sector size */
free_size = free_size * fs_ptr->csize * 512;

Как видите, ничего особенного.

total_size и free_size в байтах.

Share this post


Link to post
Share on other sites
Ура! Живой человек проявил интерес к моему вопросу!! :biggrin:

static FRESULT res;   
static uint32_t total_size, free_size;
static FATFS *fs_ptr;

res = f_mkfs("", 0, 1);
      
res = f_getfree("", &free_size, &fs_ptr);
      
total_size = (fs_ptr->n_fatent - 2) * fs_ptr->csize * 512; /* TODO: Abstract out the sector size */
free_size = free_size * fs_ptr->csize * 512;

Как видите, ничего особенного.

total_size и free_size в байтах.

 

Есть такой вопрос, вы уверены в верности расчёта свободного места при использовании функций get_free, есть некоторые сомнения на счёт размера кластера которого используется при расчете.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this