sábado, 19 de enero de 2013

Arduino y Tarjeta SD


Las tarjetas SD pueden utilizar dos protocolos:

  • Bus SD: Trasferencia paralela de 4 bits. 
  • SPI (Serial Peripheral Interface): Interfaz de Periféricos Serie.
Vamos a utilizar el interfase SPI. Este interfase funciona con una configuración Maestro-Esclavo. Controla la transferencia mediante un bus serie, controlado por reloj. La tarjeta seria la esclava y el Arduino es el Master,
Las señales que se utilizan son:
  • CLK (Línea de reloj): Es la señal de reloj.
  • MOSI (MasterOut-SlaveIn): Línea por donde el maestro envía y el esclavo recibe.
  • MISO (MasterIn-SlaveOut): Línea por donde el maestro recibe y el esclavo envía.
  • CS (Chip Select)/ SS (Slave Selector): Conecta o desconecta la operación del dispositivo con el que comunicamos. Permite la comunicación de varios esclavos a un mismo maestro, multiplexando la señal de reloj.

Pines de una tarjeta SD

 

Conexiones entre Arduino y SD

Señal
Arduino
SD
CS / SS
4
1
MOSI
11
2
MISO
12
7
CLK
13
5
VCC


4
GND


3, 6

Los pines 8 y 9 de la tarjeta SD no se utilizan

Montaje de un interfase casero

La alimentación y los buses de la tarjeta trabajan a 3,v3. Por lo que hay que incluir un divisor de tensión en todas los lineas. Para esto, instalaremos un divisor de tensión, según el esquema inferior.

R1, R3, R5 = 2K2
R2, R4, R6 = 1K2


Software

Arduino tiene una librería especifica para este dispositivo SD.H
Hay que definir el pin por el cual seleccionamos la señal CS/SS. Normalmente se utiliza el pin 4.
Pero hay módulos que la tienen definida:.
  • Arduino Ethernet shield: pin 4
  • Adafruit SD shields and modules: pin 10
  • Sparkfun SD shield: pin 8

En el lanzador de Arduino existen varios ejemplos para comenzar.
  • Cardinfo: Muestra la información de la tarjeta. Formato, capacidad, ficheros presentes.
  • Dataloger: Muestra los datos grabados de un sensor.
  • DumpFile: Muestra el contenido de la tarjeta en el monitor serie.
  • Files: Como crear y borrar ficheros en la SD.
  • Listfiles: Muestra los ficheros presentes en la tarjeta (el ejemplo tiene los siguientes errores):
  • incluir la linea: const int chipSelect = 4;
  • cambiar la linea pinMode(10, OUTPUT); por pinMode(4, OUTPUT);
  • if (!SD.begin(10)) { por if (!SD.begin(4)) {
  • ReadWrite: como leer y escribir en la tarjeta.
Las pruebas de los eejmplos las he realizado con Arduino UNO y Arduino Ethernet shield.

4 comentarios:

  1. Hola felicidades por la publicacion , me podrias decir si la misma configuracion explicada la puedo aplicar al nuevo arduino ethernet porque quiero trabajar en el con la sd y poder leer y escribir informacion pero no me funciona

    ResponderEliminar
    Respuestas
    1. Hola.
      No te lo puedo decir, debería ser posible porque las librerías son estándar.

      Eliminar
  2. Cómo hacer lo mismo pero en vez de arduino a una usb

    ResponderEliminar
  3. Nunca voy a entender a que corresponden miso y mosi respecto de data+ y data - o RX y TX

    ResponderEliminar