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 UnoWiring to Arduino Mega
VCC3.3V or 5V (check module’s datasheet)3.3V or 5V (check module’s datasheet)
CS453
MOSI1151
CLK1352
MISO1250
GNDGNDGND

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: 

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 build a home automation system and we’ll cover the following main subjects: Node-RED, Node-RED Dashboard, Raspberry Pi, ESP32, ESP8266, MQTT, and InfluxDB database DOWNLOAD »
Learn how to build a home automation system and we’ll cover the following main subjects: Node-RED, Node-RED Dashboard, Raspberry Pi, ESP32, ESP8266, MQTT, and InfluxDB database DOWNLOAD »

Recommended Resources

Build a Home Automation System from Scratch » With Raspberry Pi, ESP8266, Arduino, and Node-RED.

Home Automation using ESP8266 eBook and video course » Build IoT and home automation projects.

Arduino Step-by-Step Projects » Build 25 Arduino projects with our course, even with no prior experience!

What to Read Next…


Enjoyed this project? Stay updated by subscribing our newsletter!

33 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.

    Reply
    • 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.

      Reply
  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?

    Reply
    • 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.

      Reply
  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. 🙁

    Reply
  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

    Reply
  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

    Reply
  6. Hi Sara,
    I am attempting to read from one file while writing to another. SD.begin(4) succeeds, as does a subsequent SD.open(“filename.ext”, FILE_WRITE) and fileObject.close(). I’ve inserted a delay(2000) for buffers to flush then issue SD.open(“newname.txt”,FILE_READ) with a different file object, which fails. Any suggestions are appreciated.

    Reply
  7. While it appears that I can write and read using the Arduino, I fail to see the file and data when I put the card into my PC. I need to be able to create some data files using the PC and then have the Arduino read them. Isn’t this possible?

    Reply
      • Thanks for your reply Sara. I found the trouble not too long after I posted. It appears that somewhere in the past the SD card had been partitioned into two drives and when I stuck it into the PC I did not notice the first small one also coming up. I began to think that there was something different about formatting the SD cards so I loaded a free SD formatting app and it was while using that app that I saw the two drives. I formatted it into one drive and everything is now progressing. Thanks again

        Reply
  8. i am making a project that show data on 7 seg display which stored in SD card as day by day. when i make power ON to device then card initialization done & data shows correct as per date then after when i change the date SD card failed i.e. show ” error database.txt opening “.

    How can i overcome with this issue.

    Reply
  9. ” When debugging my SD Card I had a error that would put the card into a state that required the microSD card to be powered down and then powered up to work. It would work until the software error and then not work again until the power was cycled. “

    Reply
  10. data returned after the dataFile.read () function; what? I have a table of values saved as a .csv file, how can I manipulate the data by column and row?

    Reply
  11. Hia Sara,

    Thank you very much for this, it is really useful. Can you tell me please, is it possible to reassign the pins used by the SD card reader to alternative SPI connections? I am using an Arduino Mega, and while the pins you have listed work as expected, it would be very helpful if I can use other pins for CS, MOSI CLK etc. Thank you.

    kind regards – SteveS

    Reply
  12. Hi sara ,
    I want to create a project such that a new file is created for each day like Sensor_data_110623 , then the next day it’s like Sensor_data_120623 . Is it possible ?

    Reply

Leave a Comment

Download Our Free eBooks and Resources

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