SD-карта не инициализируется

Я знаю, что этот вопрос уже задавали на этом сайте. Однако на него так и не ответили. У меня Ардуино Уно. Я пытаюсь заставить его читать карту SDHC Micro SD объемом 2 ГБ. Проблема в том, что SD-карта никогда не инициализируется. Я не уверен, что что-то не так с проводкой (я думаю, что это НЕ проблема) или с SD-картой/экраном. Я отформатировал SD-карту, но, возможно, использовал неправильные настройки. Кроме того, эта SD-карта довольно старая, вероятно, несколько лет. Однако им все еще можно управлять на моем ПК.

Я купил следующий защитный экран Micro SD на Amazon. Он имеет контакты VCC, GND, MISO, CS. , MOSI и SCK, для которых я прикинул следующее:

MISO = D0
CS = D1
MOSI = CLK
SCK = D3

У меня схема подключена следующим образом:

SCK to Pin 10 on Arduino
CS to Pin 11 on Arduino
MISO to Pin 12 on Arduino
MOSI to Pin 13 on Arduino
VCC to 3.3V source on Arduino
GND to Arduino Ground

Изображение ниже представляет собой компиляцию щита крупным планом и моей проводки. Не то чтобы я также использовал контакт 9 на картинке. Однако это используется для другой части схемы.

Код, который я пытаюсь запустить, взят из библиотеки SdFat. Хотя на странице Amazon говорится, что устройство можно использовать без этой библиотеки, я предпочитаю ее иметь. Я запускаю пример SdInfo.ino, расположенный в SdFat/SdFat/examples/SdInfo/. Я изменил кодировку так, чтобы:

const uint8_t SD_CHIP_SELECT = 10;

Я также пытался запустить пример Basic.ino в библиотеке TMRpcm, расположенной по адресу: TMRpcm/examples/basic, но это тоже не работает. Ниже приведен код:

#include <SD.h>                      // нужно подключить библиотеку SD
//#define SD_ChipSelectPin 53 //пример использует аппаратный контакт SS 53 на Mega2560
#define SD_ChipSelectPin 10  //используя цифровой контакт 4 на arduino nano 328, можно использовать другие контакты
#include <TMRpcm.h>           // также необходимо подключить эту библиотеку...
#include <SPI.h>

TMRpcm tmrpcm;   // создаем объект для использования в этом скетче

void setup(){
  tmrpcm.speakerPin = 9; //5,6,11 или 46 на Mega, 9 на Uno, Nano и т. д.
  Serial.begin(9600);
  if (!SD.begin(SD_ChipSelectPin)) {  // смотрим, присутствует ли карта и может ли она быть инициализирована:
    Serial.println("SD fail");  
    return;   // больше ничего не делаем, если нет
  }
  tmrpcm.play("music"); // звуковой файл «музыка» будет воспроизводиться каждый раз, когда Arduino включается или сбрасывается
}

void loop(){  
  if(Serial.available()){    
    if(Serial.read() == 'p'){ //отправляем букву p через последовательный монитор, чтобы начать воспроизведение
      tmrpcm.play("music");
    }
  }
}

Короче говоря. Моя SD-карта не инициализируется, и я не могу понять, почему.

, 👍2


4 ответа


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

5

Первое, что нужно попробовать, это использовать "правильные" выводы для SPI:

SCK to Pin 10 on Arduino ---> Pin 13
CS to Pin 11 on Arduino ---> Pin 10
MISO to Pin 12 on Arduino ---> Pin 12
MOSI to Pin 13 on Arduino ---> Pin 11
VCC to 3.3V source on Arduino
GND to Arduino Ground

Попробуйте сначала и посмотрите, как у вас получится.


Кстати, просто решил упомянуть, что, вероятно, стоит просто следовать примеру Adafruit дословно, так как я предполагаю, что ваша плата очень хорошо подходит для этого урока:

https://learn.adafruit.com/adafruit-micro-sd-breakout -board-card-tutorial

удачи в освоении ;)

,

1

Эта коммутационная плата включает в себя регулятор напряжения 3,3 В и регулятор уровня. Для правильной работы он должен питаться от 5 В.

Кроме того, как отмечает @Andology: используйте правильные контакты SPI.

,

Спасибо, я сейчас на работе. Я попробую позже сегодня!, @Alex Weber


0

Если вы все проверили (подключение, правильное кодирование выводов и т. д.), И вы уже отформатировали новую карту с помощью правильного форматтера SD и/или FAT32, и она по-прежнему не работает; Я обнаружил, что на некоторых картах работает следующее: Просто создайте пустой (0 байт) файл на новой карте. Карты, которые возвращали всевозможные забавные ошибки (например, они слишком малы или просто не инициализируются), волшебным образом начинают работать!

,

0

Решение этой проблемы заключается в том, что вы должны сделать цифровой контакт 10 выходным (для работы библиотеки SD) и установить логический ВЫСОКИЙ уровень, добавив «digitalWrite(10,HIGH);». Для Arduino Mega вы должны сделать точно так же, полностью игнорируя контакт 53, хотя в комментарии вас просят изменить его на 53.

pinMode(10, ВЫХОД); // измените это значение на 53, если вы используете arduino mega
цифровая запись (10, ВЫСОКИЙ); // Добавляем эту строку

,