Hi, I am recently working with a project with arduino uno which includes a data logging, I am using a very common sd card module for the arduino boards. When I started to work with it, first I just uploaded the cardinfo code from the example in the arduino ide and
it shows :
Initializing SD card...initialization failed. Things to check:
- is a card inserted?
- is your wiring correct?
- did you change the chipSelect pin to match your shield or module?
I am sure that the connections are correct, card also inserted correctly and I also tried every possible chipselect and again tried and it again shows the same thing in serial monitor and I also checked a lot of times. but the same results .
and I also formated the sd card (with this : https://www.sdcard.org/downloads/formatter/ ) but nothing changed.
now recently I have managed the Arduino to read the sd card CardInfo but in a weird way, at first if you run it it wont be able to read the sd card but, (take out the sd card)if you press the rerun button on the arduino and then put in the sd card, it will be able to read it, this is the only way to read it, if it manages to read the sd card it will not be able to write to the sd card no matter what, so it is possible to read the card in a very specific way but nothing else.
connections :
VCC = 5v
GND = GND in Arduino NANO
MOSI - pin 11 on Arduino NANO
MISO - pin 12 on Arduino NANO
SCK - pin 13 on Arduino NANO
CS - PIN 4 and I also tried in pin 10 and 8(all of them)
this code is just for me to check if the sd card is working good with a arduino, the project I am using this for is a data logging witch reads an nfc tag and if it is able to read it and the tagid is a match to the one in the system then it will open an electro magnetic lock with a relay, this my seem a bit complicated but it is pretty simple , I have managed to connect all the stuff all that is left is the data logging witch I have problems with. if any one else whants the full code i will post it
/*
SD card test
This example shows how use the utility libraries on which the'
SD library is based in order to get info about your SD card.
Very useful for testing a card when you're not sure whether its working or not.
The circuit:
SD card attached to SPI bus as follows:
** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
** CS - depends on your SD card shield or module.
Pin 4 used here for consistency with other Arduino examples
created 28 Mar 2011
by Limor Fried
modified 9 Apr 2012
by Tom Igoe
*/
// include the SD library:
#include <SD.h>
#include <SPI.h>
// Is card inserted
#define SDmissing 7
long timeStamp;
String timeStampString;
int hours = 0;
int minutes = 0;
int seconds =0;
// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;
// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 10;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("\nInitializing SD card...");
// we'll use the initialization code from the utility libraries
// since we're just testing if the card is working!
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println("initialization failed. Things to check:");
Serial.println("* is a card inserted?");
Serial.println("* is your wiring correct?");
Serial.println("* did you change the chipSelect pin to match your shield or module?");
while (1);
} else {
Serial.println("Wiring is correct and a card is present.");
}
// print the type of card
Serial.println();
Serial.print("Card type: ");
switch (card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println("SD1");
break;
case SD_CARD_TYPE_SD2:
Serial.println("SD2");
break;
case SD_CARD_TYPE_SDHC:
Serial.println("SDHC");
break;
default:
Serial.println("Unknown");
}
// Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
if (!volume.init(card)) {
Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
while (1);
}
Serial.print("Clusters: ");
Serial.println(volume.clusterCount());
Serial.print("Blocks x Cluster: ");
Serial.println(volume.blocksPerCluster());
Serial.print("Total Blocks: ");
Serial.println(volume.blocksPerCluster() * volume.clusterCount());
Serial.println();
// print the type and size of the first FAT-type volume
uint32_t volumesize;
Serial.print("Volume type is: FAT");
Serial.println(volume.fatType(), DEC);
volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we'll have a lot of clusters
volumesize /= 2; // SD card blocks are always 512 bytes (2 blocks are 1KB)
Serial.print("Volume size (Kb): ");
Serial.println(volumesize);
Serial.print("Volume size (Mb): ");
volumesize /= 1024;
Serial.println(volumesize);
Serial.print("Volume size (Gb): ");
Serial.println((float)volumesize / 1024.0);
Serial.println("\nFiles found on the card (name, date and size in bytes): ");
root.openRoot(volume);
// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);
}
if (!digitalRead(SDmissing)) {
// Now able to write to file
File dataLog = SD.open("SDLog.txt", FILE_WRITE);
// Log data
timeStamp = millis();
hours = (timeStamp / 1000) / 60 / 60;
minutes = (timeStamp / 1000) / 60 % 60;
seconds = (timeStamp / 1000) % 60;
timeStampString = String(hours) + ":" + String(minutes) + ":" + String(seconds);
if (dataLog)
{
Serial.println(timeStampString);
dataLog.println(timeStampString);
// Close file
dataLog.close();
}
else
{
initSDCard();
}
}
else
{
initSDCard();
}
// Artificial delay to reduce data written to card!
delay(1000);
}
void initSDCard()
{
// Expected configuration for SPI/SD library:
// MOSI – pin 11
// MISO – pin 12
// SCK (CLK) – pin 13
// CS – pin 10(can be changed)
while (!SD.begin())
{
Serial.println("------------------------------");
Serial.println("SD Card not found / responding");
Serial.println("Insert a formatted SD card");
Serial.println("------------------------------");
SD.end();
delay(1000);
}
return;
}
Blockquote
Blockquote
Blockquote