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

нужен легкосъемный носитель для переноса данных на комп и построения графиков, согласен не самое элегантное решение в наше время, но пока только так

Если переносить на комп, то без файловой системы не обойтись. Можно копить данные в памяти и по одному-два кб (в зависимости от МК и размера ОЗУ) и записывать на карту в файл соответствующего размера.

Или прицепить FRAM, накапливать 40*3600 байт и записывать раз в час на SD…

2 лайка

Согласен, причем ОЗУ можно расширить до 512кб и кидать все за раз в конце процесса, что бы лишний раз не отвлекать МК от считывания показаний.
Но у меня остались вопросы чисто для закрытия пробелов в знаниях:

  • 100к циклов перезаписи SD это для ячейки или всю карту забить надо?
    (думаю для ячейки)
  • можно ли последовательно писать в FAT систему SD карты?

Есть SD карты с увеличенным ресурсом, для камер, регистраторов.
Типа: Samsung PRO Endurance.
У меня в Распбери такая стоит логи пишутся постоянно, проблем пока нет, уже несколько лет.

2 лайка

какая у вас частота записи?

Если вы пишете в длинный файл последовательно, а не перезаписываете одну и ту же запись - это и будет последовательное заполнение карты. И не надо тут ничего выдумывать.

А зачем вам его закрывать-открывать раз в секунду. Открыли и пишите. Просто делайте сброс данных в файл командой flush вот и все

3 лайка

мир удивителен всё таки, даже студенты уже пишут и работают с базой

да так и есть, открываю в начале цикла новый файл и в него командой flush каждую секунду добавляю новые данные…

однако усомнился не изнашиваю ли я SD карту таким частым обновлением… отсюда и посыпались вопросики

У меня на Распбери висит устройство подключенное по модбас, оно опрашивается каждые 300мс, результат пишится в лог.

1 лайк

обнадеживает )

согласен, что SD карта не самое элегантное решение, однако организовать wifi веб-сервер пока нет возможности, запись на SD это пробный шар для понимания нужно ли вообще это логгирование

Когда я искал проблему и мне понадобился лог - сделал через UART сразу в EXCEL с графиками … голыми жаркими бабами и блекджеком …

вот,вот… опишите, что вы логируете и зачем, я уверен найдется сто писят способов оптимизировать задачу, усреднять, хранить приращения и т.д.

1 лайк

PLX-DAQ?

Strokereader

не спорю сколько людей столько и мнений (решений),
задача простая есть установка, с её вольтметров, амперметров и всяких датчиков надо зафиксировать данные, что бы оптимизировать процесс и воспроизводимость результатов… этап пуско-наладки, сейчас процесс мониторим через ком-порт и параллельно пишем

в дальнейшем когда все прикатается если будет необходимость в тотальном контроле сделаем веб-сервер или просто оставим SD карту в качестве “черного ящика”

Точно так же, как и на любом другом компьютере. Т.е. слово “Ардуино” в Вашем вопросе лишнее.
Для этого Вам надо отказаться от файловой системы и работать с картой напрямую - посекторно.

Открытия - нет.
Закрытия, если перед этим Вы что-то записывали в файл, - да. Причем, далеко не факт, что закрытие файла это “перезапись” в количестве одной штуки: при закрытии может перезаписываться сразу несколько секторов.

В принципе - да.
Но, увы, здесь следует учитывать множество различных обстоятельств, некоторые из которых нам неизвестны.
Например, известно, что самая часто перезаписываемая область карты - это служебная область, в которой размещена FAT. Известно это и разработчику SD. Поэтому весьма вероятно, что разработчик сам предусмотрел “ротацию” секторов, содержащих FAT, для предотвращения ее преждевременного износа. Но что здесь и как - нам доподлинно неизвестно.
Есть и известные вещи. Например то, что, если мы не закрываем файл, то физически запись на карту по 40 байт не происходит. Драйвер SD сам накапливает данные, пока они не достигнут размера одного сектора и только после этого одномоментно записывает весь сектор.

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

2 лайка

команда flush является командой закрытия файла?

использую Adafruit Data Logger
Shield Code Walkthrough | Adafruit Data Logger Shield | Adafruit Learning System
в предлагаемом ими коде в setup открывается новый файл для записи, а далее в loop они его обновляют через flush, считается ли это закрытием файла?
и далее в коде они нигде его не закрывают командой close.file

видео про данный модуль на русском https://www.youtube.com/watch?v=n5cEmkWxuYc&list=PLxAqDYpncMVlo-UkQqtWE7Fo9JtYIWE6d&index=53&t=505s&ab_channel=КитайскиеГАДЖЕТЫ

flush() делает то же самое, что и close(), но не уничтожает хэндл файла.

Что Вы подразумеваете под словом “считается”?
На мой взгляд, вопрос в том, происходит при этом запись на карту или нет. (вне зависимости от того, кто что считает)
Это можно выяснить, минимум, двумя способами:

  1. Посмотреть исходники используемой библиотеки.
  2. Измерить время выполнения команды.

Уж коль скоро у Вас появляются вопросы, учитесь искать ответы на них самостоятельно.