Общее описание конструкции:
Есть ATmega328P-PU c загрузчиком ARDUINO. MicroSD card adapter от CATALEX ver. 1.0 11/01/2013. Вся конструкция собрана на макетной плате. Схему прикрепил.
Общая идея: микроконтроллер включает питание SD карты, производит запись, выключает питание SD карты.
Проблема: Первый запуск проходит нормально. Но после того как ATmega выключает, включает питание SD, происходит или зависание на этапе инициализации или делает вид, что записывает, но при проверке данных в файле нет.
Вариант кода № 1:
#include
#include
File myFile;
void setup(void) {
Serial.begin(115200);
pinMode(10, OUTPUT);
if (!SD.begin(10)) { digitalWrite(9, HIGH); return; }
}
void loop(void) {
digitalWrite(8, HIGH);rawd();digitalWrite(8, LOW);
delay(5000);}
void rawd () {
myFile = SD.open("sdcard.txt", FILE_WRITE);
if (myFile) {
myFile.print("&TEST1&");
Serial.print("&TEST1&");
myFile.print("&TEST2&");
Serial.print("&TEST2&");
myFile.print("&TEST3&");
Serial.print("&TEST3&");
Serial.println("");
myFile.println("");
myFile.close();}
else {digitalWrite(9, HIGH);}}
Никак не управляем процессом взаимодействия с SD картой, только включаем и выключаем питание MicroSD card adapter. Начинает медленно записывать на SD карту, но на самом деле ничего не пишет.
Вариант кода № 2:
#include
#include
File myFile;
void setup(void) {
Serial.begin(115200);
pinMode(10, OUTPUT);
if (!SD.begin(10)) { digitalWrite(9, HIGH); return; }
}
void loop(void) {
digitalWrite(8, HIGH);rawd();digitalWrite(8, LOW);
delay(5000);}
void rawd () {
digitalWrite(10, LOW);
myFile = SD.open("sdcard.txt", FILE_WRITE);
if (myFile) {
myFile.print("&TEST1&");
Serial.print("&TEST1&");
myFile.print("&TEST2&");
Serial.print("&TEST2&");
myFile.print("&TEST3&");
Serial.print("&TEST3&");
Serial.println("");
myFile.println("");
myFile.close();
digitalWrite(10, HIGH);
}
else {digitalWrite(9, HIGH);}}
Пытаемся отключить SD карту после завершения записи. Или вообще зависает или не пишет на SD карту.
Вариант кода № 3:
#include
#include
File myFile;
void setup(void) {
Serial.begin(115200);
pinMode(10, OUTPUT);
}
void loop(void) {
digitalWrite(8, HIGH);rawd();digitalWrite(8, LOW);
delay(5000);}
void rawd () {
while(!SD.begin(10)) {digitalWrite(9, HIGH);delay(100);Serial.print(".");}
myFile = SD.open("sdcard.txt", FILE_WRITE);
if (myFile) {
myFile.print("&TEST1&");
Serial.print("&TEST1&");
myFile.print("&TEST2&");
Serial.print("&TEST2&");
myFile.print("&TEST3&");
Serial.print("&TEST3&");
Serial.println("");
myFile.println("");
myFile.close();
digitalWrite(10, HIGH);
}
else {digitalWrite(9, HIGH);}}
Инициализируем SD каждый раз как собираемся писать. Но во второй раз зависаем в цикле в связи с тем, что не удаётся инициализировать SD. Самое странное, что первый раз все нормально проходит, проблема возникает при повторении действия.
Скорее всего, я не правильно отключаю SD карту, но я не смог найти примеров как это правильно делается. Как вообще организуется извлечение SD карты без отключения питания всей конструкции?