SPI Flash File System

CALL'ы и RET'ы

Postby TS-Labs » Wed, 08.05.2019 05:48:00

Для определенных томных целей понадобилась вменяемая файловая система для SPI флэшей.

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

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

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

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

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

А зачем все это нужно, вы узнаете совсем скоро. ;)
User avatar
TS-Labs
 
Posts: 5112
Joined: Thu, 26.07.2012 01:29:56

Postby LessNick » Wed, 08.05.2019 12:16:09

:wow2: Охренеть!

Поди и видео 360x288 теперь без тормозов будут? :smoke:
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 894
Joined: Thu, 26.07.2012 15:00:53

Postby idxi » Wed, 08.05.2019 13:19:12

TS-Labs, ты прямо как "икона".. :)
User avatar
idxi
 
Posts: 126
Joined: Mon, 03.07.2017 16:54:54

Postby TS-Labs » Wed, 08.05.2019 16:04:17

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

Флэшка конфигурационная, содержит некие файлы, не имеющие отношения к видео )
User avatar
TS-Labs
 
Posts: 5112
Joined: Thu, 26.07.2012 01:29:56

Postby TS-Labs » Thu, 09.05.2019 06:09:34

Запустил на реале - флэш маунтит и файлы с нее читает. Все аццки медленно, потому что через вейтовые порты.
User avatar
TS-Labs
 
Posts: 5112
Joined: Thu, 26.07.2012 01:29:56

Postby idxi » Thu, 09.05.2019 23:38:08

Что это ознает ? :/
User avatar
idxi
 
Posts: 126
Joined: Mon, 03.07.2017 16:54:54


Return to Coding

Who is online

Users browsing this forum: No registered users and 1 guest

cron

x