Почему я не могу инициализировать Micro-SD?

Причина, по которой я купил эту плату MicroSD, заключалась в том, чтобы следовать их руководство и я использовал код рекомендации в: Файл > Пример > SD > CardInfo также были внесены небольшие изменения в код для const int chipSelect = 10;

Вот точный код, который я использую:

/*
Тест SD-карты

В этом примере показано, как использовать служебные библиотеки, на которых
Библиотека SD предназначена для получения информации о вашей SD-карте.
Очень полезно для тестирования карты, когда вы не уверены, работает она или нет.

Схема:
SD-карта подключена к шине SPI следующим образом:
** MOSI — контакт 11 на Arduino Uno/Duemilanove/Diecimila
** MISO — контакт 12 на Arduino Uno/Duemilanove/Diecimila
** CLK — контакт 13 на Arduino Uno/Duemilanove/Diecimila
** CS - зависит от вашего шилда или модуля SD-карты.
Вывод 4 используется здесь для согласованности с другими примерами Arduino.


создано 28 марта 2011 г.
Лимор Фрид
изменено 9 апреля 2012 г.
Том Айгоу
*/
// подключаем библиотеку SD:
#include <SPI.h>
#include <SD.h>

// устанавливаем переменные с помощью функций библиотеки утилит SD:
Sd2Card card;
SdVolume volume;
SdFile root;

// измените это, чтобы оно соответствовало вашему экрану SD или модулю;
// Экран Arduino Ethernet: контакт 4
// Экраны и модули Adafruit SD: контакт 10
// Экран Sparkfun SD: контакт 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 10;

void setup() {
  // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(9600);

    pinMode(10, OUTPUT); // измените это на 53 на мега (не следуйте этому!!)
    digitalWrite(10, HIGH); // Добавляем эту строку


  while (!Serial) {
    ; // ждем подключения последовательного порта. Требуется только для родного порта USB
  }


  Serial.print("\nInitializing SD card...");

  // будем использовать код инициализации из служебных библиотек
  // поскольку мы просто проверяем, работает ли карта!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    while (1);
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }

  // печатаем тип карты
  Serial.println();
  Serial.print("Card type:         ");
  switch (card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Теперь попробуем открыть "том"/"раздел" - это должна быть FAT16 или FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    while (1);
  }

  Serial.print("Clusters:          ");
  Serial.println(volume.clusterCount());
  Serial.print("Blocks x Cluster:  ");
  Serial.println(volume.blocksPerCluster());

  Serial.print("Total Blocks:      ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();

  // вывести тип и размер первого тома FAT-типа
  uint32_t volumesize;
  Serial.print("Volume type is:    FAT");
  Serial.println(volume.fatType(), DEC);

  volumesize = volume.blocksPerCluster();    // кластеры — это наборы блоков
  volumesize *= volume.clusterCount();       // у нас будет много кластеров
  volumesize /= 2;                           // Блоки SD-карты всегда имеют размер 512 байт (2 блока по 1 КБ)
  Serial.print("Volume size (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume size (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Gb):  ");
  Serial.println((float)volumesize / 1024.0);

  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);

  // список всех файлов на карте с датой и размером
  root.ls(LS_R | LS_DATE | LS_SIZE);
}

void loop(void) {
}

и это схема, которую я использовал, как они рекомендовали но последовательный монитор продолжает выводить Инициализация SD-карты... инициализация не удалась Я пробовал подключать снова и снова, но все равно получаю тот же результат.

Вот фото подключения и запуска теста. . Есть кое-что, я не уверен, что это полезно, но после того, как я загружу файл и до вывода последовательного монитора:

Initializing SD card...initialization failed. Things to check:
* is a card inserted?
* is your wiring correct?
* did you change the chipSelect pin to match your shield or module?

красный светодиод, расположенный рядом с R1 карты MicroSD, начинает мигать, и до этого вывода он мигает быстрее, чем останавливается, и я представлю этот вывод.

Вещи, которые я пробовал...

  • Другая карта
  • Без карты
  • Попробовал 3v
  • Пытался использовать контакт 4 для chipSelect

Пожалуйста, не отмечайте как дубликат, потому что я просмотрел другое и пытаюсь использовать это руководство этой компании, а также это руководство было представлено как решение для других, и здесь я его использую.

Обновление 1:

После того, как я написал этот вопрос, мне пришлось снова загрузить файл, чтобы я мог сделать снимки, когда я это сделал, на этот раз серийный монитор выводит:

23:02:10.089 -> 
23:02:10.089 -> Initializing SD card...initialization failed. Things to check:
23:02:12.106 -> * is a card inserted?
23:02:12.106 -> * is your wiring correct?
23:02:12.106 -> * did you change the chipSelect pin to match your shield or module?

Похоже, я застрял с этим, и единственное число продолжает меняться

23:11:02.769 -> 
23:11:02.769 -> Initializing SD card...initialization failed. Things to check:
23:11:04.778 -> * is a card inserted?
23:11:04.778 -> * is your wiring correct?
23:11:04.778 -> * did you change the chipSelect pin to match your shield or module?

Обновление 2:

Извините, но похоже, что эти числа приходят, потому что я по ошибке отметил поле show timestamps.

, 👍1

Обсуждение

выглядит все ок. проверить пайку контактов Nano., @Juraj

Юрай - Завтра в школе собирался попробовать соединение штифтов, надеюсь причина в нем., @Noajm IsMy Name

Также покачивайте провода в макетной плате. Иногда они не обеспечивают электрического соединения, даже если они полностью вставлены., @Gerben

Небольшой вопрос после простого просмотра поста: это более старая стандартная SDCard или одна из SDCard большой емкости, которая использует другой способ адресации внутренней памяти?, @st2000

@Juraj проверил соединения всех контактов, и они были хорошими, поэтому пайка была в порядке. Я не знаю, что мне делать дальше, @Noajm IsMy Name

@Gerben Я тоже только что попробовал это и даже сделал это снова на другом макете. Не повезло мне., @Noajm IsMy Name

@ st2000 Я новичок и не совсем уверен в этих терминах, но могу сказать вам, что купил свою «Доску для разбивки карт Micro SD» на **adafruit.com**, @Noajm IsMy Name

@Juraj Я загрузил туда два новых изображения https://imgur.com/a/B4La8kx, @Noajm IsMy Name

Я думаю, что адресация SDCard изменится примерно на 8 ГБ. Под и адрес дает вам байт. Выше и адрес дает вам блок байтов. Водители должны быть в состоянии справиться с обоими. Я думаю, что карты SDCard, использующие подход с блоком байтов, помечены как «HC». Это не имеет ничего общего с платой SDCard., @st2000


1 ответ


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

1

На фото плата Arduino Micro, а не Arduino Nano. Arduino Micro не имеет SPI на контактах 11, 12, 13. Используйте контакты MOSI, MISO и SCK.

  • MO в DI
  • ЧТО ДЕЛАТЬ
  • SCK в CLK
  • вы можете использовать любой вывод в качестве CS, только установите его в качестве параметра для SD.begin()

,

Извините, не могли бы вы объяснить еще раз! Так где же эти DI, DO и CLK расположены в моем Arduino Micro!, @Noajm IsMy Name

DI, DO и CLK находятся на модуле SD. MISO, MOSI и SCK находятся на Arduino., @Juraj

Хорошо, если это то, что вы имели в виду ** MOSI - DI - контакт 11 ** МИСО - ДО - контакт 12 ** SCK - CLK - контакт 13 ** CS - контакт 4: но инициализация все равно не удалась!, @Noajm IsMy Name

не 11, 12, 13!!! у них нет номера на Arduino Micro. только этикетки. см. изображение, которое я добавил к ответу. на вашем борту есть МО и МИ, @Juraj

Ардуино мини это не Ардуино микро, @Juraj

Я путаюсь. почему вы продолжаете редактировать старые комментарии? Просто было любопытно. к сожалению, у меня нет такого же микро, как тот, который вы разместили., @Noajm IsMy Name

см. на доске SCK находится в углу. MI — это MISO, а MO — это MOSI., @Juraj

Хорошо, я вижу редактируемую фотографию, позвольте мне применить эти изменения., @Noajm IsMy Name

Хорошо, теперь я вижу это Инициализация SD-карты... Подключение выполнено правильно, и карта присутствует., @Noajm IsMy Name

Это заставило это работать! Сделанный!, @Noajm IsMy Name