Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: своя FAT для связки MK <=> FLASH
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > IDE/ATA/SATA/SAS/SCSI/CF
QuickWitted
Предлагаю разработать упрощённый аналог FAT для работы микропроцессора с флеш картами.

В современных микропроцессорах нижнего ценового диапазона относительно МАЛО RAM на борту
(У АТMega16 - 1к.б. НА ВСЁ). В связи с этим очень трудно сделать поддержку FAT - на запись.
(Флеш карты могут записывать информацию только БЛОКАМИ по 512байт (1024байт для >1Gb.))
Проще говоря таблицу размещения файлов надо где-то хранить иначе придётся после чтения
каждого кластера читать FAT снова и выяснять какой кластер писать/читать следующим
(на что тратится очень много ресурсов).

Если писать напрямик, а не в файл, то потом относительно проблемно будет читать такую флеш на ПК.
(т.е. нужен прямой доступ к диску, что трудно получить под Win XP)

В сети гуляет идея делать Пред форматирование (т.е. писать файл, а потом писать/читать уже из него)
но этот аспект нигде не описан.

Предлагаю разработать свою упрощённую файловую систему.
Т.е. на большую часть флешки писать файл данных, а в конце файл разметки.
Почему в конце - начало кластера 0 в FAT от диска к диску плавает,
а последний блок последнего сектора, последнего Кластера всегда в конце флеши.

Прогу по созданию файлов на флешке, я уже нацарапал...
На данном этапе думаю о создании файлового менеджера - по вытаскивании/залитию файлов в образ.

Интересно мнение ALL о данном проекте и предложения о том какие элементы
данных о файле включить и как более оптимально организовать файл разметки...
(если ковырять - то сделать универсально)
DL36
Цитата(QuickWitted @ Sep 6 2007, 11:12) *
Предлагаю разработать упрощённый аналог FAT для работы микропроцессора с флеш картами.

В современных микропроцессорах нижнего ценового диапазона относительно МАЛО RAM на борту
(У АТMega16 - 1к.б. НА ВСЁ). В связи с этим очень трудно сделать поддержку FAT - на запись.
(Флеш карты могут записывать информацию только БЛОКАМИ по 512байт (1024байт для >1Gb.))
Проще говоря таблицу размещения файлов надо где-то хранить иначе придётся после чтения
каждого кластера читать FAT снова и выяснять какой кластер писать/читать следующим
(на что тратится очень много ресурсов).

1K RAM конечно очень мало, писать не получиться а вот читать можно попробовать. Но потеря будет за счет постоянного обращения к карточке.
QuickWitted
Цитата(DL36 @ Sep 7 2007, 18:17) *
1K RAM конечно очень мало, писать не получиться

ПИСАТЬ вообще - не проблема...
Писать с учётом фат (без внешнего ОЗУ килика эдак на 2)
теоретически возможно, НО ОЧЕНЬ СЛОЖНО/МЕДЛЕННО

Цитата
а вот читать можно попробовать. Но потеря будет за счет постоянного обращения к карточке.


Вот ссылка на мой анализ/критику "попробованного"
http://pic.forum24.ru/?1-1-0-00000005-000-0-0-1188057694

Более прямого примера (ну хотя бы рабочего примера) по работе с фат (вычисления её параметров) найти мне пока не удалось...

Если кто плавал - поясните...
DL36
Цитата(QuickWitted @ Sep 9 2007, 21:13) *
ПИСАТЬ вообще - не проблема...


Более прямого примера (ну хотя бы рабочего примера) по работе с фат (вычисления её параметров) найти мне пока не удалось...

Если кто плавал - поясните...


Я сейчас пишу навигацию для FAT32. Уже используется два буфера по 512 байт, в первый читаю сектор, во втором массив структур для меню. Но LCD выводится две колонки по 4 строки (имена файлов) Еще структура с параметрами SD и разделов... еще приблизительно 200 байт. Без меню обойтись конечно можно, но как то неинтересно все это получается. Итого 1.2 к Поэтому и говорю что памяти слегка маловато...
QuickWitted
Цитата
Более прямого примера (ну хотя бы рабочего примера) по работе с фат (вычисления её параметров) найти мне пока не удалось...


Цитата(DL36 @ Sep 10 2007, 18:48) *
Я сейчас пишу навигацию для FAT32.
.... Поэтому и говорю что памяти слегка маловато...


Я не спорю, но у меня НЕ ПОЛУЧАЕТСЯ вычислить нулевой кластер под FAT16
2 моих примера расчёта с 2 немного отличающимися результатами тут:

http://pic.forum24.ru/?1-1-0-00000005-000-0-0-1188057694

но значение нулевого кластера получается БОЛЬШЕ реального значения
2 кластера (нулевого нет, а как я понял файлы идут со 2, т.е нулевой + зн. из фат)
НО ГЛАВНЫЙ СМЫСЛ В ТОМ, что НА НОСИТЕЛЕ ФАЙЛ НАЧИНАЕТСЯ
РАНЬШЕ ВЫЧИСЛЕННОГО значения НУЛЕВОГО КЛАСТЕРА!!!!
QuickWitted
Цитата(QuickWitted @ Sep 11 2007, 09:42) *
НО ГЛАВНЫЙ СМЫСЛ В ТОМ, что НА НОСИТЕЛЕ ФАЙЛ НАЧИНАЕТСЯ
РАНЬШЕ ВЫЧИСЛЕННОГО значения НУЛЕВОГО КЛАСТЕРА!!!!


Упс... ошибочка... Теперь сошлось...
alexander55
Цитата(QuickWitted @ Sep 6 2007, 12:12) *
Предлагаю разработать упрощённый аналог FAT для работы микропроцессора с флеш картами.

В современных микропроцессорах нижнего ценового диапазона относительно МАЛО RAM на борту
(У АТMega16 - 1к.б. НА ВСЁ).

Зачем себе создавать трудности, а потом их преодолевать. ATMega64 ненамного дороже, зато проблем нет.
http://elm-chan.org/fsw/ff/00index_e.html
QuickWitted
Цитата(alexander55 @ Sep 20 2007, 17:41) *
Зачем себе создавать трудности, а потом их преодолевать. ATMega64 ненамного дороже, зато проблем нет.


А юзать как? Там корпус 64-выводной корпус TQFP
И У НАС его в 2 раза дороже 16меги продают...

Проблемы как были, так и остались...

Прогу для разметки нацарапал, кому интерестно - пишите...
Cyber_RAT
Интересно - пишем.
вообщем есть задача - собирать логи на MMC карточку в своем девайсе.
Задача там эта третьей степени важности и выделять половину памяти под поддержку FAT16 расточительно.
Поэтому самого терзают мысли как организовать работу с ММС - или писать напрямую, а в виндах (linux) снимать Образ диска и обрабатывать его потом как файл собственной программкой (по сигнатуре находить начало лога и его длину и читать N-ое колл-во байт) - или делать ФС.
Сергей Борщ
Цитата(Cyber_RAT @ Dec 10 2007, 09:24) *
Поэтому самого терзают мысли как организовать работу с ММС - или писать напрямую, а в виндах (linux) снимать Образ диска и обрабатывать его потом как файл собственной программкой (по сигнатуре находить начало лога и его длину и читать N-ое колл-во байт) - или делать ФС.
А если после разметки создать на ней файл размером со всю флешку? Теоретически он будет линейным, и изменяя его можно вообще не трогать фат.
QuickWitted
Цитата(Сергей Борщ @ Dec 10 2007, 22:02) *
А если после разметки создать на ней файл размером со всю флешку?


Так я и сделал в своей программе

Цитата
Теоретически он будет линейным, и изменяя его можно вообще не трогать фат.


Да, но как выяснилось не флэшки одинаково форматированы...

Т.е. мной созданная прошивка определяет начало флэши в 98% случаев.
(для ФАТ16 у карт от 32 до 512 Мб)

А в 2х % флэшу надо отформатировать в винде...

Пару раз встречал несовместимость с 1гб, но они были не мои - разбираться времени небыло...
а в 16 мб и меньше они на фат 12
Cyber_RAT
т.е. 16 мб флешка строго FAT12 ?
вроде как я свою посмотрел она 16 фат пишет... (или это из-за того что я ее под линуксом форматил с указанием ФС)
QuickWitted
Цитата(Cyber_RAT @ Jan 8 2008, 15:49) *
т.е. 16 мб флешка строго FAT12 ?
(или это из-за того что я ее под линуксом форматил с указанием ФС)


Да...

Ни виндой, ни спец тулзой Hard Disk Low Level Format Tool отформатить под Фат16 у меня не вышло...
(обе жалуются на маленький обьём и форматить в фат16 на отрез отказываются...)

Если кто знает метод форматирования под виндой - киньте сюда...
(у меня есть пару флэшей 16 мб - для читалки книг сойдёт, но отформатировать под фат16 не получается...)
Cyber_RAT
http://www1.mager.org/mkdosfs/
Linux mkdosfs for Windows NT/2K/XP

c:\>mkdosfs -v -F 16 -n volname F: - для форматирования F: в fat16
galjoen
Цитата(QuickWitted @ Jan 9 2008, 07:31) *
Если кто знает метод форматирования под виндой - киньте сюда...
(у меня есть пару флэшей 16 мб - для читалки книг сойдёт, но отформатировать под фат16 не получается...)

1. ПУСК
2. Мой компьютер (правой кнопкой)
3. Управление
4. Управление дисками
5. Выбрать нужный диск по названию, или если не отформатирован по емкости (правой кнопкой по окошечку где имя/размер написаны)
6. Форматировать
7. Размер кластера устанавливаем 512. Тогда всё, что больше 2 Мбайт (т.к. у FAT12 max 0xFFF кластеров м.б. - 4096*512=2097152) FAT16 будет. Если кластер 1024 установить - то начиная с >4 Мбайт и т.д.

А я логи в флешку пишу в предварительно отформатированную, и в файл определённый, уже на неё записанный. А по другому у вас и не получится - если флешка переполнится, что тогда делать??? Файл стирать и новый открывать? Это долго - логи за это время потеряются, а уж в том, что ОЗУ не хватит я уверен. А если в таком случае в начало файла писать по кольцу (FIFO) - преимуществ нету. Всё равно файл разбирать придётся - где у него начало искать.
Я ещё внутренние буфера флешки (у моей их 2 штуки по 1056 байт) как ОЗУ использую. Хотя это м.б. вам и не подойдёт. У меня-то флешка AT45DB642D (8 Мбайт) в само устройство запаяна, а всё это - составное USB устройство: MassStorage + HID. Т.е. флешку вытащить невозможно. Процессор у меня тоже AVR. Хоть и 4 кбайта памяти имеет, но на MassStorage max 600 байт удалось выделить. Других задач очень много. Да и к USB он редко подключается, только если логи считать или перенастроить (задача не основная).
zltigo
Цитата(galjoen @ Jan 11 2008, 16:36) *
1. ПУСК

Да sad.gif.
format /?
дальше все будет написано.



Цитата(QuickWitted @ Sep 6 2007, 10:12) *
Предлагаю разработать упрощённый аналог FAT для работы микропроцессора с флеш картами.

Из истории - FATы прекрасно существовали на персональном компьютере IBM XT, если кто не знает, то это на 8bit 8088 процессере с тактовой частотой 4,7MHz. Трудно найти сейчас контроллер не превосходящий сей компьютер по вычислительной мощи.
Предлагаю НЕ разрабатывать упрощенные аналоги FAT, если речь идет о съемных носителях.
Cyber_RAT
Может оно конечно и так... и 8bit 8088 фат подерживал (факт), но ОЗУ у него было не 2 кб (или 4 как у некоторых) да и ПЗУ не 32 кб (пусть даже 128)...
Вот и приходится изголяться, ибо ставить туже атмегу 128 ради полной поддержки FAT 16/32 - при том что логи у меня далеко не первичная задача, IMHO бред.
QuickWitted
Цитата(zltigo @ Jan 11 2008, 21:51) *
Из истории - FATы прекрасно существовали на персональном компьютере IBM XT, если кто не знает, то это на 8bit 8088 процессере с тактовой частотой 4,7MHz. Трудно найти сейчас контроллер не превосходящий сей компьютер по вычислительной мощи.


И ОЗУ у него было 1кб?
(на правце 8С её было 64кб... Причём 1 Кб на ВСЁ, а не только под буфер)

Предлагаю читать ВСЁ, а не по диагонали...
(тогда и поймёшь почему не взяли более мощный процессор...)

Цитата(zltigo @ Jan 11 2008, 21:51) *
Предлагаю НЕ разрабатывать упрощенные аналоги FAT, если речь идет о съемных носителях.


Угу а как ты планируешь писать на флэшку файлы - результаты замеров?
(файлы переменной ёмкости) при условии мелкого ОЗУ?

ОЗУ отдельно припаять?
(кстати ты случаем не подскажещь ДОСТУПНЫЕ, параллельные, СТАТИЧЕСКИЕ ОЗУ ?)

Или все-таки написать в СУЩЕСТВУЮЩИЙ файл размером СО ВСЮ ФЛЭШ у казав при этом начало и конец файлов измерений в ОБЩЕМ ФАЙЛЕ?

Что проще?
zltigo
Цитата(QuickWitted @ Jan 14 2008, 09:18) *
И ОЗУ у него было 1кб?

А почему выбрали 1Kb? Пока можно еще и меньше найти smile.gif, но уже и больше и по цене не переплатить.
Зачем пытаться решить задачу негодными средствами и примитивно? Нет, я не собираюсь Вас переубеждать, я прсто возразил против призыва, типа всем миром разработать экстремально примитивную файловую систему. И в ответ на
Цитата
Интересно мнение ALL о данном проекте


Цитата
(на правце 8С её было 64кб... Причём 1 Кб на ВСЁ, а не только под буфер)

8С это была другая машинка, но не суть важно, 64Kb было именно на все - в ТОМ ЧИСЛЕ И ПАМЯТЬ ПРОГРАММ, кои грузились в этот-же RAM.
Цитата
Предлагаю читать ВСЁ, а не по диагонали...
(тогда и поймёшь почему не взяли более мощный процессор...)

Читал. Ну и где причины такого поступка описаны? Или пальцем, что называется покажите, или ....

Цитата(QuickWitted @ Sep 6 2007, 11:12) *
(Флеш карты могут записывать информацию только БЛОКАМИ по 512байт (1024байт для >1Gb.))

Размер блока гигабайтовых карточек не всегда 521байт и переключается и на 512 байтовый.
rezident
Цитата(QuickWitted @ Jan 14 2008, 11:18) *
ОЗУ отдельно припаять?
(кстати ты случаем не подскажещь ДОСТУПНЫЕ, параллельные, СТАТИЧЕСКИЕ ОЗУ ?)

Вопрос правда не мне адресован, но чем вас не устраивают SRAM с параллельной шиной от Samsung, K6X1008 или K6X4008, например? Мы их давно и успешно применяем в одном из типов наших контроллеров, правда на 80c186, а не AVR.
zltigo
Цитата(QuickWitted @ Jan 14 2008, 09:18) *
ОЗУ отдельно припаять?

Нет, взять контроллер с более, чем 1Kb RAM - явно более надежное и дешовое решение. Поставщков контроллеров масса, производителей тоже немало...
galjoen
Цитата(zltigo @ Jan 11 2008, 18:51) *
format /?
дальше все будет написано.

А дальше надо будет dir набрать - чтоб узнать, что форматировать. А флешка-то не отформатирована - её-то в списке и не будет. Тогда, наверное, методом перебора надо будет действовать - форматировать всё подряд A, B, C и т.д.
Уважаемый(ая) zltigo, вам самому-то какой способ больше нравится? А другим участникам форума? Только не подумайте, что я любитель microsoft. Вовсе нет! Сам частенько sudo (уст-ть права админа - в Linux) набираю. Но при этом вовсе не садо себя чувствую, а совсем наоборот - мазо.
Цитата(zltigo @ Jan 11 2008, 18:51) *
Из истории - FATы прекрасно существовали на персональном компьютере IBM XT, если кто не знает, то это на 8bit 8088 процессере с тактовой частотой 4,7MHz. Трудно найти сейчас контроллер не превосходящий сей компьютер по вычислительной мощи.
Предлагаю НЕ разрабатывать упрощенные аналоги FAT, если речь идет о съемных носителях.

Полностью согласен!!!
+1
Ещё вспоминаю PDP-11 (Электроника-60). У неё, в базовой версии, 4 кслова (8 кбайт) ОЗУ было. А файловая система такая упрощённая была (все файлы линейные и т.д.), что загрузчик с дискеты в 32 слова (64 байта) умещался. Всё ПЗУ занимал! Такие ПЗУ тогда были.
Ну и где сейчас та файловая система? И ваша, упрощённая, уважаемый(ая) QuickWitted - там-же будет.

Если надо ОЗУ увеличить - хорошо-бы SPI-шное ОЗУ поставить. Знаю, что есть такие. Сам бы поставил, но купить не могу - говорят экзотика. Может кто использует (подскажет где купить)?
А то дошёл до того, что флешку SPI-шную (самую маленькую+дешёвую) ставил, что-бы её буфера как ОЗУ использовать. У AT45DB011 два буфера, по 264 байта каждый.
zltigo
Цитата(galjoen @ Jan 14 2008, 15:07) *
А дальше надо будет dir набрать - чтоб узнать, что форматировать.
... дальнейшее поскипано...

Для общего развития - список дисков смотрится отнюдь не перебором dir. Воспользуйтесь diskpart ->
list volume
Цитата
самому-то какой способ больше нравится?

Командная строка.
Цитата
частенько sudo (уст-ть права админа - в Linux) набираю.

Для общего развития - это отнюдь не установить права админа. Проконсультируйтесь у сисадмина по поводу разрешенных Вам действий.
Cyber_RAT
я вот одного не понимаю... ну нужно нескольким человекам упрощенная файловая система... чего все так кинулись ее валить и требовать ее не делать , а строго следовать дао ФАТ.... ? wink.gif а почему уже тогда не EXT-3 или JFS ? или NTFS давайте наваяем... неубиваймая система будет....
Я вообще ММС себе ставлю только по причине того, что девайс будет единичным и тратить кучу времени на написание полноценной поддержки FAT считаю нецелесообразным... мне единственно от него надо - чтобы карта виделась в картридере с единственным файлом на всю флешь... (и то не для меня, а для пары пользователей.. ибо сам могу и dd-шкой скинуть инфу с ММС себе на винт и обработать).
one_man_show
Автор темы спросил "мнение ALL", вот все и кинулись...обсуждать, то есть помогать, а не "валить и требовать не делать".
TailWind
Самый простой способ:
---------------------------
Перед использованием прописываешь флэш нулями.

Контроллер пишет события последоватеьлно от начала к концу.
Формат:
Первый сектор - шапка (например, "START OF LOG", дата, время, параметры...)
Дальше поток данных. (например, "DATA_SECTOR", 0101000001111...)

Следующий сектор - опять шапка, итд....

В компьютере флэшку открывают как физический диск.
(\\\\.\\PHYSICALDRIVE0)
Программа ищет шапки и показывает список логов.

Или под один лог отводиться фиксированное количество места.
Например, 10КБт.

Сложный способ:
---------------------
Цитата
(У АТMega16 - 1к.б. НА ВСЁ). В связи с этим очень трудно сделать поддержку FAT - на запись.
(Флеш карты могут записывать информацию только БЛОКАМИ по 512байт (1024байт для >1Gb.))

Не нужно хранить всю таблицу FAT.
Достаточно хранить 1 сектор = 512 байт.
Если у тебя этого объёма нет, значит ты не можешь работать с картами памяти в режиме модификации.

Ещё способ
-------------
Постулировать, что сектор может хранить только 50 байт информации, остальное место забито нулями.
Тогда ты сможешь делать чтение / модификацию / запись !

Но совместимую с Windows FAT всё равно сделать не получиться.
Только нечто аналогичное.
На комрьютере понадобиться программа нализатор.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.