Полная версия этой страницы:
Запись на SD карту
Почитал спецификации SD. Но как создавать файл не нашёл. Подскажите, куда двигаться. Может есть какие-то ссылки.
msalov
Aug 12 2008, 06:27
SD - это всего лиш носитель, а файлы принадлежат файловой системе. Читайте про файловые системы.
Удачи.
zltigo
Aug 12 2008, 06:47
Цитата(MMos @ Aug 12 2008, 08:24)

Может есть какие-то ссылки.
Пользуемся поиском по форуму.
Поиском пользовался. Вопрос остаётся открытым.
Cyber_RAT
Aug 12 2008, 07:48
читайте спецификацию на FAT, или пишите свою файловую систему.... SD-карточка - это просто микросхема памяти с контроллером управления...
Немного расширю вопрос. Есть ли средства читать в ПК с SD информацию, не организованную в файлы?
_4afc_
Aug 12 2008, 08:04
Цитата(Cyber_RAT @ Aug 12 2008, 11:48)

читайте спецификацию на FAT, или пишите свою файловую систему.... SD-карточка - это просто микросхема памяти с контроллером управления...
...которая позволяет оперировать (писать/читать) блоками по 512 байт задавая номер блока.
Ну и другие возможности тоже есть.
Цитата(MMos @ Aug 12 2008, 11:57)

Немного расширю вопрос. Есть ли средства читать в ПК с SD информацию, не организованную в файлы?
Так же как с винчестера или дискеты - всякими диск докторами и подобными тулзами.
После того как карта проинитится и даст возбожность считывать или писать сектора.
Приятно пообщаться с братьями по разуму. Несколько фраз - и я начинаю прозревать. Спасибо! А может кто подскажет толковый русскоязычный источник информации по SD?
msalov
Aug 12 2008, 08:13
Цитата(MMos @ Aug 12 2008, 10:57)

Немного расширю вопрос. Есть ли средства читать в ПК с SD информацию, не организованную в файлы?
Можно читать и писать при помощи
dd for windows.
rv3dll(lex)
Aug 12 2008, 08:45
Цитата(MMos @ Aug 12 2008, 11:57)

Немного расширю вопрос. Есть ли средства читать в ПК с SD информацию, не организованную в файлы?
winhex
Цитата(rv3dll(lex) @ Aug 12 2008, 12:45)

winhex
+1 хорошая прога! Сам ей пользовался при чтении таблицы fat на карточке. Можно посмотреть что где лежит.. и даже при желании разобраться с таблицей.. :-)
WinHex - действительно отличная программа. Скачал, поставил. SD под руками нет, посмотрел USB-flash. FAT16 - проще некуда. И зачем я собирался ваять файлы сам? Пусть работает машина! Осталось научиться писать на карточку. Информации нарыл вроде достаточно, но всё на языке Шекспира, а моя пропускная способность на нём на порядок меньше, чем на языке Достоевского. Если кто знает о ресурсах на родном языке, поделитесь. Большое спасибо всем откликнувшимся. Без вас мне было бы хуже.
rv3dll(lex)
Aug 12 2008, 12:44
Цитата(MMos @ Aug 12 2008, 15:10)

Без вас мне было бы хуже.
на каком языке будем общаться с картой?
Из Windows читать\писать на низком уровне (без ФС) на физ. носители можно с помощью обычных API'шных CreateFile ("\\.\C:" - Opens drive C (volume). (ц) MSDN), WriteFile, ReadFile. Так что программку можете написать сбе сами :)
servol
Aug 12 2008, 13:04
Вот реализация FAT32 которая работает на 1к оперативки на любом микроконтроллере
http://elm-chan.org/fsw/ff/00index_e.html
Карту предполагается подключать к ADSP2185. Писать софт буду на его ассемблере. Вообще возможны варианты. Проблема не в том, какие команды писать, а в том, что эти команды должны делать. Другими словами: проблема не в том, как сгенерирровать сигналы для карточки, а в том, какие это должны быть сигналы.
Попробую немного прояснить ситуацию. Карта памяти должна выполнять роль регистратора в измерительном приборе. Запись в неё будет производиться из сигнального процессора. Чтение будет производиться с помощью ПК. Максимальная скорость записи - единицы килобайт в секунду. Максимальное время записи - единицы часов.
one_man_show
Aug 12 2008, 13:56
Есть известный способ обмануть FAT, то есть на РС карточка будет читаться, а внутри железки про файловую систему можно и не знать:
1) на РС форматируется карточка
2) создается пустой файл размером во всю свободную область карточки
3) зная параметры карточки и параметры форматирования, определяем первый физический сектор области данных, который "ляжет" на начало файла
4) в устройстве пишем данные, начиная с известного места
5) если запись данных с прерыванием во времени и с выключением питания, то после запси каждой порции ставим какой-то маркер из двух-четырех и т.п. байт, который сами можем однозначно отличить от данных
6) после завершения работы регистратора карточку устанавливаем в РС, считываем/копируем файл
7) с помощью самодельной специальной программы выуживаем данные
zltigo
Aug 12 2008, 14:10
Цитата(one_man_show @ Aug 12 2008, 15:56)

Есть известный способ обмануть FAT...
Только для этого прежде надо обмануть самого себя - решить писать на ASM и упорно не пользоватся многочисленными реализациями FAT

. Ведь на самом деле в FAT совершенно ничего сложного и ресурсоемкого нет - спокойно, штатно использовался на IBM-PC/XT с 4,7MHz процессором с 16K памяти....
sergeeff
Aug 12 2008, 14:10
Под ADSP2185 имеется GNU C-compiler. FatFS - компактная и отлаженная библиотека. Для работы с SD достатчно реализовать SPI протокол, хоть даже программно дергая ножками. Ну и пиши себе на здоровье обычные DOS файлы, которые потом можно где угодно обрабатывать стандартными средствами, без изголизмов. Ну а прямо на ассмеблере писать такие вещи - извращение по сегодняшней жизни.
one_man_show
Aug 12 2008, 14:19
Цитата(zltigo @ Aug 12 2008, 18:10)

Только для этого прежде надо обмануть самого себя - решить писать на ASM и упорно не пользоватся многочисленными реализациями FAT

. Ведь на самом деле в FAT совершенно ничего сложного и ресурсоемкого нет - спокойно, штатно использовался на IBM-PC/XT с 4,7MHz процессором с 16K памяти....
Не вижу связи с написанием программы на асме. Совет был дан в связи с тем, что автор темы впервые услышал не только про файловую систему, но и про работу с флэш-картой, а уж про сложность или простоту реализации ему пока трудно рассуждать. предложенный способ успешно работал (может быть и сейчас трудится) в эксплуатационном "черном ящике" наших вертолетов
Kuzmi4
Aug 12 2008, 14:21
2 one_man_show
Если чесно я себе не представляю как надо себя не любить, чтоб писать на асме в SD-карту. А если заюзать ваш метод - тогда вообсче мазохизм какой то.....
Согласитесь - ну не делают так... Гораздо просче взять
http://elm-chan.org/fsw/ff/00index_e.html и заюзать его. Время на разработку в разы сократится....
PS.
Чесно прризнаюсь - сам писал на асме для ADSP-21990 но это было года 4 назад и писался хитрый FIR фильтр(там был фильтр, набор данных и выброс в ком вроде/счас интерфейс не вспомню уже), так что я думаю разница понятна...
zltigo
Aug 12 2008, 14:29
Цитата(one_man_show @ Aug 12 2008, 16:19)

Не вижу связи с написанием программы на асме.
На АSM писать заметно муторнее, а готовых реализаций именно под ADSP-21xx почти наверняка нет, да и неизбежная подгонка, даже если есть муторное дело.
Отпортировать же сишный исходник и собрать с нужными DSP-ешными ASMовскими кусками - без проблем.
Цитата
предложенный способ успешно работал ...
Речь идет не о неработоспособности, а о целесообразности поделок.
rv3dll(lex)
Aug 13 2008, 04:30
Цитата(zltigo @ Aug 12 2008, 18:10)

Только для этого прежде надо обмануть самого себя - решить писать на ASM и упорно не пользоватся многочисленными реализациями FAT

. Ведь на самом деле в FAT совершенно ничего сложного и ресурсоемкого нет - спокойно, штатно использовался на IBM-PC/XT с 4,7MHz процессором с 16K памяти....
использование FAT предполагает хранение таблиц постоянно в одном месте.
карточка быстро помрёт, причём не вся а начальная область. Это не предположение - это факт. При отладке VHDL ядра я собственноручно прибил несколько карт записью в начальную область ее памяти несколько тысячь раз в день.
если нужно хранить данные то лучше создать свою примитивную систему с последовательной записью
Спасибо всем, что не забываете. Особое спасибо за конструктивные мысли, которые несмотря на постепенное скатывание к словоблудию всё-таки появляются. Про FAT я слышу не впервые, как почему-то показалось. В ассемблере нет ничего мазохистского. И не надо думать, что те, кто программирует не на Коболе, себя совсем не любит (это я Кузмичу). Очень ценно замечание про "раздалбывание" системных областей на SD при использовании FAT. Только ради того, чтобы обратить внимание на этот факт, стоило создавать тему. (Не подумайте, что я зубоскалю - я серьёзно). Интересное совпадение: у меня тоже что-то вроде "чёрного ящика" для летательного аппарата, только не штатного, а технологического на время отработки изделия. Если вы действительно хотите мне помочь, то для меня сейчас самым актуальным вопросом является русскоязычная (по возможности объёмная) информация по использованию SD. Вот в работе с картами памяти я начинающий. Впрочем, принимаются любые идеи.
rv3dll(lex)
Aug 13 2008, 07:12
Цитата(MMos @ Aug 13 2008, 10:52)

принимаются любые идеи.
если требуется простое логирование данных то придумать свой стандарт записи файлов без таблици размещения.
например 1 сектор SD это 512 байт -
если взять его за размер фигурального кластера, то 1 файл будет содержать минимум этот кластер
в начале кластера некая шапка (индивидуальная) в ккоторой время всякая чепуха и количество кластеров в файле. попав на первуюже шапку - перескакивая все следующие кластеры файла. ловим вторую и так далее
опять же если читать этот лог подрят то перескакивая с файла на файл можно считать это всё на писи.
haker_fox
Aug 13 2008, 07:14
Цитата(rv3dll(lex) @ Aug 13 2008, 13:30)

использование FAT предполагает хранение таблиц постоянно в одном месте.
карточка быстро помрёт, причём не вся а начальная область. Это не предположение - это факт. При отладке VHDL ядра я собственноручно прибил несколько карт записью в начальную область ее памяти несколько тысячь раз в день.
если нужно хранить данные то лучше создать свою примитивную систему с последовательной записью

А как же они работают в мультимедийной технике (фотоаппараты, плееры и тп)?
rv3dll(lex)
Aug 13 2008, 07:28
Цитата(haker_fox @ Aug 13 2008, 11:14)


А как же они работают в мультимедийной технике (фотоаппараты, плееры и тп)?
сколько кадров Вы сфотографировали? тут же речь идёт о созранении данных -возможно полностью/частично забивая карту десятки раз в день.
а во вторых производители флешей всегда рекомендуют писать карту целиком - и только потом стирать, чтобы равномерно использовать всю поверхность.
изза такой ненадёжности флеш накопителее и ведутся разработки в области SSD дисков и Феррорам флешей, которые вроде как свободны от этих недостатков.
Цитата(haker_fox @ Aug 13 2008, 09:14)


А как же они работают в мультимедийной технике (фотоаппараты, плееры и тп)?
Чтобы "раздолбать" флеш-память нужны всё-таки многие тысячи записей в одно и то же место. На это уйдёт не один день. А если это произойдёт через пару дней после завершения гарантийного срока , то производитель изделия только обрадуется. Вот так это всё и "работает".
andron86
Aug 13 2008, 07:40
думаю надо автору топика в сторону "mass storage" копать
Kuzmi4
Aug 13 2008, 07:44
Цитата(MMos @ Aug 13 2008, 09:52)

.. И не надо думать, что те, кто программирует не на Коболе, себя совсем не любит (это я Кузмичу)...
Про такой язык слышу раз 2-й или 3-й

и понятия не имею что это вообсче.
Просто предложил занятся изучением си, если есчё не знаете - это в дальнейшем сэкономит массу времени вам.
2 rv3dll(lex) - а можно хотя бы приблизительну статистику? Интересно
sergeeff
Aug 13 2008, 07:55
Ну можно в FAT и не упираться. К примеру есть такая штука :
http://www.embedded.com/2000/0012/0012ia2.htm. Можно и на SD ее запустить. Там файлы лежат в виде непрерывных областей. Правда при больших объемах карточки время дефрагментации будет значительным.
Андрону: тыкался и туда, но ведь там USB, а это намного сложнее, чем SPI. Отложил на дальнюю перспективу.
Кузмичу: ошибочка-с. Я принял тебя за другого Кузмича. Это его реальное отчество и он фанат Кобола. Просто твоё высказывание мне немного напомнило его. Ну ещё и то, что он тоже когда-то жил в Киеве. Спасибо за совет по Си. Со своей стороны посоветую: только знание ассемблера позволяет по-настоящему понять, что же происходит в процессоре. И со своей стороны удивлюсь: как же можно не хотеть стремиться к такому пониманию?
rv3dll(lex)
Aug 13 2008, 08:03
Цитата(Kuzmi4 @ Aug 13 2008, 11:44)

2 rv3dll(lex) - а можно хотя бы приблизительну статистику? Интересно
первая 32 мегабайтная флешка - рухнули первые 8 килобайт (видимо минимальный модуль флеши) через неделю нещадных экспериментов целью которых было узнать скорость чтения /записи при разном количестве блоков в режиме мультиблок.
ещё было за полгода примерно прибито 256мб 2гб и 4гб. , но это практически непрерывная эксплуатация в течении 8 часового рабочего дня.
а ещё забыл - несколько штук компакт флешей тудаже.
Kuzmi4
Aug 13 2008, 08:20
2 rv3dll(lex) - спсибо, буду приблизительно теперь значть что к чему..
2 MMos - асм знаю, и не только для авр-ок, сам недавно писал процессоропохожую вЭщ и асм к нему

.
Для сведений: на магистерскую писал прогу именно на асме - счас жалею - много времени впустую ушло - можно было писать на сях с вставками асма - было б так же по производительнсоти, а времени съэкономил бы тонну...
zltigo
Aug 13 2008, 09:43
Цитата(rv3dll(lex) @ Aug 13 2008, 06:30)

использование FAT предполагает хранение таблиц постоянно в одном месте. карточка быстро помрёт, причём не вся а начальная область. Это не предположение - это факт
Во многих случаях эта проблема эффективно сглаживается введением процедуры отмонтирования и записью FAT при отмонтировании и переходе границы сегмента области FAT. Ничего страшного. Кроме того Автор озвучивал скорости и переодичность записи. Они совершенно не критичны.
Цитата(rv3dll(lex) @ Aug 13 2008, 06:30)

При отладке VHDL ядра я собственноручно прибил несколько карт....
Большей частью пооблемы конкретной реализации.
MiklPolikov
Mar 22 2012, 15:49
Интересно , где-нибудь в интернете есть полное и понятное описание FAT , что бы было написано что где находится и как считать смещения ?
Сколько не искал - всё что нашёл какое-то сумбурное и отрывачное.
AHTOXA
Mar 22 2012, 16:20
aaarrr
Mar 22 2012, 16:22
Полное и исчерпывающее описание называется fatgen103, гуглится на ура.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.