Равномерное заполнение SD

alfacnc

✩✩✩✩✩✩✩
7 Июл 2023
4
1
День добрый!

Делаю даталоггер на Атмега328, 1 раз в секунду получаю 40байт данных (10 переменных флоат по 4 байт),всего будет около10 тыс. записей в день, т.е. файл объемом 400 кб. Планирую записывать все на SD карту, т.к. нужен съемный носитель для переноса данных на комп.

100к количество циклов перезаписи заявляемые производителями карт это надо понимать в одну ячейку(кластер). Отсюда если это для одной ячейки, то записывая рандомно каждую секунду карта условно умрет на 10 день.

Догадываюсь что есть варианты равномерного заполнения SD карты (с указанием ячеек как у EEPROM), тогда например карты 32Гб хватит на 32Гб/400кб=80000 дней записи и это будет только один цикл перезаписи из 100к, пожизненно короче.

Подскажите, как на Ардуино организовать равномерное (последовательное) заполнение SD карты FAT, и возможно ли это в принципе?

ПиСи. Сам факт открытия/закрытия файла на SD считается за цикл перезаписи? Если да, то равномерная запись не поможет и надо смотреть в сторону уменьшения частоты записи на SD, например поставить доп RAM, там все запоминать и потом разом записывать на SD.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,971
632
45
Контроллер в сд-карте сам занимается равномерным распределением, об этом не нужно заморачиваться как при использовании прямого подключения к флеш или еепром.
 

alfacnc

✩✩✩✩✩✩✩
7 Июл 2023
4
1
@Геннадий П,
можно ссылку где про это почитать (или как правильно сделать запрос в гугле), второй день копаюсь, однозначного ответа не нашел, что именно на сд картах есть такие контроллеры
HDD, SDD да такими вещами оборудованы, а вот с СД вопрос
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,971
632
45
@alfacnc, вечером попробую поискать, если не забуду. Для hdd это не нужно, т.к. не имеет колво циклов перезаписи.
 

ТехнарьКто

★★★★★✩✩
13 Янв 2020
270
438
День добрый! Делаю даталоггер на Атмега328, 1 раз в секунду получаю 40байт данных (10 переменных флоат по 4 байт),всего будет около10 тыс. записей в день, т.е. файл объемом 400 кб. Планирую записывать все на SD карту, т.к. нужен съемный носитель для переноса данных на комп. 100к количество циклов перезаписи заявляемые производителями карт
100 тысяч перезаписей это для просто золотой по цене SLC памяти. А потребитель РФ купит TLC, QLC либо вдруг появится PLC. А даже MLC это будет очень дорого. Улучшенный и очень дорогой eMLC максимум 30 тысяч циклов перезаписи. Не извиняюсь, поскольку это не маты. Это технологии форматов хранения информации SLC, eMLC, MLC, TLC, QLC, PLC. Одна и та же память с разными контроллерами. Контроллеры на которые так бодро махнул рукой Геннадий П, типа они все сами сделают, Вас точно подведут. SLC принимают один бит на ячейку памяти, это дорого и уже не используется. MLC запись двух битов в ячейку тоже дорого и уже трудно купить. TLC хранят три бита в каждой ячейке и преподносится как самое надежное г-но для ничего не понимающих пользователей. Соответственно QLC четыре, а PLC пять битов в ячейке. Увеличение количества бит хранимых в ячейке резко уменьшает количество циклов перезаписи. Так QLC уже всего то несколько сотен циклов перезаписи, а PLC получился настолько плох, что Вы его до сих пор не видите в устройствах.

SLC.jpg

У чипов SLC памяти, которая имеет всего два состояния, износ наступает поздно. А вот QLC, у которой этих состояний аж 16, деградация происходит очень быстро. С технической точки зрения ячейка QLC принципиально не отличается от SLC, тот же транзистор, удерживающий электронный заряд, просто подвергается нагрузкам в разы чаще, а отклонение хранимой величины напряжения у QLC должен быть меньше. Поскольку технически все осталось по старому, то просто упал ресурс или другими словами количество перезаписей в QLC стало значительно меньше. Лучший SLC, худший QLC. PLC настолько плох, что даже выпускать не стали.
К этому стоит добавить, что сама запись о расположении информации на носителе, так называемая таблица разделов, тоже должна переписываться. Вы же записываете новую информацию в новое место и о этом делаете запись в таблице разделов убивая транзисторы постоянной памяти SD.

это надо понимать в одну ячейку(кластер). Отсюда если это для одной ячейки, то записывая рандомно каждую секунду карта условно умрет на 10 день. Догадываюсь что есть варианты равномерного заполнения SD карты (с указанием ячеек как у EEPROM), тогда например карты 32Гб хватит на 32Гб/400кб=80000 дней записи и это будет только один цикл перезаписи из 100к, пожизненно короче.
Вы ошибаетесь. В описанной Вами конструкции срок жизни памяти будет малым. Надеюсь, что термин малый срок жизни, а не пожизненно, теперь будет понятен.

Подскажите, как на Ардуино организовать равномерное (последовательное) заполнение SD карты FAT, и возможно ли это в принципе?
ПиСи. Сам факт открытия/закрытия файла на SD считается за цикл перезаписи? Если да, то равномерная запись не поможет и надо смотреть в сторону уменьшения частоты записи на SD, например поставить доп RAM, там все запоминать и потом разом записывать на SD.
Странный выбор контроллера Arduino оставляю на Вашей совести. Выбор FAT, который выжигает транзисторы на месте расположения таблицы разделов, просто ставит крест на всей задумке.

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

PS Чем смог, помог.
 
  • Лойс +1
Реакции: Un_ka и alfacnc

Bruzzer

★★★✩✩✩✩
23 Май 2020
472
134
Поскольку информация о том, как это сделано является коммерческой тайной этих фирм,прошу отнестись с пониманием к окончанию этого сообщения.
Если не трудно, поясните, как понимать окончание вашего сообщения.
  • Это настолько трудно реализовать, что является коммерческой тайной?
  • Вы не знаете относительно простых методов решения?
  • Вы не знаете методов решения с открытым кодом?
  • Вы знаете, но для вас важен критерий дружественность/не дружественность спрашивающего?
 

alfacnc

✩✩✩✩✩✩✩
7 Июл 2023
4
1
Чем смог, помог.
спасибо, все четко и доходчиво

на форуме ардуино.ру мне сказали что я зря парюсь,
т.к. если ардуино открывает файл раз в день и посредством команды flush (из стандартной библиотеки SD.h) 1 раз в секунду дописывать туда данные, то как раз получиться последовательное/равномерное заполнение карты, без риска превысить количество циклов перезаписи (писать все файлы друг за другом и не удалять их).
такой вариант меня устроит, так можно сохранить например на 32Гб карте 80000 файлов по 400кб, т.е. её хватит на 80000/365=219 лет)

Даже если принять тотальное выжигание FATом "транзисторов на месте расположения таблицы разделов" с ограничением в условно 10 000 циклов для TLC, то одна перезапись таблицы в день тоже даст хороший для меня ресурс в 10 000 дней... но здесь я не уверен, т.к. не знаю как происходит процесс обновления этой таблицы разделов, если при каждом flush, то да дело труба и флешка умрет за нескольков десятков дней...
 
  • Лойс +1
Реакции: ТехнарьКто

Bruzzer

★★★✩✩✩✩
23 Май 2020
472
134
@alfacnc,
До этого, я сталкивался с вопросом прямой записи Arduino на SD, когда авторы хотели уменьшить задержки вносимые файловой системой в процесс записи, при этом сохранив возможность копирования на ПК штатными средствами. Один из вариантов было создание большого файла с ячейками данных в стертом состоянии, и потом прямая запись по секторам в этот файл. Если файл текстовый, то 0xFF признак конца файла. Если файл бинарный, то нужны дополнительные проверки, но больших сложностей нет.
Нужно ли это в плане ресурса, или он и так достаточен, или контроллеры все делают за нас, не знаю.
 
Изменено:

ТехнарьКто

★★★★★✩✩
13 Янв 2020
270
438
Даже если принять тотальное выжигание FATом "транзисторов на месте расположения таблицы разделов" с ограничением в условно 10 000 циклов для TLC, то одна перезапись таблицы в день тоже даст хороший для меня ресурс в 10 000 дней
На форуме ардуино.ру Вам дали дельный совет. И поскольку теперь Вы знаете, что количество циклов перезаписи зависит от типа контроллера SD и того, каким образом будете хранить информацию на SD. 10 000 дней это несколько оптимистичный прогноз. В реальности будет меньше.

Все завязано на прибыль, как и в любом бизнесе. Стоимость полупроводников пропорциональна размеру кристалла. Уменьшение габаритов позволяет производителям получать из одной вафли больше кристаллов, что снижает их стоимость.
техпроцессы.png
Больше транзисторов на каждый кристалл при том же размере дает больше Gbit на вафлю. В отличие от техпроцесса, плотность в технических характеристиках редко указывают, но в специализированных обзорах ее можно найти. NAND хранит данные в массиве ячеек памяти, представляющих собой транзисторы с плавающим затвором.
упрощенная схемаpng.png

Для программирования ячейки напряжение подается на управляющий затвор, что притягивает электроны вверх. Создается электрическое поле, позволяющее электронам проникнуть сквозь барьер из оксида к плавающему затвору. Оксид выполняет роль изолятора, не позволяя электронам двигаться дальше сквозь плавающий затвор.

Для стирания ячейки напряжение подается с другой стороны – на канал. При этом управляющий затвор заземляется, чтобы направить электроны от плавающего затвора через оксид обратно к каналу. Со временем электрическая активность изнашивает физическую структуру ячейки, уменьшая слой оксида. Соответственно когда размер меньше, слой оксида меньше, разрушение наступает быстрее. Поэтому на более современных устройствах количество циклов перезаписи стало меньше.

Резюме

  • для сокращения расходов размер кристалла уменьшают, увеличивают плотность расположения элементов
  • программирование ячеек памяти достигается подачей напряжения, что постепенно разрушает оксид
  • с уменьшением размера кристалла оксид становится тоньше, что уменьшает количество циклов перезаписи относительно распространенной информации

Надеюсь стало понятно, почему ориентировочный срок службы у Вас завышен и в реальности будет меньше.
 
  • Лойс +1
Реакции: alfacnc

alfacnc

✩✩✩✩✩✩✩
7 Июл 2023
4
1
@ТехнарьКто,

Ну так то я выпускник Электротехнического Факультета Московского Энергетического Института по специальности Электроника и микроэлектроника и как устроен полевой транзистор знаю))) спасибо за ликбез...

Переформулирую свой вопрос по другому.
На сколько хватит ресурса типовой современной SD карты объёмом 32Гб при записи на неё раз в день (один лог файл) данных в размере 40 байт с частотой обновления этого файла (через flush) 1 раз в секунду. Количество обновлений 10 000, общий объём файла 400кб в день.
Сколько дней проживет SD карта?
 
Изменено: