@livelisl
Инженер программист.

Arduino + SD card перестает записывать, после выключения, включения питания SD card?

Общее описание конструкции:
Есть ATmega328P-PU c загрузчиком ARDUINO. MicroSD card adapter от CATALEX ver. 1.0 11/01/2013. Вся конструкция собрана на макетной плате. Схему прикрепил.
bfa24b5240a048ba9617cc33c2f67a1a.png
Общая идея: микроконтроллер включает питание 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 карты без отключения питания всей конструкции?
  • Вопрос задан
  • 2102 просмотра
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
При записи в файл сама запись происходит только после команды file.flush() или file.close(). Ты посылаешь команду "записать данные" и сразу выключаешь питание. Поэтому запись и не успевает произойти.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы