Diferencia entre revisiones de «SD.begin()»

De ArduWiki
Saltar a: navegación, buscar
(Vea también)
(Ejemplo)
Línea 28: Línea 28:
 
== Ejemplo ==
 
== Ejemplo ==
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 +
#include <SPI.h>
 +
#include <SD.h>
 +
 
void setup() {
 
void setup() {
 
   Serial.begin(9600);
 
   Serial.begin(9600);
  
   if (!SD.begin(4)) Serial.println("Fallo en la tarjeta");
+
   if (!SD.begin(4)){
   else Serial.println("Tarjeta iniciada");
+
      Serial.println("Fallo en la tarjeta");
 +
   }else{
 +
      Serial.println("Tarjeta iniciada");
 +
  }
 +
  //Hacer algo con la SD
 +
  SD.end()
 +
  Serial.println("Puedes sacar la tarjeta con seguridad.");
 
}
 
}
  
void loop(){}
+
void loop(){
 +
  //Nada
 +
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Revisión del 14:42 4 may 2019

Descripción

Intenta inicializar la tarjeta SD al modo SPI, para así obtener de esta la información necesaria para empezar a utilizarla.

Aunque llamar esta función cuando la tarjeta ya había sido inicializada no la perjudica (y prácticamente no tendría efecto alguno en el programa), de todas formas sería un desperdicio de tiempo ya que ejecutar esta función puede tardar hasta un segundo. Donde sí valdría la pena sería al dar soporte de remoción "en caliente", porque cada vez que una tarjeta SD pierda energía, hay que pasar por este proceso al reinsertarse.

Sintaxis

SD.begin([velocidad, ]pinCS);

Parametros

velocidad
frecuencia del reloj SPI en Hertz (unsigned long). Si excede el máximo soportado por el microcontrolador, dicho máximo se utilizará en su lugar. El valor máximo absoluto es de 20000000 (20 MHz).
pinCS
el número del pin utilizado para la línea "Chip Select" (o "Slave Select"/SS) de la tarjeta (byte).

Retorna

true si la tarjeta pudo ser inicializada con éxito, false en caso contrario (bool).

Comentarios

Este proceso de inicialización sigue tres pasos:

  • Poner la tarjeta en modo SPI mediante el envío de cierto comando una cantidad determinada de veces. Si no se da la respuesta esperada en alguno de los intentos, el proceso falla inmediatamente. Esta etapa esencialmente verifica el hardware (lo físico); en otras palabras, puede fallar por mala alimentación (de la tarjeta), mala conexión, o incluso por tarjeta defectuosa o que de pleno no soporta SPI.
  • Leer la tabla de particiones (también llamados "volúmenes") para así encontrar alguna con el sistema de archivos FAT (16 o 32). Si se falla en esta etapa, es posible que la tarjeta no esté formateada al sistema FAT.
  • Abrir el directorio raíz una vez encontrada la partición FAT. Si falla, podría ser problema de hardware (ej.: desconexión de la tarjeta antes de llegar a esta etapa) o el sistema de archivos está dañado (reparable mediante formateo o el comando chkdsk en Windows).


En el momento que alguno fracase, es dónde la función retorna false. Ya que el dato de retorno no es muy específico para diagnosticar posibles problemas con la tarjeta, se recomienda subir y ejecutar el ejemplo CardInfo para dicha tarea. Ese programa imprime (en el monitor serial) un mensaje de error dependiendo de en cuál de las dos primeras etapas ha fallado; si llega a imprimir una lista del contenido (archivos y carpetas) de la tarjeta, significa que todo está en orden.

Ejemplo

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

void setup() {
   Serial.begin(9600);

   if (!SD.begin(4)){
      Serial.println("Fallo en la tarjeta");
   }else{
      Serial.println("Tarjeta iniciada");
   }
   //Hacer algo con la SD
   SD.end()
   Serial.println("Puedes sacar la tarjeta con seguridad.");
}

void loop(){
   //Nada
}

Vea también

Referencias