Problema con lectura módulo SD

Buenas, estoy intentando aprender a usar una SD para almacenar datos de lecturas de sensores y me encuentro con el problema de que no consigo acceder a la SD, he seguido muchos tutoriales y guias y aún así no me funciona. Estoy usando éste codigo:

#include <SD.h>
#include <SPI.h>

File myFile;

void setup()
{
  Serial.begin(9600);
  Serial.print("Iniciando SD ...");
  if (!SD.begin(4)) {
    Serial.println("No se pudo inicializar");
    return;
  }
  Serial.println("inicializacion exitosa");
 
  myFile = SD.open("archivo.txt");//abrimos  el archivo 
  if (myFile) {
    Serial.println("archivo.txt:");
    while (myFile.available()) {
    	Serial.write(myFile.read());
    }
    myFile.close(); //cerramos el archivo
  } else {
    Serial.println("Error al abrir el archivo");
  }
}

void loop()
{
  
}

Está sacado de éste tutorial:

La única diferencia es que le tuve que añadir la librería SPI para que compilara.

Lo estoy usando para leer un archivo simple .txt en el que pone "Hola mundo" para ver si era capaz e ir complicando desde ahí, pero directamente en el monitor serial me dice que no me reconoce la SD gracias al mensaje de error que hay en el codigo si no la reconoce. Las conexiones que he realizado son las del tutorial:

También probé a seguir éste hilo del foro pero no utilizo Leonardo y supongo que por eso no funciona... ya no sabía que más probar.

Uso Arduino UNO y el módulo de SD (No micro-SD)

Muchas gracias.

Probaste hacer las conexiones sobre los pines ICSP ? Porque si usas la libreria SPI creo que la misma referencia hacia esos pines...

Yo también tengo un módulo exactamente igual a ese; lo único que se me ocurre que pueda ser, es que hayan conexiones defectuosas o que hayas invertido MOSI con MISO.

Algunos reportan que en la placa tienen rota la línea CS que va del pin a la ranura, pero tendría que ver una foto de tu módulo (no sacada de internet) para ver si es el caso.

Yo cuando tuve problemas así, era por protoboard defectuoso.

inelint:
Probaste hacer las conexiones sobre los pines ICSP ? Porque si usas la libreria SPI creo que la misma referencia hacia esos pines...

Ya probé a hacer las conexiones con los pines ICSP y tampoco funcionaba :confused:

Creo que lo que te falta es esto en el setup:

          pinMode(10, OUTPUT);

Prueba a ver y cuenta.

noter:
Creo que lo que te falta es esto en el setup:

          pinMode(10, OUTPUT);

Prueba a ver y cuenta.

Lo he probado (Pese a que no tengo nada conectado en el pin 10) y nada, tambien he probado a cambiar el codigo para que el CS conecte al pin 10 y nada. He probado todas las combinaciones posibles entre ponerle esa linea en el codigo, ponersela con la salida 4, conectarlo por los pines ICSP y no me ha ido ninguna. Alguna otra idea? Muchas gracias por ayudar :smiley:

Lucario448:
Yo también tengo un módulo exactamente igual a ese; lo único que se me ocurre que pueda ser, es que hayan conexiones defectuosas o que hayas invertido MOSI con MISO.

Algunos reportan que en la placa tienen rota la línea CS que va del pin a la ranura, pero tendría que ver una foto de tu módulo (no sacada de internet) para ver si es el caso.

Yo cuando tuve problemas así, era por protoboard defectuoso.

He probado a cambiar los pines MISO y MOSI y tampoco. La protoboard no puede ser poque hago las conexiones directas ocn cables macho/hembra.

Te subiría imágenes pero no sé :frowning:

Prueba a compilar y ejecutar el ejemplo CardInfo del ide, y cuenta qué salida te da.
En cuanto a MISO y MOSI, la conexión correcta debería ser la que expones en el primer post. Lo de poner el pin10 en OUTPUT aunque no se use es necesario, porque de no estar como salida, el SPI estará en modo SLAVE, en lugar de MASTER.

007mng:
Te subiría imágenes pero no sé :frowning:

¿No sabes CÓMO hacerlo, o SI hacerlo? (nótese que el "SI" es condicional y no afirmatorio)

Yo lo haría así:

  • Tomo la foto y obtengo el archivo.
  • Lo adjunto al post.
  • Escribo lo que tenga que escribir, dejando un espacio en el lugar donde quiero que se vea esa imagen.
  • Hago el posteo dejando solo texto y el archivo adjunto.
  • A ese post voy y copio la "dirección de enlace" del adjunto (haciendo clic derecho aparece la opción).
  • Le doy a "Quick edit" y busco el espacio que reservé para la imagen.
  • Escribo "[aimg][/aimg]" (sin comillas y sin la letra 'a'); en medio de esas dos etiquetas pego el enlace que antes dije que copiaras.
  • Le doy a "Save" y ya lo tienes.

La foto debe ser de buena resolución, buen acercamiento, y debe haber buena iluminación (que se vea claro pero que no refleje luz). La idea es hacer una inspección visual para buscar alguna traza defectuosa o cortada, defectos de soldadura y todo lo que el ojo humano pueda captar.

Con esto espero que puedas comprender la razón por la cual pido una foto del "sujeto" en cuestión...

¡Hola, que tal! Yo tengo el mismo problema (pensaba que era el único) y buscando por el foro encontré estos posts que, supongo están relacionados con el tema. ¿Alguien lo puede confirmar?

https://forum.arduino.cc/index.php?topic=367457.0

https://forum.arduino.cc/index.php?topic=326066.0

https://forum.arduino.cc/index.php?topic=354890.0

https://forum.arduino.cc/index.php?topic=376182.0

Yo ya he probado todo lo que pone en cada uno menos lo de usar un 74HC4050 porque no he podido comprarlo, así que me da por pensar que puede ser la causa.

Gracias por anticipado.

Uno de los problemas con los que me he encontrado al usar módulos SD es el consumo de la tarjeta al inicio, la solución fue añadir un capacitor de 470uF (o similar) entre 3.3V y GND, suponiendo que tengas acceso a la salida del regulador del módulo.

Por otro lado, si ya sabes cómo conectar el módulo, puedes intentar utilizar este código, cambiando la variable chipSelect acorde a las conexiones que hayas hecho; http://www.prometec.net/sdcard/.

Nota; el 74HC4050 sirve para, a grosso modo, cambiar el voltaje de la señal de 5v a 3.3v (el voltaje con el cual trabaja la SD), pero, en el módulo hay una serie de resistencias que parecen ya hacer ese trabajo. No es el método más limpio en cuanto a señal se refiere, pero funcionar, funciona.

Saludos y suerte!

Hola ferminolaiz, he probado lo que comentas y nada. Le he subido el sketch de CardInfo y me sale esto

Initializing SD card...Wiring is correct and a card is present.

Card type: SDHC
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card

Ya la he formateado varias veces pero no hay manera. Lo del condensador lo he intentado un poco por encima porque ahora mismo no tengo soldador, y tampoco me ha funcionado. Lo curioso es que cuando compré el módulo, lo probé y funcionó perfectamente. Gracias por la ayuda.

@ardumike, parece que está detectando la tarjeta (y el tipo, SDHC), pero no la partición.

En ciertos casos, especialmente en sistemas de este tipo (microcontroladores, etc), es necesario que el tipo de partición se adhiera al estándar lo más fielmente posible.
Intenta formatear la tarjeta con esta aplicación y nos comentas que tal: SD Memory Card Formatter for Windows/Mac | SD Association

De hecho lo he formateado con esa aplicación porque ya leí que era la adecuada.

En ese caso, vuelvo a insistir sobre las conexiones defectuosas.

Cuando obtuve mi módulo, en un principio también pasé por el problema de que ninguna era detectada.

Probé con CardInfo, y primero decía que no pudo inicializar; eventualmente dijo que sí, pero lo mismo: no detecta la partición.
Al tiempo me di cuenta que la protoboard en la que lo tenía puesto tenía conexiones defectuosas; desde que solucioné ese problema, hasta la fecha me sigue funcionando como si nada.

He revisado todas las conexiones y cambiado cables. Además, lo conecto directamente, no uso protoboard precisamente por lo que dices.

Pues a la vista de la salida que te da CardInfo, tu problema no tiene pinta de ser de software. Revisa conexiones, e intenta minimizar longitud de cables.
Tal vez te puedan aconsejar un condensador entre los pines de alimentación. Puedes intentar, si no, reducir la velocidad de transferencia SPI.

Bueno, en mi caso, el problema de detección está resuelto. Instalé la librería SdFat, probé con el sketch de SDInfo y funcionó, tan sólo tuve que cambiar el pin CS al 8. Reconoce tarjeta y escribe y lee.

También actualicé desde el IDE de Arduino la libreria SD y la tarjeta, y se me ocurrió probar con la librería SD original y ahora también funciona con la original (eso sí, usando como CS el pin 8) con lo que el problema se supone que estaba en la no actualización.

Ahora tengo otro problemilla, pero me romperé los cuernos un rato a ver si lo soluciono rápidamente.

Gracias por toda vuestra ayuda.