SD карта, инициализация, проверка доступности.
- Войдите на сайт для отправки комментариев
Ср, 17/06/2015 - 10:46
День добрый!
У меня есть кардридер SD карт в нем карта на 4Gb и Arduino MEGA. Используется стандартная библиотека SD из IDE. Работают замечательно. На карту пишется статистика с датчиков. Переодически достаю карту и сбрасываю данные на компьютер.
И вот тут мне было бы интересно как более првильно обрабатывать отсутствтие карты в картридере. Так как никаких механических дасчиков наличия/отсутствия карыт у картридере нет, а так же в библиотеке SD тоже нет ничего похожего, то достаточно ли будет перед записью данных на карту провериять откликается карта или нет?
if (!SD.begin(53)) {
Serial.println("SD card failed!");
digitalWrite(ERRLED_PIN, HIGH);
return;
}
digitalWrite(ERRLED_PIN, LOW);
Serial.println("DC card OK");
// пишем данные с датчиков
И интерсно так же как правильно инициализировать SD карту
Достаточно ли только
SD.begin(53)
Или надо так
#include <SPI.h>
#include <SD.h>
// переменные для работы с картой памяти
Sd2Card card;
SdVolume volume;
SdFile root;
void setup()
{
Serial.begin(9600);
Serial.print("\nInitializing SD card...");
digitalWrite(ERRLED_PIN, LOW);
// Инициализируем карту
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println("SD card init error");
digitalWrite(ERRLED_PIN, HIGH);
return;
} else {
Serial.println("SD card init OK");
}
// Открываем раздел.
if (!volume.init(card)) {
Serial.println("SD card don't have FAT16/FAT32 partition");
digitalWrite(ERRLED_PIN, HIGH);
return;
}
}
void loop(void) {
}
myFile = SD.open(nameFile, FILE_READ); if(myFile.read() == -1) Serial.println("No card"); else myFile.close();myFile = SD.open(nameFile, FILE_READ); if(myFile.read() == -1) Serial.println("No card"); else myFile.close();В данном случае просто может не быть файла с таким именем.
Например у меня данные пишутся в файлы с ограничением по размеру в 200кб, именуются как DATA0001.CSV и далее по порядку номера идут. Как только Файл переполняется то создаем следующий.
При старте системы ищем последний файл, и открываем его, Но например последний это DATA0099.CSV и мы будем открывать DATA0100.CSV а его нет. Это не значит что нет карты.
Хотя возможно вы и правы. В алгоритме у меня файл создается при определенных условиях а потом уже открывается, и если его невозможно открыть значит проблемы с картой.
Спасибо за ответ. Попробую сделать контроль таким образом.
myFile = SD.open(nameFile, FILE_READ); if(myFile.read() == -1) Serial.println("No card"); else myFile.close();В данном случае просто может не быть файла с таким именем.
Например у меня данные пишутся в файлы с ограничением по размеру в 200кб, именуются как DATA0001.CSV и далее по порядку номера идут. Как только Файл переполняется то создаем следующий.
При старте системы ищем последний файл, и открываем его, Но например последний это DATA0099.CSV и мы будем открывать DATA0100.CSV а его нет. Это не значит что нет карты.
Хотя возможно вы и правы. В алгоритме у меня файл создается при определенных условиях а потом уже открывается, и если его невозможно открыть значит проблемы с картой.
Спасибо за ответ. Попробую сделать контроль таким образом.
Андрей а не расскажешь как запустил карту на меге ... читаю щас что и куда....но блин сленга куча или описано не совсем ясно ...
на унке работает прекрасно, подцепил к меге с 50 порта... в библиотеке порты поменял ... щас смотрю что дальше..
можете не отвлекаться разобрался ) ...