Problema con scheda SD

E’ la prima volta che faccio delle prove con queste schede
e subito ho dei problemi.
Ho utilizzato il codice qui sotto e non sono riuscito a superare
l’inizializzazione,
Sempre “Initialization failed!”.
Allego lo schema che ho utilizzato fatto con risorse che ho
trovato in rete.
La scheda è una mini di 2GB.

Qualche idea?
Grazie Carletto.

/*
Scheda Arduino UNO Rev 3
*/
#include <SD.h>
//—Predisposizione-------------------------------------------
File myFile;
void setup() {
Serial.begin(9600);
if(!SD.begin(10)){
Serial.println(“Initialization failed!”);
return;
}
Serial.println("Initialization done, ");
SD.remove(“example.txt”);
if(SD.exists(“example.txt exists.”)){
Serial.println(“example.txt exists.”);
}
}
//—Ciclo principale------------------------------------------
void loop() {

}

SD_Card.pdf (29.2 KB)

carletto: if(!SD.begin(10)){

Quel 10 deve essere un 4

Almeno dagli esempi e dalla pratica

Ciao

brunol949:

carletto: if(!SD.begin(10)){

Quel 10 deve essere un 4

Almeno dagli esempi e dalla pratica

Ciao

Ho provato a inserire 4, ma il risultato è sempre lo stesso.

Saluti Carletto

carletto: Ho provato a inserire 4, ma il risultato è sempre lo stesso.

Prendi l'esempio DumpFile Metti un file di testo di qualche riga nella SD Assicurati che il nome del file nello sketch sia uguale a quello nella SD

A quel punto deve funzionare Non e' che hai altre cose appiccicate ai pin sottoindicati

The circuit: * SD card attached to SPI bus as follows: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4

Do per scontato che la scheda e' ufficiale altrimenti .....

Io avrò pubblicato almeno 8 volte lo sketch funzionante, la libreria SD.h mi ha sempre dato problemi, per il pin avendo sd sulla ethernet è il 4, però come sempre ci vuole la sfera, non si specifica se è una ethernet shield + SD o una shield solo SD ....

ciao

pablos: Io avrò pubblicato almeno 8 volte lo sketch funzionante, la libreria SD.h mi ha sempre dato problemi, per il pin avendo sd sulla ethernet è il 4, però come sempre ci vuole la sfera, non si specifica se è una ethernet shield + SD o una shield solo SD ....

@pablos Non ho la ethernet shield, ho acquistato un socket per miniSD e come si vede dallo schema l'ho interfacciata con un HCF4050B per livellare i segnali a 3v3. Il CS della schedina l'ho collegato al pin 10. Ho trovato molti esempi in rete ma di chiari non molto, poi ho trovato quello che ho postato perchè assomiglia alla schedina che ho che è una SanDisk 2GB. Sulla schedina ho messo un file "example.txt" con alcuni numeri sulle prime righe. Credo però che il problema sia ancora quello di rilevare la presenza della scheda prima ancora di essere in grado di leggerne il contenuto.

Saluti Carletto.

brunol949:

carletto:
Ho provato a inserire 4, ma il risultato è sempre lo stesso.

Prendi l’esempio DumpFile
Metti un file di testo di qualche riga nella SD
Assicurati che il nome del file nello sketch sia uguale a quello nella SD

A quel punto deve funzionare
Non e’ che hai altre cose appiccicate ai pin sottoindicati

The circuit:

  • SD card attached to SPI bus as follows:
    ** MOSI - pin 11
    ** MISO - pin 12
    ** CLK - pin 13
    ** CS - pin 4

Do per scontato che la scheda e’ ufficiale altrimenti …

@brunol949
Ho apportato le modifiche come mi hai suggerito:

#include <SD.h>
const int chipSelect = 4;
void setup() {
Serial.begin(9600);
pinMode(10, OUTPUT);
if(!SD.begin(chipSelect)){
Serial.println(“Initialization failed!”);
return;
}

ma il risultato è sempre lo stesso.

Carlettto.

Ciao

(ragazzi ma se guardate il pdf vedrete che non utilizza uno shield ma ha fatto i collegamenti "volanti")

se hai seguito lo schema che hai postato, il CS va correttamente impostato a 10 (è quello indicato come "SS"). lo schema mi pare corretto, c'è anche il chip che adatta la tensione (5v -> 3.3V)... come hai formattato la SD? Hai controllato che il PIN 4 sia correttamente a 3.3V? E l'integrato 4050 è alimentato a 3.3V? Verifica che 3.3V dovresti leggerli anche sul pin 2 della SD, tranne (ma non te ne dovresti accorgere se non hai un oscilloscopio) quando viene messo a low per inizializzare la scheda...

scusa non avevo notato l’allegato :slight_smile:

prova a impostarlo così, la libreria è molto simile, devi adattarlo

#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h>
#include <SdFat.h>
//#include <SdFatUtil.h> //serve se chiedi freeram ecc

---------------------dichiarazioni--------------------
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

---------------------nel setup-------------------------

// initialize the SD card
pinMode(10, OUTPUT); // set the SS pin as an output (necessary!)
digitalWrite(10, HIGH);
card.init(SPI_FULL_SPEED, 4);
volume.init(&card);
root.openRoot(&volume);

void log_write()
{
//scrittura su file txt sd … eventi
file.open(&root, “datalog.txt”, O_APPEND | O_WRITE);// il file deve già esistere, non lo crea questa riga
file.println(log_riga); // ovviamente log_riga è una String
file.close();
}

scheda formattata in Fat16, fammi sapere
ciao

lucadentella: Ciao

(ragazzi ma se guardate il pdf vedrete che non utilizza uno shield ma ha fatto i collegamenti "volanti")

se hai seguito lo schema che hai postato, il CS va correttamente impostato a 10 (è quello indicato come "SS"). lo schema mi pare corretto, c'è anche il chip che adatta la tensione (5v -> 3.3V)... come hai formattato la SD? Hai controllato che il PIN 4 sia correttamente a 3.3V? E l'integrato 4050 è alimentato a 3.3V? Verifica che 3.3V dovresti leggerli anche sul pin 2 della SD, tranne (ma non te ne dovresti accorgere se non hai un oscilloscopio) quando viene messo a low per inizializzare la scheda...

1) Il CS lo collego al pin 10 di arduino. 2) Ma la SD va formattata? Non l'ho fatto. Però riesco a leggerla e scriverla tramite il computer. Utilizzo Linux ubuntu. Se deve essere formattata come? FAT? 3) Sul pin 4 della scheda ci sono 3v3 creati con IC1. 4) Sul pin 2 ho provato con e senza resistenza di pull-up

N.B. Anche dopo le prove fatte riesco a leggere e scrivere sulla SD tramite il computer, quindi la scheda è ancora OK.

Utilizzo i microcontrollori da un po di tempo (PIC). Da qualche mese utilizzo Arduino UNO R3 e ancora è la prima volta che provo le SD.

Grazie per i suggerimenti. Carletto.

Ciao!

va formattata FAT (la libreria supporta sia FAT16 che FAT32)... non ho capito che tensione trovi sul PIN 2...

lucadentella:
Ciao!

va formattata FAT (la libreria supporta sia FAT16 che FAT32)… non ho capito che tensione trovi sul PIN 2…

Sul pin 2 ci sono 3,2 volt.

Adesso vedo per la formattazione, però mi chiedo
se riesco a scrivere e leggere con il computer non
dovrebbe già essere formattata?

Ciao grazie.

Carletto.

sì ma potrebbe essere formattata con un filesystem non compatibile...

Ho provato a formattare in FAT e FAT32 e i risultati non cambiano... Hai altre soluzioni oltre alla formattazione?

hai a disposizione un oscilloscopio o un logic analyzer per capire se il colloquio via SPI avviene?

hai provato l’esempio che ti ho postato sopra, a molti ha funzionato?

lucadentella: hai a disposizione un oscilloscopio o un logic analyzer per capire se il colloquio via SPI avviene?

Ho un oscilloscopio, farò delle prove sulle 3 linee, farò sapere.

Carletto

@pablos
Non ho ancora provato il tuo suggerimento perchè non ho la Ethernet,
però cerco le librerie che hai utilizzato e proverò.
Ma servono tutte queste?

#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h>
#include <SdFat.h>
//#include <SdFatUtil.h> //serve se chiedi freeram ecc

Saluti
Carletto.

carletto: però cerco le librerie che hai utilizzato e proverò. Ma servono tutte queste?

Hai un Arduino UNO Rev.3 ( cosi e' scritto piu' sopra ) La libreria SD.h dovrebbe avere tutto quello che serve Almeno per far funzionare gli esempi sicuramente

<< lucadentella hai a disposizione un oscilloscopio

Ho un oscilloscopio molto vecchio 1977, comunque
vedo il clock (SCLK) abbastanza bene mentre
MOSI e MISO non sono ben chiari, ripeto il mio oscilloscopio
è molto vecchio tra l’altro ha un sincronismo che non
mi permette di vedere segnali molto brevi.

Continuerò a fare delle provare.

Carletto