SD карта, инициализация, проверка доступности.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

День добрый!

У меня есть кардридер 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) {

}
maksim
Offline
Зарегистрирован: 12.02.2012
myFile = SD.open(nameFile, FILE_READ);
if(myFile.read() == -1) Serial.println("No card");
else myFile.close();

 

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

maksim пишет:

myFile = SD.open(nameFile, FILE_READ);
if(myFile.read() == -1) Serial.println("No card");
else myFile.close();

В данном случае просто может не быть файла с таким именем.

Например у меня данные пишутся в файлы с ограничением по размеру в 200кб, именуются как DATA0001.CSV и далее по порядку номера идут. Как только Файл переполняется то создаем следующий.

При старте системы ищем последний файл, и открываем его, Но например последний это DATA0099.CSV и мы будем открывать DATA0100.CSV а его нет. Это не значит что нет карты.

Хотя возможно вы и правы. В алгоритме у меня файл создается при определенных условиях а потом уже открывается, и если его невозможно открыть значит проблемы с картой.

Спасибо за ответ. Попробую сделать контроль таким образом.

flat
Offline
Зарегистрирован: 05.02.2015

Andrey12 пишет:

maksim пишет:

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 порта... в библиотеке порты поменял ... щас смотрю что дальше.. 

flat
Offline
Зарегистрирован: 05.02.2015

можете не отвлекаться разобрался ) ...