Подключение модуля microSD к Arduino

Карта памяти по SPI

Модуль microSD к Arduino Uno и Nano по SPI: MOSI на D11, MISO на D12, SCK на D13, CS на D10, питание 5 В. Модуль со стабилизатором и делителями сам согласует уровни.

Схема подключения модуля microSD к Arduino

Модуль microSDArduino Uno
CSD10
MISOD12
MOSID11
SCKD13
VCC5V
GNDGND

Схема из примера «Arduino Uno: журнал на карту SD».

Arduino Uno: журнал на карту SD

Открыть пример целиком

Выводы Модуль microSD

ВыводНазначение
CSвыбор карты
MISOданные от карты
MOSIданные к карте
SCKтактовый сигнал
VCCпитание
GNDобщий провод

Код для Arduino

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

// Карта SD на аппаратном SPI: 11, 12, 13 и выбор на 10.
//
// Три отличия от ESP32, о которые спотыкаются при переносе.
//
// **Выводы шины другие** и не выбираются: у Uno это 11 и 13, MISO на
// 12. На ESP32 те же роли на 23, 19 и 18.
//
// **Имена файлов только короткие**, восемь знаков плюс три на
// расширение. Библиотека для AVR длинных не знает: SD.open("data.log")
// откроет не то, что вы думаете, а SD.open("измерения.txt") не откроет
// ничего. Только латиница и только 8.3.
//
// **Памяти впритык.** Библиотека держит буфер сектора — 512 байт, ещё
// четверть оперативной памяти платы. Вместе с экраном OLED они на Uno
// уже не помещаются.
//
// На карте в модели уже лежит README.TXT — с него и начнём.

const int CS = 10;

void setup() {
  Serial.begin(9600);
  delay(200);

  if (!SD.begin(CS)) {
    Serial.println(F("карта не найдена: проверьте CS, MISO и питание"));
    return;
  }
  Serial.println(F("карта на месте"));

  // Что на ней лежит.
  File root = SD.open("/");
  for (File f = root.openNextFile(); f; f = root.openNextFile()) {
    Serial.print(F("  "));
    Serial.print(f.name());
    Serial.print(F("  "));
    Serial.print(f.size());
    Serial.println(F(" байт"));
    f.close();
  }

  // Читаем готовый файл.
  File readme = SD.open("README.TXT");
  if (readme) {
    while (readme.available()) Serial.write(readme.read());
    readme.close();
  }
}

void loop() {
  // Дописываем строку в журнал. Файл открывается и закрывается на
  // каждую запись намеренно: карту вынимают без предупреждения, а
  // закрытый файл переживёт это, незакрытый — нет.
  File log = SD.open("LOG.TXT", FILE_WRITE);
  if (log) {
    log.print(millis() / 1000);
    log.println(F(" c работы"));
    log.close();
    Serial.println(F("строка записана в LOG.TXT"));
  } else {
    Serial.println(F("не открылся LOG.TXT"));
  }

  delay(5000);
}

Скетч можно править и запускать в симуляторе без платы и установки среды.

Что учесть на Arduino

Частые ошибки при подключении к Arduino

Другие детали для Arduino