Page 1 of 1

SPI Flash File System

PostPosted: Wed, 08.05.2019 05:48:00
by TS-Labs
Для определенных томных целей понадобилась вменяемая файловая система для SPI флэшей.

Придумывая ФС для флэшек надо иметь в виду следующие вещи:
- записывать на флэш можно только нулевые биты,
- чтоб бит 0 стал 1, флэш нужно стирать,
- стирать флэш можно только большими кусками по 64 или 4кБ.
Исходя из вышеописанного, ФАТ12/16/32 не подходят. Да и полная версия FATFS для з80 компилируется в какие то страшные 40кБ, и в общем неприменима.
В инетах нашел неплохую имплементацию для NOR флэшей, но как оказалось, она занимает нереально много места после компиляции (35кБ для авр8, а для зетника на сдцц вообще не влезла в 64к).

Недолго думая, решил запилить свою. Управился ровно за 3 вечера.
Пилилось, исходя из следующих соображений:
- полноценная файловая система с именами и АПИ,
- максимально просто, чтоб меньше писать и занимало меньше места,
- легко настраиваимая для разных типов флэшей,
- абстрагированная от железа (функции чтения, записи и стирания флэша вынесены в коллбэки),
- файлы могут фрагментироваться, при этом должна отсутствовать необходимость в garbage collector,
- умеренный wear levelling, чтоб не протирать все время одно место, а распределять нагрузку записи по поверхности,
- никаких подпапок,
- файл после создания можно писать только последовательно произвольными кусками, но после закрытия дописывать уже нельзя,
- читать файл можно рандомно,
- файлы физически занимают место на флэше, кратное размеру стираемого блока (4 или 64к).

Что в результате получилось.
Корневая папка отсутствует напрочь, как и ФАТ, бугога. Файлы состоят из "чанков", равных размеру стираемого блока. Каждый чанк снабжен сигнатурой, типом и адресом следующего чанка по цепочке. В текущей имплементации хедер равен 9 байт. В первом чанке файла лежит имя файла (произвольной длины, но желательно не более 32 символов) и его размер.

В апи присутствуют функции форматирования объема, создания, записи, чтения, удаления файла, установка указателя внутри файла для чтения. При удалении файла блоки, занимаемые им стираются и будут использованы при следующих записях.

Сорцы лежат здесь.

А зачем все это нужно, вы узнаете совсем скоро. ;)

Re: SPI Flash File System

PostPosted: Wed, 08.05.2019 12:16:09
by LessNick
:wow2: Охренеть!

Поди и видео 360x288 теперь без тормозов будут? :smoke:

Re: SPI Flash File System

PostPosted: Wed, 08.05.2019 13:19:12
by idxi
TS-Labs, ты прямо как "икона".. :)

Re: SPI Flash File System

PostPosted: Wed, 08.05.2019 16:04:17
by TS-Labs
LessNick wrote:Поди и видео 360x288 теперь без тормозов будут? :smoke:

Флэшка конфигурационная, содержит некие файлы, не имеющие отношения к видео )

Re: SPI Flash File System

PostPosted: Thu, 09.05.2019 06:09:34
by TS-Labs
Запустил на реале - флэш маунтит и файлы с нее читает. Все аццки медленно, потому что через вейтовые порты.

Re: SPI Flash File System

PostPosted: Thu, 09.05.2019 23:38:08
by idxi
Что это ознает ? :/