SD-карта не смогла инициализироваться

У меня есть плата Pro Micro, и я пытаюсь составить список моих файлов, как в примере с Arduino IDE. Я использую следующие контакты:

board    micro sd module
   D4  ---> CS
   D15 ---> SCK
   D14 ---> MISO
   D16 ---> MOSI
   GND ---> GND
   VCC ---> VCC

На последовательном мониторе появляется сообщение «Ошибка инициализации».

Что не так с моей настройкой?

Это работающий код:

#include <SPI.h>
#include <SD.h>

File root;

void setup() {
  // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта. Требуется только для собственного порта USB
  }

  Serial.print("Initializing SD card...");

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");

  root = SD.open("/");

  printDirectory(root, 0);

  Serial.println("done!");
}

void loop() {
  // после завершения установки ничего не происходит.
}

void printDirectory(File dir, int numTabs) {
  while (true) {

    File entry =  dir.openNextFile();
    if (! entry) {
      // больше нет файлов
      break;
    }
    for (uint8_t i = 0; i < numTabs; i++) {
      Serial.print('\t');
    }
    Serial.print(entry.name());
    if (entry.isDirectory()) {
      Serial.println("/");
      printDirectory(entry, numTabs + 1);
    } else {
      // у файлов есть размеры, у каталогов нет
      Serial.print("\t\t");
      Serial.println(entry.size(), DEC);
    }
    entry.close();
  }
}

А это моя проводка:

, 👍1

Обсуждение

Пожалуйста, добавьте свой код., @Michel Keijzers

возможно, ваша программа состоит только из этих двух команд..... Serial.begin(9600); Serial.println("инициализация не удалась"); ..... это даст вам наблюдаемый результат, @jsotola

ты карту вставил?, @Juraj

какое напряжение на плате и модуле SD?, @Juraj

@jsotola Я изучаю информатику, чувак, это не одна из моих возможных ошибок. Но спасибо за ваш комментарий, @George Sp

@Юрай Да, я вставил карту. Как посмотреть напряжения?, @George Sp

в спецификации. pro micro — 5 В или 3,3 В. Модули SD-карт имеют преобразование напряжения до 5 В или только держатель для SD-карты с собственным напряжением 3,3 В., @Juraj

То есть напряжения в порядке? Я подключаю его к компьютеру через USB. Как я могу посмотреть на это дальше? Я уверен, что это уже должно было сработать., @George Sp

@MichelKeijzers Да, есть предположения?, @George Sp

подключение к USB ничего не говорит о напряжении. добавьте ссылки на то, где вы их купили, если не знаете характеристики, @Juraj

И плату, и модуль я купил давно на Ebay. Модуль от Catalex и имеет версию v1.0. Моя SD-карта стандартная (Kingston 4 ГБ), а модуль, наверное, самый дешевый Pro Micro на ebay., @George Sp

Модуль Catalex SD рассчитан на напряжение 5 В. На pro micro вы можете измерить напряжение на выводе OUTPUT HIGH., @Juraj

Как мне это сделать?, @George Sp

SD-карта отформатирована в FAT или FAT32?, @Juraj

Я не уверен. Может ли это быть проблемой?, @George Sp

это определенно будет проблемой. вставь карту в комп и проверь, @Juraj

Я уверен, что это была NTFS, сейчас форматирую ее в FAT. Но это должна быть проблема на уровне программного обеспечения, не так ли? Из-за моего эскиза кажется, что он не запускается, @George Sp

есть ли у вас вольтметр/мультиметр для измерения напряжения VCC или контакта?, @Juraj

Нет, не сейчас. Я заказал мультиметр, но он еще не пришел., @George Sp

что-то написано на нижней стороне pro micro?, @Juraj

Давайте [продолжим обсуждение в чате](https://chat.stackexchange.com/rooms/85130/discussion-between-george-sp-and-juraj)., @George Sp

Я бы подумал только о том, чтобы вставить SD-карту, используя карту, отформатированную в FAT (не NTFS), и, при необходимости, попробовать другую SD-карту (у меня возникли проблемы в зависимости от SD-карты). Также я бы посоветовал купить (около 5 долларов) логический анализатор на Ebay, чтобы вы могли относительно легко узнать, что происходит через перемычки., @Michel Keijzers

@MichelKeijzers, прочитай финал чата, @Juraj


2 ответа


Лучший ответ:

1

Библиотека SD работает только с форматами FAT и FAT32. SD.begin() считывает «тома диска» и открывает корневую папку. Если карта не отформатирована или отформатирована с использованием другого стандарта файловой системы, функция Begin() завершается неудачей.

РЕДАКТИРОВАНИЕ: разъемы контактов должны быть припаяны

,

Да, я понял. Я только что отформатировал его в FAT32, и он тоже не работал. Что еще это может быть?, @George Sp


0

Вот мой код настройки SD-карты для небольшой схемы, в которой я записывал на карту данные о температуре.

const int SD_CS = 10;
   const long SLEEP_TIME = 60000;  // запись на карту каждую минуту
   long multiplier = 0;

   LiquidCrystal_I2C lcd(0x3F, 20, 4);

   void setup() {

     lcd.begin();
     lcd.setCursor(2,0);
     lcd.print("Hello, LCD!");  

     if (SD.begin(SD_CS)) { // инициализация SD
       lcd.setCursor(2,2);
       lcd.print("SD card init");
     }

 }

Я установил контакт CS на D10.
Попробуйте переключить его на другой контакт вот так и посмотрите, получите ли вы другой результат. Кажется, у меня возникла проблема, когда я использовал контакт 4, но не могу точно вспомнить.

Примечание. И, конечно же, не забудьте подключить провод CS к контакту D10 или к тому, который вы используете.

,

проблема раскрывается в чате, @Juraj

@Juraj Разъёмы не припаяны! Угу! Я давно задал соответствующий вопрос по этому поводу - https://electronics.stackexchange.com/questions/249140/how-can-i-make-connection-on-pcb-circuit-board-holes-without-solder-for. -прото Отличный улов!, @raddevus