Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Коллектор данных на картах памяти малого размера
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ut1wpr
Подскажите, пожалуйста, можно ли использовать карту памяти небольшого размера (скажем MMC 16 МБайт) для устройства, следящего за напряжением в сети и накапливающего данные во времени. Поясню точнее, т.к. ясно, что можно smile.gif Хочется использоваит карту просто как внешнюю память без применения FAT. Т.е. прямо адресоваться к заранее вычисляемому адресу, записывать в него блок данных (скажем, байт 20) фиксированной длины.
О блочном чтении/записи знаю, реализовывал в Атмеловской последовательной. Вот теперь вопрошаю, а можно ли ММС так использовать?
ukpyr
можно.
Клим
Цитата(ut1wpr @ Mar 1 2009, 10:29) *
Подскажите, пожалуйста, можно ли использовать карту памяти небольшого размера (скажем MMC 16 МБайт) для устройства, следящего за напряжением в сети и накапливающего данные во времени. Поясню точнее, т.к. ясно, что можно smile.gif Хочется использоваит карту просто как внешнюю память без применения FAT. Т.е. прямо адресоваться к заранее вычисляемому адресу, записывать в него блок данных (скажем, байт 20) фиксированной длины.
О блочном чтении/записи знаю, реализовывал в Атмеловской последовательной. Вот теперь вопрошаю, а можно ли ММС так использовать?

Читать можно, а писать только целым сектором 512 байт.
ut1wpr
Цитата(Клим @ Mar 1 2009, 11:15) *
Читать можно, а писать только целым сектором 512 байт.

Т.е. запись как обычно: вычисляем адрес сектора, читаем сектор, по вычисленному смещению модифицируем сектор, потом пишем сектор на его же место?
Правильно?
VaaG
Здравствуйте.

Присоединяюсь к вопросу!
Тоже организовал последовательно через AVR
Использовал библиотеку avrlib
Пишет\читает\инициализирует без ошибок

В библиотеке сектор и буфер определены так:
u32 sector=300; //здесь понятно, номер сектора
u08 buffer[0x200];
//размер буфера 512 б. Но что представляет из себя буфер??? строку? или что?

Что такое 0x200 ???

процедуры записи\чтения соответственно
mmcWrite(sector, buffer);
mmcRead(sector, buffer);

Спасибо!
aaarrr
Цитата(ut1wpr @ Mar 1 2009, 13:07) *
Т.е. запись как обычно: вычисляем адрес сектора, читаем сектор, по вычисленному смещению модифицируем сектор, потом пишем сектор на его же место?
Правильно?

Правильно.

Цитата(VaaG @ Mar 1 2009, 13:57) *
u08 buffer[0x200];[/b] //размер буфера 512 б. Но что представляет из себя буфер??? строку? или что?

Массив u08 размерностью 512 элементов, т.е. массив из 512 байт.

Цитата(VaaG @ Mar 1 2009, 13:57) *
Что такое 0x200 ???

Число... шестнадцатеричное.
MrYuran
Цитата(VaaG @ Mar 1 2009, 13:57) *
Что такое 0x200 ???

0x200 == 512
VaaG
Спасибо aaarrr и MrYuran
Rst7
Цитата
можно ли использовать карту памяти небольшого размера


Если размер небольшой, лучше использовать AT45DBxxx - надежнее, и можно организовать последовательную запись данных размером меньше одного блока, т.е. не насиловать каждый блок размер_блока/размер_записи раз. Считывать тоже можно с произвольного адреса - т.е. экономия на буфере блока.
aaarrr
Цитата(Rst7 @ Mar 1 2009, 14:33) *
Если размер небольшой...

...и денег не жалко. А так - да, хороший вариант. Есть еще numonyx'овские M25PE/M45PE - у них ресурс повыше, но объемы маленькие.
Rst7
Цитата
...и денег не жалко.


Спорный вопрос. Мелкого размера ММС можно купить только на барахолке (т.е. вариант для нормальной разработки отпадает), большие - сплошная китайчатина, часто маловменяемая. Плюс цена холдера, плюс уменьшение надежности из-за контактов.
ukpyr
Цитата
лучше использовать AT45DBxxx - надежнее, и можно организовать последовательную запись данных размером меньше одного блока
все равно сектора затираются последовательно, так что по барабану. преимущество только при непрерывном потоке данных, когда используются 2 внутр.буфера.
вот цена на АТ45 слишком завышена, факт...
Цитата
Мелкого размера ММС можно купить только на барахолке (т.е. вариант для нормальной разработки отпадает), большие - сплошная китайчатина, часто маловменяемая.
зачем искать разное старье ? Kingston MicroSD на 1Г стоит 4$, разъем - еще 3-4$. Все равно дешевле чем AT45DB642, объем в 125 раз больше. Плюс возможность в любой момент прочитать/записать в картридере на компе.
Rst7
Цитата
все равно сектора затираются последовательно, так что по барабану.


Стирание - одно на сектор. А не одно на каждую запись. Так что выигрыш есть и он немал. При размере записи 20 байт, грубо говоря, ресурс увеличивается в 25 раз (это если 45ка с блоком в 512 байт).
galjoen
Цитата(Rst7 @ Mar 1 2009, 14:33) *
Если размер небольшой, лучше использовать AT45DBxxx - надежнее, и можно организовать последовательную запись данных размером меньше одного блока, т.е. не насиловать каждый блок размер_блока/размер_записи раз. Считывать тоже можно с произвольного адреса - т.е. экономия на буфере блока.

Насчёт использования AT45DBxxx согласен. До 8 мбайт они бывают. У меня год на запись в цикле AT45DB642D стояла и не сдохла. Но они вообще-то тоже блоками пишутся. Тут преимущество только в том, что можно данные накапливать, ихний буфер используя. А в случае MMC в ОЗУ такой буфер выделять придётся.
Rst7
Цитата
Но они вообще-то тоже блоками пишутся.


Повторюсь. Стирание - одно на блок. Запись используется без стирания. Те данные, которые не надо трогать заполняются 0xFF. В результате по AND'у они накладываются.

Цитата
вот цена на АТ45 слишком завышена, факт...


Завышена. Хотя, на том же дигикее 100 штук 45DB642 по $4.

Цитата
Kingston MicroSD на 1Г


А какой, кстати, температурный диапазон у нее? И хотелось бы вменяемый даташит smile.gif
ukpyr
Цитата(Rst7 @ Mar 1 2009, 18:04) *
Стирание - одно на сектор. А не одно на каждую запись. Так что выигрыш есть и он немал. При размере записи 20 байт, грубо говоря, ресурс увеличивается в 25 раз (это если 45ка с блоком в 512 байт).
а кто запрещает сделать буфер в памяти ?
Rst7
Цитата
а кто запрещает сделать буфер в памяти ?


И датчик падения питания, дабы в пожарном порядке слить незаполненный буфер? Можно, но зачем усложнять жизнь? Проще писать данные по факту прихода.

Конечно, такое возможно только при применении 45DB. С MMC фокус не прокатит, к сожалению, нет у нее отдельной команды стирания и отдельной команды записи.
galjoen
Цитата(Rst7 @ Mar 1 2009, 18:12) *
Повторюсь. Стирание - одно на блок. Запись используется без стирания. Те данные, которые не надо трогать заполняются 0xFF. В результате по AND'у они накладываются.

Я тоже повторюсь. Пишется блоками, поэтому, что 1 байт записать, что весь блок - времени совершенно одинаковое кол-во уйдёт. Кстати пишутся они медленнее, чем в ДШ написано, по крайней мере у меня так почему-то. У AT45DB642D не быстрее чем за 12 милисекунд блок записывается.
Цитата(Rst7 @ Mar 1 2009, 18:12) *
Завышена. Хотя, на том же дигикее 100 штук 45DB642 по $4.

29.01.2009 покупали AT45DB642D по 146,82 руб. (это без НДС).
Rst7
Цитата
Я тоже повторюсь. Пишется блоками, поэтому, что 1 байт записать, что весь блок - времени совершенно одинаковое кол-во уйдёт.


Вы совсем не читаете мои посты. Я про ресурс, а не про время.
-=TRO=-
А что? У MMC есть какой-то тайм-аут при записи одного сектора? Почему в этот сектор нельзя писать данные по их приходу пока не запишем весь сектор? может ну её эту буферизацию полного сектора? Я поимаю, что если мы не успеем добить сектор и вырубим питание то данные которые мы в него пихали тю-тю. Но в определённых условиях последним сектором с данными можно и пожертвовать. Ну и мониторить на всяк случай просадку питания самим контроллером чтобы быстренько успеть добить сектор на максимальной скорости (понимая что надёжность так себе и внешний супервизор лучше).
VaaG
Ещё один маленький вопрос...

u32 sector=300;
u08 buffer[0x200];
//буфер размера 512, в каждом байте значение 0xAA
for (q=0x0;q<0x201;q++)
{
buffer[q]=0xAA;
}

Блок нормально пишется, в winHEXе 300 сектор полностью в AA

u32 sector=300;
u08 buffer[0x200];
//буфер размера 512, в каждом байте значение 0x1A
for (q=0x0;q<0x201;q++)
{
buffer[q]=0x1A;
}

Тут проблема, сектор не полностью 0x1A

Нормально пишет (AA,BB,CC,DD,EE,FF,A1,B1...)
Кажется я неправильно число задаю. Никак во всём секторе не получу например (11, ...34)
Как правильно пишутся эти значения hex чисел???

Спасибо!
aaarrr
Цитата(VaaG @ Mar 1 2009, 22:50) *
for (q=0x0;q<0x201;q++)

Вы заполняете 513 байт. Возможно, при этом перетирается что-то ценное.
VaaG
Цитата(aaarrr @ Mar 1 2009, 22:55) *
Вы заполняете 513 байт. Возможно, при этом перетирается что-то ценное.

Да...
от нуля до 0x201 , будет 513...не заметил

Первый байт -0
конечный 511

Неа, не сработало
При попытке записать 0x34

u32 sector=300;
u08 buffer[0x200];
for (q=0x0;q<=0x1FF;q++)
{
buffer[q]=0x34;
}
В итоге получилось (с 0-ого)
34 9A 4D 26 93 49 A4 D2 69 и так повторяется до 512 бит на сектор...
Hmm
Дык форматировать все равно надо. Или, если несколько секторов окажутся "битыми", это не важно?
aaarrr
Цитата(Hmm @ Mar 1 2009, 23:57) *
Дык форматировать все равно надо. Или, если несколько секторов окажутся "битыми", это не важно?

Что форматировать? Битые сектора внутренней NAND MMC - её внутренние проблемы, если речь об этом.
Hmm
"Она" сама будет обходить сбойные сектора что-ли?
AT45 не имеет последних, а при низкоуровневой "работе" с MMC, например, некую таблицу сбойных "участков", придется организовывать самому.
ukpyr
Цитата
А что? У MMC есть какой-то тайм-аут при записи одного сектора?
есть, к сожалению sad.gif
rx3apf
Цитата(Hmm @ Mar 2 2009, 00:19) *
"Она" сама будет обходить сбойные сектора что-ли?
AT45 не имеет последних, а при низкоуровневой "работе" с MMC, например, некую таблицу сбойных "участков", придется организовывать самому.

Вот как раз у AT45 они могут появиться (а, помнится, у Toshiba вообще были такие флешаки, в которых сбойные могли быть изначально - вот уж в самом деле геморрой !), и их придется обходить. А у SD/MMC механизм замещения сбойных секторов встроенный, и об этой проблеме можно не думать.
aaarrr
Цитата(rx3apf @ Mar 2 2009, 00:43) *
а, помнится, у Toshiba вообще были такие флешаки, в которых сбойные могли быть изначально - вот уж в самом деле геморрой

Да это у любого NAND'а так.
Hmm
Цитата(rx3apf @ Mar 2 2009, 00:43) *
... у SD/MMC механизм замещения сбойных секторов встроенный ...

Тэкс... т.е. это есть на технологическом уровне. Бум знать smile.gif
А на индустриальный температурный диапазон такие "флешаки" существуют?
aaarrr
Цитата(Hmm @ Mar 2 2009, 01:02) *
А на индустриальный температурный диапазон такие "флешаки" существуют?

Существуют. Беда только в том, что покупая, например, карту "Kingston 1GB", Вы на самом деле получаете кота в мешке.
Hmm
Т.е., отдельно купленые чипы, будут дороже готовых устройств sad.gif
Впрочем с китайцами всегда так ...
rx3apf
Цитата(aaarrr @ Mar 2 2009, 01:07) *
Существуют. Беда только в том, что покупая, например, карту "Kingston 1GB", Вы на самом деле получаете кота в мешке.

А гарантия на что (типично продавцы дают 5 лет) ? Или соль в том, что "1 GB", которые уже не выпускаются и купить можно лишь где-то какие-то остатки ? А что до температуры - у того же Kingston типичные цифры -25...+85 рабочая, -40...+85 - хранение. Так что почти индустриальные...
aaarrr
"Производитель" только клеит наклейку на изделие, или же в лучшем случае корпусирует оное (кстати, -25...+85 - это рабочая температура корпуса SD-карты, определенная в спецификации). А что окажется на самом деле внутри - неизвестно.
rx3apf
Цитата(aaarrr @ Mar 2 2009, 01:39) *
"Производитель" только клеит наклейку на изделие, или же в лучшем случае корпусирует оное (кстати, -25...+85 - это рабочая температура корпуса SD-карты, определенная в спецификации).
А что окажется на самом деле внутри - неизвестно.

Но оно или работает, или не работает. На то и гарантия. Кстати, как раз китайцы вроде бы сами память (кристаллы, в смысле) еще не пекут ? Так что Samsung какой-нибудь или что еще. А что конкретно - да, узнать будет нелегко. А нужно ?
aaarrr
Ага, только у того же Samsung'а есть как индустриальные, так и коммерческие кристаллы.
rx3apf
Цитата(aaarrr @ Mar 2 2009, 02:16) *
Ага, только у того же Samsung'а есть как индустриальные, так и коммерческие кристаллы.

Ну, это понятно (кстати, конкретно по SD - у Samsung производящиеся в настоящий момент, я специально глянул, все -25...+85).. Но ведь это не проблема именно карточек, выпускаемых кем-то под своим именем. Недобросовестный производитель может и корпусированные камни маркировать как выгодно, а не как на самом деле. В любом случае, наличие гарантии дает основание "наехать" если не на производителя, то хотя бы на поставщика.
А вообще SD/MMC - это один кристалл, или память сама по себе, а контроллер - сам по себе ? Потому как если один, то тут все однозначно - кристалл _обязан_ соответствовать спецификации, иначе это заведомая левота. Опять же, основная сфера применения емких флешаков - именно в "почти" индустриальном температурном диапазоне, смысла производить "коммерческие" нет - кому они нужны ?
-=TRO=-
Есть вероятность что купленная позже карточка-близнец будет работать не совсем так как старая, особенно по SPI, обсуждались уже случаи а форуме.
rx3apf
Цитата(-=TRO=- @ Mar 2 2009, 02:33) *
Есть вероятность что купленная позже карточка-близнец будет работать не совсем так как старая, особенно по SPI, обсуждались уже случаи а форуме.

Есть, да. Обсуждалось, да. Правда, помнится, конкретики не было - я попросил хоть название даташитов, где якобы была информации, расходящаяся со спецификацией, но результата не было. И что-то я сильно подозреваю, что дело все ж в руках. Это как с LCD-модулями на 44780 - казалось бы, все известно, прочитай и делай - так нет, регулярно появляются утверждения, что вот такой-то работает, а такой-то - не работает. Начинаешь выяснять - а работа реализована неправильно... Вот пока сам по этим граблям не пройдусь - буду сомневаться...

Да, кстати - ведь подобные проблемы вовсе не особенность именно карточек. Сколько плюх в микроконтроллерах ? Сколько плюх в радиотрансиверах "с мозгами" ? Да вот, хотя бы, плюхи с готовностью у памяти AT26xxx - да запросто ! Так что изделие, которое делается по определенной спецификации, вызывает все ж больше доверия. IMHO, разумеется...
aaarrr
Цитата(rx3apf @ Mar 2 2009, 02:28) *
А вообще SD/MMC - это один кристалл, или память сама по себе, а контроллер - сам по себе ?

Карточки бывают разные, в том числе вида контроллер + кристалл на плате.
Rst7
Цитата
А гарантия на что (типично продавцы дают 5 лет) ?


А Вы читали ту гарантию? Ну издохнет у Вас флешка и при этом потеряются важные данные на $10к (например). Вы придете к торгашу и скажете - "Издохла флешка, я потерял 10 килобачей". Продавец ответит Вам - "Гуано вопрос, вот Вам новая флешка". "А 10 тонн?" - "А это к терапевту (найух, или еще куда)"...
Клим
Тут скорее всего человеку надо штучное любительское решение, а вы опять ударились в космическую надежность и килобаксовые бюджеты проектов...
Rst7
Цитата
Тут скорее всего человеку надо штучное любительское решение, а вы опять ударились в космическую надежность и килобаксовые бюджеты проектов...


Главное, чтобы потом человек с этим "штучным любительским решением" на бабки не попал smile.gif
@Ark
Цитата(ut1wpr @ Mar 1 2009, 09:29) *
Подскажите, пожалуйста, можно ли использовать карту памяти небольшого размера (скажем MMC 16 МБайт) для устройства, следящего за напряжением в сети и накапливающего данные во времени. Поясню точнее, т.к. ясно, что можно smile.gif Хочется использоваит карту просто как внешнюю память без применения FAT. Т.е. прямо адресоваться к заранее вычисляемому адресу, записывать в него блок данных (скажем, байт 20) фиксированной длины...

Я бы Вам посоветовал не отказываться от FAT и файловой структуры, если, в конечном итоге, предполагается чтение данных в компьютер. Иначе получается - упрощаете одну проблему (запись), усложняете другую - перенос информации в ПК. Но, конечно, реализовывать полноценную поддержку файловой системы на МК с ограниченными ресурсами - слишком накладно. Оптимальное решение, на мой взгляд, лежит где-то по середине...
Форматируем носитель на компьютере, и создаем (резервируем) на нем специальный (пустой) файл данных, предназначенный для записи информации. С заранее установленным именем и достаточным размером (или максимальным). Чтобы упростить поиск, можно, например, размещать его всегда в корневом каталоге.
При записи информации, МК должен помещать данные последовательно в этот файл. Конечно, придется поискать имя файла в каталоге, и затем определять адреса блоков файла через FAT, но при этом, FAT требуется только читать и не нужно модифицировать! А это значительно проще, чем полная поддержка всех функций файловой системы. Таким образом, немного усложнив запись, полностью сохраняете структуру файловой системы носителя.
rx3apf
Цитата(Rst7 @ Mar 2 2009, 10:16) *
А Вы читали ту гарантию? Ну издохнет у Вас флешка и при этом потеряются важные данные на $10к (например). Вы придете к торгашу и скажете - "Издохла флешка, я потерял 10 килобачей". Продавец ответит Вам - "Гуано вопрос, вот Вам новая флешка". "А 10 тонн?" - "А это к терапевту (найух, или еще куда)"...

А что, это относится только к флешкам ? Точно так же будет, скажем, с HDD или иным носителем. Или вообще с любыми комплектующими или, например, программным обеспечением. Если хочется надежности - пожалуйста. За совсем другие деньги. Не вижу никаких причин, почему карточка должна быть менее надежна, чем чип с лапками. Ну разве что наличием коннектора.
Rst7
Цитата
Не вижу никаких причин, почему карточка должна быть менее надежна, чем чип с лапками.


На "чип с лапками" есть даташит, есть Reliability Qualification Report. Вообщем, есть надежда.

В случае флешки - надежды нет smile.gif
rx3apf
Цитата(Rst7 @ Mar 2 2009, 16:12) *
На "чип с лапками" есть даташит, есть Reliability Qualification Report. Вообщем, есть надежда.

Надежда на что ? Что битую партию заменят ? Ну, может быть заменит. Ни за что больше производитель не отвечает. О чем явно предупреждает в каждом даташите.

Цитата
В случае флешки - надежды нет smile.gif

Не вижу никакой принципиальной разницы. Но срок гарантии больше.
Rst7
Цитата
Не вижу никакой принципиальной разницы. Но срок гарантии больше.


Разве может человек с позывным в качестве форумного ника понять разницу между радиолюбительским и профессиональным подходом в разработке?

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