Hola!
En esta entrada intentaremos explicar cómo manejar un módulo de tarjeta SD con Arduino. Una vez aprendamos su manejo, podremos intentar integrarlo en nuestro proyecto de Robot. Y dar otro uso con un módulo de speaker.
El uso del módulo gestor de tarjetas SD se fundamenta en una interfaz serie, el bus SPI.
Bus de comunicación
La función del bus es permitir la conexión lógica entre los diferentes subsistemas que componen el computador o en este caso el microcontrolador. Existen dos tipos de arquitectura de buses, los buses en serie y los buses en paralelo. Los buses en serie transmiten la información bit a bit mientras que los buses en paralelo pueden transmitir varios bit al mismo tiempo. Aunque a primera vista parece que los buses en paralelo presentan características más ventajosas para la comunicación de las distintas partes de la arquitectura que conforma el microcontrolador, en la realidad no es tan fácil, ya que la transmisión en paralelo presenta varias desventajas. En una conexión paralela, los ocho bits que salen al mismo tiempo no llegan al otro extremo al mismo tiempo; algunos llegan más tarde que otros. Esto se conoce como transmisión sesgada. El hecho de que los cables paralelos estén agrupados físicamente significa que una señal puede a veces dejar su huella en el cable adyacente lo que puede aumentar la posibilidad de errores en la comunicación. Por todo ello, la tendencia en los últimos años es reemplazar los buses paralelos por buses serie (que suelen ser multicanal) que permiten una mayor refrigeración al disminuir el espacio necesario y a unas velocidades muy elevadas de transmisión con una mayor fiabilidad.
Los buses de comunicación en Arduino
I2C (Abreviatura de Inter-IC -inter integrated circuits-, un tipo de bus serie diseñado por Philips Semiconductors a principios de los 80s, que se utiliza para conectar circuitos integrados), SPI (Serial Peripheral Interface) y UART (Universal Asynchronous Receiver-Transmitter, en español: Transmisor-Receptor Asíncrono Universal) son los periféricos de comunicación hardware más básicos y comunes que los fabricantes utilizan en el desarrollo de microcontroladores, y como se muestra en la imagen Arduino no es una excepción.
El controlador del UART es el componente clave del subsistema de comunicaciones series de una computadora. El UART toma bytes de datos y transmite los bits individuales de forma secuencial. En el destino, un segundo UART reensambla los bits en bytes completos.
Todos los buses y componentes indicados se utilizan para la transmisión de información (bits) en serie.
El bus SPI
Nos centraremos en el bus SPI como infraestructura sobre la que desplegar la conexión de nuestra tarjeta SD.
El bus SPI tiene interés como medio de comunicación porque una gran variedad de sensores y dispositivos comerciales disponen de un interfaz SPI como medio de comunicación.
El Bus SPI (del inglés Serial Peripheral Interface) es un estándar de comunicaciones, usado principalmente para la transferencia de información entre circuitos integrados en equipos electrónicos. El bus de interfaz de periféricos serie o bus SPI es un estándar para controlar casi cualquier dispositivo electrónico digital que acepte un flujo de bits serie regulado por un reloj (comunicación sincróna).
Un bus de periféricos serie es la opción más flexible cuando se tiene tipos diferentes de periféricos serie. El hardware consiste en señales de reloj, data in, data out y chip select para cada circuito integrado que tiene que ser controlado. Casi cualquier dispositivo digital puede ser controlado con esta combinación de señales
El SPI es un protocolo síncrono. La sincronización y la transmisión de datos se realiza por medio de 4 señales:
- SCLK (Clock): Es el pulso que marca la sincronización. Con cada pulso de este reloj, se lee o se envía un bit. También llamado TAKT (en alemán).
- MOSI (Master Output Slave Input): Salida de datos del Master y entrada de datos al Esclavo. También llamada SIMO.
- MISO (Master Input Slave Output): Salida de datos del Esclavo y entrada al Master. También conocida por SOMI.
- SS/Select: Para seleccionar un Esclavo, o para que el Master le diga al Esclavo que se active. También llamada SSTE.
Conexiones y componentes
EscribirSD();
LeerSD();
{
Serial.print(F("Iniciando SD ..."));
if (!SD.begin(SSpin))
{
Serial.println(F("Error al iniciar"));
return;
}
Serial.println(F("Iniciado correctamente"));
}
{
int value;
// Abrir archivo y escribir valor
logFile = SD.open("datalog.txt", FILE_WRITE);
Serial.println(F("ESCRIBIENDO EN SD"));
if (logFile) {
value=readSensor();
logFile.print("Time(ms)=");
logFile.print(millis());
logFile.print(", value=");
logFile.println(value);
logFile.close();
}
else {
Serial.println(F("Error al abrir el archivo"));
}
}
{
//String dataLine;
//char caracter;
Serial.println(F("LEYENDO EN SD"));
logFile = SD.open("datalog.txt");
if(logFile){
while (logFile.available())
{
//caracter = dataFile.read();
Serial.write(logFile.read()); // En un caso real se realizarían las acciones oportunas
}
logFile.close();
}
else
{
Serial.println(F("Error al abrir el archivo"));
}
}
Fuentes
- https://es.wikipedia.org/wiki/Serial_Peripheral_Interface
- https://naylampmechatronics.com/blog/38_Tutorial-arduino-y-memoria-SD-y-micro-SD-.html
- https://es.wikipedia.org/wiki/Controladora_de_perif%C3%A9rico
- https://www.computerworld.es/archive/serial-versus-paralelo-cual-escoger
- https://www.seeedstudio.com/blog/2019/11/07/arduino-communication-peripherals-uart-i2c-and-spi/