Guide to SD Card Module with Arduino

In this post we’re going to show you how to use an SD card module with Arduino to read and write files on an SD card.

For an Arduino project with the SD card module read our blog post: Arduino temperature data logger with SD card.

Introducing the SD Card module

The SD card module is specially useful for projects that require data logging.

The Arduino can create a file in an SD card to write and save data using the SD library.

There are different models from different suppliers, but they all work in a similar way, using the SPI communication protocol. The module used in this tutorial is the one shown in figure below (front and back view).

This module works with micro SD card.

Where to buy?

The SD card module is a very cheap and you can find one for approximately $1 – check prices on Maker Advisor.

Pin wiring

The table below shows how you should wire the SD card module to your Arduino

SD card module  Wiring to Arduino Uno Wiring to Arduino Mega
VCC 3.3V or 5V (check module’s datasheet) 3.3V or 5V (check module’s datasheet)
CS 4 53
MOSI 11 51
CLK 13 52
MISO 12 50
GND GND GND

Note: different Arduino boards have different SPI pins. If you’re using another Arduino board, check the Arduino official documentation.

Preparing the SD card

The first step when using the SD card module with Arduino is formatting the SD card as FAT16 or FAT32. Follow the instructions below.

1) To format the SD card, insert it in your computer. Go to My Computer and right click on the SD card. Select Format as shown in figure below.

2) A new window pops up. Select FAT32, press Start to initialize the formatting process and follow the onscreen instructions.

Testing the SD card module

Insert the formatted SD card in the SD card module.

Connect the SD card module to the Arduino as shown in the circuit schematics below or check Pin Wiring in previous section.

Note: depending on the module you’re using, the pins may be in a different order.

Code – CardInfo

To make sure everything is wired correctly and the SD card is working properly, in the Arduino IDE window go to File> Examples > SD > CardInfo.

Upload the code to your Arduino board. Make sure you have the right board and COM port selected.

Open the Serial Monitor at a baud rate of 9600 and you should see your SD card information.

If everything is working properly you’ll see a similar message on the serial monitor.

Read and write to the SD card

The SD library provides useful functions for easily write in and read from the SD card.

To write and read from the SD card, first you need to include the SPI and SD libraries:

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

You also have to initialize the SD card module at the Chip Select (CS) pin – in our case, pin 4.

SD.begin(4);

To open a new file in the SD card, you need to create a file object that refers to your data file. For example:

dataFile = SD.open("data.txt", FILE_WRITE);

The first parameter of this function is the name of the file, data.txt, and the FILE_WRITE argument enables you to read and write into the file.

This line of code creates a file called data.txt on your SD card. If the data.txt file already exists,  Arduino will open the file instead of creating another one.

To write data to the currently open file, you use:

dataFile.write(data);

In which the dataFile is the file object created previously and the data is what you want to write in the file.

You can also use the print() or println() functions to print data into the file:

dataFile.print(data);
dataFile.println(data); // followed by a new line

To read the data saved on your file:

dataFile.read();

You can only write within a file at once, so you need to close a file before proceeding to the next one. To close the data.txt file we’ve just created:

SD.close("data.txt");

The argument of this function is the file you want to close, in this case data.txt.

For a complete sketch on how to read and write, in your Arduino IDE go to File> Examples > SD > ReadWrite.

Wrapping up

This was just a quick introduction to the SD card module with the Arduino.

Make sure you check the following blog post for a data logging project example using the SD card module with Arduino: Arduino temperature data logger with SD card. In that project we save temperature readings on an SD card with time stamps using the DS18B20 temperature sensor and the RTC module.

If you like Arduino projects, make sure you check our latest Arduino course: Arduino Step-by-step Projects – Build 23 Projects

We hope you’ve found this guide useful.

Thanks for reading.


Learn how to program and build projects with the ESP32 and ESP8266 using MicroPython firmware DOWNLOAD »

Learn how to program and build projects with the ESP32 and ESP8266 using MicroPython firmware DOWNLOAD »


Enjoyed this project? Stay updated by subscribing our weekly newsletter!

18 thoughts on “Guide to SD Card Module with Arduino”

  1. Thank you for sharing a very useful Project.
    How easy or difficult ist it to save GPS data the same way ?
    NMEA coming in via Serial saving data every 15 Seconds. Time can be taken from the NMEA string so no RTC is needed.

    • Hi Nils.

      Thanks for your support.
      We don’t have a particular project for saving GPS data on an SD card, but I think you can apply the concepts learned in this post to do that.
      Then, let us know how you did.
      Regards.

  2. I’ve managed to do this correctly. Now I have another answer, how do I erase the existing file and create a new one with the same name each time I reset the Arduino? Because each time I reset the Arduino, it will open the existing file again, and write on it, leaving every old information in the file. I don’t want this. I would want it to clean the file and start all over. Is this possible?

    • Hi Jose.
      I haven’t tested that. But I think here’s the solution for your problem.
      In the setup(), after checking the file you want to delete exists with SD.exists(“yourfilename”), delete the file from the card with SD.remove(“yourfilename”).
      I hope this helps. Thanks.

  3. Tried integrating the SD module (using stock SD lib) with my ILS (using UCGLIB) display, but somehow they conflict in the common MISO line. Each module functions perfectly by its own, but once I wire them together (except for the SS line), the SD card is not detected, and the display turns blank.

    I’m trying to get alternate libraries, just in case it is not HARDWARE related. Still no luck. 🙁

  4. Hello, nice project
    I have a question
    If you connect a 3.3V SD module to Arduino, data from SPI bus will be from 0 to 3.3 V. What about the 0 to 5 V for logic levels in Arduino UNO or Mega????

    Thanks

  5. Hello Sarah,
    I hope it’s ok with you, but I cited this article under your name in my senior project. Thanks for the tutorial,

    Chase

Leave a Reply to mohamed hussain Cancel reply

Download our Free eBooks and Resources

Get instant access to our FREE eBooks, Resources, and Exclusive Electronics Projects by entering your email address below.