Go Down

Topic: [RISOLTO] SD non riesco a farla leggere (Read 1 time) previous topic - next topic

medimax

Apr 27, 2012, 04:23 pm Last Edit: Apr 28, 2012, 01:07 am by medimax Reason: 1
Salve ragazzi...

ho un arduino uno rev.3 con ethernet shield, IDE1.0 ma non riesco a far leggere una SD da 512Mb (formattata in FAT16 e blocchi 8192 dato che di meno non posso) con l'esempio SD CARDINFO, mi continua a dare:

Quote
Initializing SD card...initialization failed. Things to check:
* is a card is inserted?
* Is your wiring correct?
* did you change the chipSelect pin to match your shield or module?


e non capisco il perchè..

lo sketch:
Code: [Select]
#include <SD.h>

// 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
const int chipSelect = 4;    

void setup()
{
 Serial.begin(9600);
 Serial.print("\nInitializing SD card...");
 // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
 // Note that even if it's not used as the CS pin, the hardware SS pin
 // (10 on most Arduino boards, 53 on the Mega) must be left as an output
 // or the SD library functions will not work.
 pinMode(10, OUTPUT);     // change this to 53 on a mega


 // 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 is inserted?");
   Serial.println("* Is your wiring correct?");
   Serial.println("* did you change the chipSelect pin to match your shield or module?");
   return;
 } else {
  Serial.println("Wiring is correct and a card is present.");
 }

 // print the type of card
 Serial.print("\nCard 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");
   return;
 }


 // print the type and size of the first FAT-type volume
 uint32_t volumesize;
 Serial.print("\nVolume type is FAT");
 Serial.println(volume.fatType(), DEC);
 Serial.println();
 
 volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
 volumesize *= volume.clusterCount();       // we'll have a lot of clusters
 volumesize *= 512;                            // SD card blocks are always 512 bytes
 Serial.print("Volume size (bytes): ");
 Serial.println(volumesize);
 Serial.print("Volume size (Kbytes): ");
 volumesize /= 1024;
 Serial.println(volumesize);
 Serial.print("Volume size (Mbytes): ");
 volumesize /= 1024;
 Serial.println(volumesize);

 
 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);
}


void loop(void) {
 
}



lesto

Quote
blocchi 8192


Code: [Select]
  volumesize *= 512;                            // SD card blocks are always 512 bytes

ma questo avviene dopo.

Il problema è che la ethernet condivide un segnale con la SD. soluzione (la prima su google se cerchi "ethernet shield sd"..........)

http://www.ladyada.net/learn/arduino/ethfiles.html
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

medimax

Quote
soluzione (la prima su google se cerchi "ethernet shield sd"..........)


l ho letta, non parla della libreria SD di arduino ma di una SDFat aggiornata, quindi deduco che la soluzione principale e di cambiare libreria.

Quote
Il problema è che la ethernet condivide un segnale con la SD.


effettivamente l'esempio nel CARDINFO parla del pin 4 nel caso di una shield ethernet e quindi immaginavo che l'esempio stesso considerasse il fatto del doppio componente.


alla fine deduco che lo sketch postato come esempio preso dalla libreria sia sbagliato vero??

lesto

se non erro SD non è altro che la SDfat sotto mentite spoglie, se hai l'ide 1.0 :)

l'esempio preso da dove? gli esempi della SD lo sono per una SD con tutti i segnali "per sè", il fatto dell'avere i segnali in comune è una particolarità, e se non erro è stata pure "risolta" nelle nuove ethernet shield
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

medimax

l' esempio e preso dall'ide 1.0 con libreria SD.. Menu file -> examples -> SD -> cardinfo...

nell'esempio dice:
Quote
// 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
const int chipSelect = 4;   

quindi parla chiaro di usare il pin 4 e viene confermato nel web dove parla della shield ethernet

ed anche
Quote
Serial.print("\nInitializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(10, OUTPUT);     // change this to 53 on a mega

qui ho lasciato il 10 ma anche cambiando sul 4 non ho nessun risultato..

ecco perché mi ero perso nella dimensione della scheda.
Stessa scheda SD, shield ethernet e arduino, funzionano su un progetto web su sd.. con libreria SD ed altre non richieste per questo schema di base.

provata anche la SDFat del 02/12/2011 il suo esempio SDinfo ma la risposta e:

Quote
card.init failed
SD errorCode: 0X1
SD errorData: 0X0


mi sembra strano che non ho 1 esempio di base che funzioni con questa scheda, o sbaglio qualcosa??

Quote
e se non erro è stata pure "risolta" nelle nuove ethernet shield

nella mia scheda ethernet, il pin 4 lo chiama SDCS ed il 10 ETHCS

medimax

Non so se serve, a qualcuno, ma a forza di provare, la soluzione e:

FAT32 e non la FAT16... con blocchi da 512..

(anche se nella pagina trovata su google parla di FAT16.. be provare non costa nulla...)

pablos

strano io ce l'ho sempre avuta in fat 16 e non ho problemi ne con 0022 ne con 1.0

ciao
no comment

medimax

Non so che dirti @Pablos, le mie 2 Nokia da 512Mb in FAT16 mi hanno fatto dannare, formattate in FAT32 tutto funziona...
Magari potrà essere d'aiuto sto post a chi ricicla come me le SD ;)

Go Up