Почему я не могу инициализировать 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
.
@Noajm IsMy Name, 👍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
- Как увеличить скорость записи на SD-карту в Ардуино
- ESP32 сохранение данных на SD-карту в формате .csv не форматируется правильно
- Как удалить содержимое SD-карты в ардуино?
- Использовать карту Micro SD для регистрации данных — плохая идея? Надежно?
- Конфликт между шилдом SD-карты и акселерометром
- ЭБР. Можно ли создать несколько таблиц с помощью db.create()?
- Запись на SD-карту с частотой дискретизации 50 мс или меньше? У меня есть скетч, который записывает в sd каждую 1 секунду, но застревает на более высоких частотах дискретизации. Пожалуйста помоги?
- Стремясь записать тонну информации на SD-карту как можно ближе к жизни, насколько это возможно
выглядит все ок. проверить пайку контактов 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