Изменение файловых атрибутов даты-времени при создании/корректировке файлов на SD-карте
- Войдите на сайт для отправки комментариев
В процессе работы с записью данных на SD-карту (Arduino Mega 2560 + Ethernet Shield) понадобилось устанавливать файловые атрибуты, связанные с датой-временем, которые в обычном случае жестко устанавливаются в 01.01.2000 01:00.
Беглое ознакомление с библиотеками показало, что в libraries\SD\utility\SdFat.h наличествуют функции класса SdFile: timestamp и sync , позволяющие работать с файловыми атрибутами
Данные функции использовались в решении, описанном тут: http://forums.adafruit.com/viewtopic.php?f=31&t=20355
Не могли бы участники форума опубликовать пример установки атрибутов даты-времени для файлов, обрабатываемых скетчем, использующем стандартную библиотеку SD?
Предположительно, это могло бы выглядеть как-то так.
#include <SD.h> #include <Time.h> ... SD.begin() ... File file = SD.open("filename.txt", FILE_WRITE ); ... file.print("12345"); ... boolean T_C = file.timestamp( T_CREATE, year(), month(), day(), hour(), minute(), second() ); ... file.sync(); ... SD.close();
Данная схема, кстати, неверна, т.к. функции-методы timestamp , sync принадлежат классу, отличному от SD.
Буду благодарен за работающий пример установки атрибутов даты-времени при создании, и/или корректировке файла.
Добрый вечер.
Не специалист в данном вопросе, платы Ethernet Shield у меня нет.
Поэтому рабочий пример не дам, возможно кто-то еще откинется.
Возможно ответ тут, взял из кеша гугола.
http://webcache.googleusercontent.com/search?q=cache:IsnxaGOOBwIJ:forums.adafruit.com/viewtopic.php%3Ff%3D31%26t%3D20355+SdFat+set+the+date&cd=1&hl=ru&ct=clnk&gl=ru
Там Fat16, как я понял это маленькая библиотека, огрызок от SdFat.
Тут посдсмотрел, как работает, без лишнего кода.
http://arduino.cc/forum/index.php?topic=116510.0
Возможно решение будет примерно таким, но....
Внимание, прежде чем запускать, нужно убедиться, что у вас именно 10 пин, осуществляет работу с SD.
Я плохо знаю сам Arduino, поэтому не подскажу какой именно у вас порт, в примере 10, но не факт, что у вас такой же.
Применое решение.
Дополнение
Да надо скачать библиотеку
sdfatlib20120719.zip http://code.google.com/p/sdfatlib/downloads/list.
Только, что увидел, есть официальный пример.
sdfatlib20121219\SdFat\examples\Timestamp
Artur1985, огромное Вам спасибо! Буду осваивать матчасть.
(пример с Fat16 видел, тупое скрещивание стоковой SD и Fat16 мне не помогло; зато теперь есть обильная пища для ума и рук)
Не за что, если используйте какие-то внешние библиотеки, смотрите последние версии.
И примеры, они или на сайте разработчика или внутри папки с библиотекой.
Хочу распросить вас о связке Arduino Mega 2560 + Ethernet Shield, у моего знакомого проблема с Ethernet Shield.
Поэтому себе не покупал.
Какая у вас плата, оригинал или нет?
Вы пробовали работу сети?
И как вы подключали плату, просто вставили и все?
Может ему достался не удачный экземпляр.
Сорри за задержку с ответом, не заметил Ваш вопрос.
У меня не оригинальная Мега, а отечественный клон Freeduino Mega 2560 http://mk90.ru/store/ru/microcontrollers/50-freeduino-mega-2560.html
Сетевой шилд http://mk90.ru/store/ru/shields/4-ethernet-shield.html оттуда же.
Использую несколько пар Мега+Шилд, в одном случае Мега версии 2.0.0, в остальных 3.0.0 (особеннности национального ардуиностроения: требуется установить оригинальный драйвер, плата поставляется вместе с драйверами семейства Freeduino). Схемотехника незначительно изменена в лучшую сторону по сравнению с оригиналом: применены кварцы и более стабильная частотозадающая цепь.
На Мега+Шилд реализован веб-клиент, он же веб-сервер.
У шилда есть особенность, связанная общим управлением кардридером и сетевой частью и тем, что у меги и у остальных Ардуин в этой части различная распиновка (53 и 10 пины соответственно). Поэтому, опуская детали, следует явно устанавливать режим работы с сетевым интерфейсом и с кардридером
или
Если этого не делать, дребезг на неустановленных пинах приводит к спорадическим зависаниям устройства.
ПС
Для работы с картой я использовал стандартную библиотеку SD и удивлялся ее ограниченной функциональности иобилием используемых в официальных примерах недокументированных возможностей. В противоположность ей, SdFat отлично документирована и полнофункциональна. Но протестировать ее работу вместе с сетевой частью я еще не успел, так что о стабильности работы сетевого и карточного интерфейсов говорить с уверенностью не могу, хотя и предполагаю, что проблемы маловероятны.
День добрый.
>> Сорри за задержку с ответом, не заметил Ваш вопрос.
Бывает.
Спасибо за подробное разъяснение.
Надо будет, присмотрится к Freeduino.
Цена приятная, сетевая почти в 2 раза дешевле, да и мега.
Конечно, это не ebay, но последняя доставка не дошла, да и ждать месяц.
У меня оригинальные меги у друга тоже и сетевой.
Теперь сетевой достался мне, он не такой упорный:), но увы пока не пашет.
Код который вы указали, пробовал.
Пациент скорее мертв, чем жив.
Пингуется, глазками моргает, но не пашет.
Буду воевать с ней.
>> Но протестировать ее работу вместе с сетевой частью я еще не успел
Одновременно они не работают, но можно переключать как у вас в коде.
Еще раз спасибо.
И удачи!
Всем привет!Столкунулся с такой же проблемой,но ничего не понял,что написали выше.Как то строанно,что такой важной функции как установка атрибутов даты и времени для файлов отсутствует в стандартной библиотеке для работы с SD.Ковыряя библиотеку SD обнаружил в файле SdFat.h константы установки даты и времени по умолчанию FAT_DEFAULT_DATE и FAT_DEFAULT_TIME,может быть можно как то прикрутить к этому файлу использование данных с библиотеки часов например из этой ds3231.Прошу помощи у знатоков которые смоглибы использовать в библиотеке данные, полученные из другой библиотеке.
Исходные данные:
Используем SD и RTC (ну и Wire для RTC)
План реализации:
Пишем callback-функцию дату-время и подсовываем её SD.
Реализация:
Источник: первая ссылка Гугла "arduino sd file date time".
Вроде компилится. Моя Arduin-ка только едет ко мне, так что мне проверить не на чем. Может протестит кто?
Проверил ,работает,но у меня другая библиотека для работы с часами 3231,пришлось немного подправить представленный код за который вам огромное спасибо.Вот что у меня получилось при работе с библиотекой DS3231
Проверил ,работает
Спасибо за тест! DS3231 тоже едет :)) Так заберу Ваш проверенный код к себе в копилку.
у меня заработало но может что не такили библиотек нету