How to Interface SD card to Arduino (without SD card shield)?
Introduction
I wonder if I can interface SD card to a microcontroller without using any adapter or shield. After a quick search of SD card pinout in google, I found out that SPI is use in order to communicate with SD card. To minimize my effort, I then search for some reference and below are my tinkering with it.
So first, let me introduce myself. My name is George! Welcome to tech-to-tinker Youtube channel where technology is explored and shared.
Bill Of Materials
- Arduino Uno.
- A spare SD card you are willing to kiss goodbye :). Because you might damage it.
- Soldering iron, some soldering leads, and your soldering skills.
- Some jumper wires.
Hardware Instruction
- First, make the necessary soldering of jumper wires to the SD card. Please refer to the schematic below. You may also break out the SD card cover to expose its internal parts. This is to make soldering easier. I suggest to make the connection from inside so that you may still connect the SD card to a computer for transferring of files (please refer to what I did).
Please take note of the following:
- SD card pin 1 (C/S pin) is connected with (green) wire to Arduino Uno pin 10.
- SD card pin 2 (MOSI pin) is connected with (blue) wire to Arduino Uno pin 11.
- SD card pin 3 and pin 6 (VSS pin) is connected with (violet) wire to Arduino Uno GND pin.
- SD card pin 4 (VDD pin) is connected with (dark gray) wire to Arduino Uno +3.3V pin (but I believe you can also use 5V, but Im not sure with regards to this).
- SD card pin 5 (SCK pin) is connected with (light gray) wire to Arduino Uno pin 13.
- SD card pin 7 (MISO pin) is connected with (black) wire to Arduino Uno pin 12.
- Connect the Arduino Uno to a computer.
- Run the Arduino IDE.
- Make sure “Arduino Uno” is selected under Tools > Board.
- Check that the correct serial port is selected under Tools > Port.
- The source code is available in the Arduino IDE under Files > Examples > SD, or you may copy the source code provided below.
- If all goes well, you should be able to see something similar to above picture in your Serial Monitor.
- Enjoy.
Video Demonstration
Source Code
1/*
2 SD card test
3
4 This example shows how use the utility libraries on which the'
5 SD library is based in order to get info about your SD card.
6 Very useful for testing a card when you're not sure whether its working or not.
7
8 The circuit:
9 SD card attached to SPI bus as follows:
10 ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
11 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
12 ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
13 ** CS - depends on your SD card shield or module.
14 Pin 4 used here for consistency with other Arduino examples
15
16
17 created 28 Mar 2011
18 by Limor Fried
19 modified 9 Apr 2012
20 by Tom Igoe
21*/
22// include the SD library:
23#include <spi .h="">
24#include <sd .h="">
25
26// set up variables using the SD utility library functions:
27Sd2Card card;
28SdVolume volume;
29SdFile root;
30
31// change this to match your SD shield or module;
32// Arduino Ethernet shield: pin 4
33// Adafruit SD shields and modules: pin 10
34// Sparkfun SD shield: pin 8
35// MKRZero SD: SDCARD_SS_PIN
36const int chipSelect = 10;
37
38void setup() {
39 // Open serial communications and wait for port to open:
40 Serial.begin(9600);
41 while (!Serial) {
42 ; // wait for serial port to connect. Needed for native USB port only
43 }
44
45
46 Serial.print("nInitializing SD card...");
47
48 // we'll use the initialization code from the utility libraries
49 // since we're just testing if the card is working!
50 if (!card.init(SPI_HALF_SPEED, chipSelect)) {
51 Serial.println("initialization failed. Things to check:");
52 Serial.println("* is a card inserted?");
53 Serial.println("* is your wiring correct?");
54 Serial.println("* did you change the chipSelect pin to match your shield or module?");
55 while (1);
56 } else {
57 Serial.println("Wiring is correct and a card is present.");
58 }
59
60 // print the type of card
61 Serial.println();
62 Serial.print("Card type: ");
63 switch (card.type()) {
64 case SD_CARD_TYPE_SD1:
65 Serial.println("SD1");
66 break;
67 case SD_CARD_TYPE_SD2:
68 Serial.println("SD2");
69 break;
70 case SD_CARD_TYPE_SDHC:
71 Serial.println("SDHC");
72 break;
73 default:
74 Serial.println("Unknown");
75 }
76
77 // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
78 if (!volume.init(card)) {
79 Serial.println("Could not find FAT16/FAT32 partition.nMake sure you've formatted the card");
80 while (1);
81 }
82
83 Serial.print("Clusters: ");
84 Serial.println(volume.clusterCount());
85 Serial.print("Blocks x Cluster: ");
86 Serial.println(volume.blocksPerCluster());
87
88 Serial.print("Total Blocks: ");
89 Serial.println(volume.blocksPerCluster() * volume.clusterCount());
90 Serial.println();
91
92 // print the type and size of the first FAT-type volume
93 uint32_t volumesize;
94 Serial.print("Volume type is: FAT");
95 Serial.println(volume.fatType(), DEC);
96
97 volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
98 volumesize *= volume.clusterCount(); // we'll have a lot of clusters
99 volumesize /= 2; // SD card blocks are always 512 bytes (2 blocks are 1KB)
100 Serial.print("Volume size (Kb): ");
101 Serial.println(volumesize);
102 Serial.print("Volume size (Mb): ");
103 volumesize /= 1024;
104 Serial.println(volumesize);
105 Serial.print("Volume size (Gb): ");
106 Serial.println((float)volumesize / 1024.0);
107
108 Serial.println("nFiles found on the card (name, date and size in bytes): ");
109 root.openRoot(volume);
110
111 // list all files in the card with date and size
112 root.ls(LS_R | LS_DATE | LS_SIZE);
113}
114
115void loop(void) {
116}
Call To Action
If you find this lesson useful, please consider leaving your comments and suggestion below.
Thank you and have a good day. Happy tinkering!
Posts in this series
- How to Get Started with ATTiny85 in Arduino IDE
- Tutorial: How to use MFRC522 RFID module using Arduino
- SOS Flasher Using Millis Function with Enable Switch
- Tutorial: How to use DS3231 RTC in Arduino
- Tutorial: How to use 0.96 OLED - a small and cute display
- Tutorial: Getting Started with the NRF24L01 | How to use | Arduino
- Tutorial: How to use SIM800L GSM Module for Controlling Anything | Arduino
- Tutorial: How to use Keypad | Text Entry Mode | Arduino
- Tutorial: How to use 4x4 Keypad | Arduino
- Project Idea: Arduino Voltmeter
- Project Idea: Door Lock Security | Arduino
- Multitasking with Arduino | Relay Timer Controller | using millis
- Tutorial Understanding Blink Without Delay | How to millis
- Arduino Simple LCD Menu
- How to use SIM800L GSM Module using Arduino | Make or Answer Voice Calls
- Tutorial: How to Use Arduino Uno as HID | Part 2: Arduino Mouse Emulation
- Tutorial: How to Use Arduino Uno as HID | Part 1: Arduino Keyboard Emulation
- Tutorial: How to use SIM800L DTMF to Control Anything | Arduino
- Tutorial: Arduino EEPROM
- How to use SIM800L GSM Module | Arduino | Send and Receive SMS
- 16x2 LCD Menu for Arduino
- Tutorial: Arduino GPIO | How to use Arduino Pins
- MIT App Inventor for Arduino
- RC Car using L298N, HC-06, and Arduino Uno
- How to Use LCD Keypad Shield for Arduino
- How to Use Arduino Interrupts
- Project: Automatic Alcohol Dispenser
- TUTORIAL: How to use HC-SR04 Ultrasonic Sensor with Arduino
- Source Code: Astronomia Meme and Funeral Dance | melodies the Arduino way
- How to Get Started with L293D Motor Driver Shield with Arduino
- How to Get Started with L298N Motor Driver module using Arduino
- Part 2: Wav Music Player with Lyrics Using Arduino and SD Card
- Interfacing Infrared to Arduino Uno
- Part 1: Wav Music Player Using Arduino Uno and SD Card
- How to Interface Stepper Motor to Arduino Uno
- How To Play MP3 Files on Arduino from SD Card
- What is Arduino Software Serial
- Playing Melodies Using Arduino
- 8 Degrees Of Freedom (DOF) Robot Using Arduino Uno
- How to Interface PS2 Controller to Arduino Uno
- Part 3: DF Player Mini Tinkering with Arduino Nano and LCD
- How to Interface HC-06 to Arduino
- How to make a Remote Control RC car using Arduino and HC-06 bluetooth module
- Part 2: DF Player Mini Tinkering with Arduino Nano
- Part 1: DF Player Mini - a mini cheap mp3 player
No comments yet!