Error SD en Arduino Mega

Tengo que abrir unos archivos (bmp, wav…) para una TFT y bueno, el problema está en que no reconoce de ninguna manera la SD, siempre salta el error de “initialization failed!”.

Aquí aporto los datos de lo que utilizo:

-Arduino Mega 2560

-Modulo SD Catalex

-TFT Elegoo 2,8 inch

Uso el programa de ejemplo, de igual manera no la reconoce.

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

File myFile;

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("Initializing SD card...");

  if (!SD.begin(53)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  if (SD.exists("example.txt")) {
    Serial.println("example.txt exists.");
  } else {
    Serial.println("example.txt doesn't exist.");
  }

  // open a new file and immediately close it:
  Serial.println("Creating example.txt...");
  myFile = SD.open("example.txt", FILE_WRITE);
  myFile.close();

  // Check to see if the file exists:
  if (SD.exists("example.txt")) {
    Serial.println("example.txt exists.");
  } else {
    Serial.println("example.txt doesn't exist.");
  }

  // delete the file:
  Serial.println("Removing example.txt...");
  SD.remove("example.txt");

  if (SD.exists("example.txt")) {
    Serial.println("example.txt exists.");
  } else {
    Serial.println("example.txt doesn't exist.");
  }
}

void loop() {
  // nothing happens after setup finishes.
}

He leído muchos foros sobre como conectar el SPI, conozco los pines:

MISO - 50
MOSI - 51
SCK - 52
CS - 53

Hay gente que invierte los pines miso y mosi y lo arreglan, otros retocan bibliotecas, pero nada de lo probado hasta ahora me ha ayudado a reconocer la SD.

Recibo también el mensaje de "initialization failed" y si no me equivoco es el mismo equipo: -Arduino Mega 2560 de Elegoo -2.8" TFT Touch Screen Elegoo Estoy ejecutando el ejemplo del CD adjunto al TFT para mostrar imágenes y siempre falla al intentar inicializar en SD.begin.

Los pines son los del "shield" y están bien. He probado cambiando el SD micro y he obtenido el mismo error. Hasta he copiado la librería "SD" a mi carpeta "libraries" y cambiado en SDClass::begin()

card.init(SPI_HALF_SPEED, csPin)

por

card.init(SPI_QUARTER_SPEED, csPin)

tal como se sugiere en algún foro, sin éxito.

¿Hay algún experto o conocedor del tema en este foro que pueda orientarme a cómo solucionar el problema?

Si ya probaste todo eso, cabe pensar que hay algun problema en la SD. La probaste con tu PC? Esta formateada, en que tipo de partición? Qué marca es?

Verifica todo y no dejes nada por sentado.

Lo único a cambiar el CS y cualquier pin de un MEGA sirve salvo los SPI. Eso de cambiar MISO por MOSI es una tontería ya te lo digo, la interfaz SPI es estricta. No creas todo lo que lees. Ya cambiaste velocidad del SPI lo que deja poco margen.

SI estas usando un adaptador y una MicroSD tal vez la cosa este por ahi, o tal vez la SD este bloqueada, verifica el switch de SOLO LECTURA.

Veamos que respondes a todo lo que te indico.

Algo mas, como el TTF suele usar SPI, por favor haz las pruebas de la SD solo enfocado en la SD sin código que apunte a la pantalla, solo la SD okay? Resuelve las cosas paso a paso.

Algo mas!! Esta alimentado con 5V no?

La SD funciona bien porque acabo de probarla con el Arduino/Uno y el ejemplo con las imágenes se muestran perfectas. Sin embargo, el mismo ejemplo debería funcionar con el Arduino/Mega (los pines no cambian) y falla en la inicialización (SD.begin).

(Nota: los pines 10, 11, 12 y 13 están funcionando correctamente porque encienden y apagan leds bien. )

La SD funciona bien porque acabo de probarla con el Arduino/Uno

En tus post anteriores no mencionas esto por eso te sugerí que la probaras. Sabiendo que funciona OK en el UNO y mal en el MEGA entonces concentrémosnos en eso.

|500x194

que coinciden bien con esto

MISO - 50 MOSI - 51 SCK - 52 CS - 53

Asi que te voy a sugerir algo que recuerdo le pasó a alguien y uso el ICP o sea el header de 8 pines disponible para programación del bootloader pero que casualmente comparte pines SPI.

Veamos si eso ayuda.

Prueba a ver.. digamos que, debería fallar porque estan cableados a los mismos pines del SPI en 50 a 52 pero...

Mira este link https://forum.arduino.cc/index.php?topic=354890.0 Si no entiendes inglés me preguntas.

Acá se sugiere basicamente dos cosas interesantes. Capacitor de 0.1uF de desacople.. no lo habia visto hasta ahora. Resistencia de 100k para forzar la inhabilitación cuando el CS no esta en LOW, muy interesante. Tal vez tu módulo no la tenga cableada y eso complique las cosas.

|500x315

Gracias por el interés y la respuesta. Adjunto una imagen de la placa Mega con el TFT porque no veo cómo pueden intervenir los pines que me señalas en el SD. Como se puede observar creo, en la imagen, los pines del SD conectados a la placa Mega son:

SD placa Mega
---------- -----------
SD_SS pin 10
SD_DI pin 11
SD_DO pin 12
SD_SCLK pin 13

¿Podría tratarse de un problema con alguna librería de software ya que el Arduino Mega funciona bien, así como el SD?

Ahora sí he podido resolver el problema. En lugar de "enchufar" la placa con la pantalla y el SD, he conectado con cables el Arduino Mega y la pantalla. En las conexiones, los pines 10, 11, 12 y 13, los he sustituido por los 50 a 53 como indicaste. También, tal como has señalado, la resistencia de 100K ha hecho la "magia" (el condensador no ha sido necesario): las imágenes se ven en la pantalla con el Arduino Mega. Muchas gracias otra vez por tu respuesta.

Esto es así porque el Serial Peripheral Interface (SPI) -que es el tipo de comunicación que utiliza el SD- en Arduino Mega está en los pines 50 a 53 y no en 10 a 13 (en Arduino Uno). En fin, siempre se aprende algo. Gracias.

No entiendo algo, porque inició el hilo Yitan y ahora respondes tu xrj?

He intervenido porque el título coincidía "error SD en Arduino Mega" y pensé para qué abrir un nuevo hilo si el problema parecía el mismo.