Want to create interactive content? It’s easy in Genially!
SPI
Jenny C.
Created on July 17, 2023
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Modern Presentation
View
Terrazzo Presentation
View
Colorful Presentation
View
Modular Structure Presentation
View
Chromatic Presentation
View
City Presentation
View
News Presentation
Transcript
SPI
Start
¿Qué es SPI?
La comunicación SPI utiliza dos señales de transmisión de datos lo que le da mayor velocidad de comunicación debido a que hay poca deformación de la señal. Con la comunicación SPI el intercambio de datos ocurre siempre en ambas direcciones. En decir, cuando existe intercambio de un bit entre el maestro y algún esclavo seguidamente vendrá un intercambio de un bit del esclavo para el maestro. De esta forma, definimos que la comunicación es siempre full-duplex.
¿Qué es SPI?
Diagramas de conexiones
Diagramas de conexiones
Cuando se conectan varios esclavos a un puerto SPI, los esclavos se conectan en paralelo y las señales CS o SS del maestro se vinculan a cada SS de los esclavos. La salida de datos del esclavo seleccionado mediante la señal CS/SS se habilita y los dispositivos deseleccionados se desconectan de la línea MISO. La señal de SS funciona como Selección de Esclavo (Slave Select). Es una señal activa a nivel bajo, lo que significa que el dispositivo se selecciona cuando este pin se encuentra a un nivel bajo.
Diagramas de conexiones
Una comunicación SPI básica entre dos dispositivos tendrá 4 líneas o en su defecto 3 líneas si uno de los dispositivos no necesita enviar nada.
Funcionamiento
El MASTER colocará en bajo el pin SS del Slave con el que se quiere comunicar. Seguidamente, el master genera una señal de reloj para sincronizar el envío y recepción de datos.Generalmente los datos aparecen en el flanco de subida de la señal de reloj (SCK), este es el modo de comunicación más común, sin embargo, existen otros modos de comunicarse
Polaridad y Fase de reloj en el bus SPI
Hay cuatro formas en las que se puede muestrear el reloj SPI. CPOL es la polaridad del reloj. CPHA es la fase del reloj.
Modos de funcionamiento
Señales de SPI
• Master Output, Slave In (MOSI): Información que va del maestro al esclavo • Master Input, Slave Output (MISO): Información que va del esclavo al maestro • Serial Clock (SCK): Pulsos de reloj que sincronizan la transmisión de datos generados por el maestro • Slave Select o Chip Select (SS CS): Indica el esclavo a activarse
Cuando se conectan varios esclavos a la señal MISO, se espera mantener alta impedancia (Tri-State) de la línea MISO hasta que se hayan seleccionado por medio de SS, es decir la confirmación de SS es con un modo bajo (LOW)
Características
• 4 Hilos (5 considerando la referencia a tierra). SCLK, MISO, MOSI, SS • Envío del MSB primero • Los datos se envían y reciben al mismo instante (full duplex) • Full dúplex, el límite se encuentra en la cantidad de pines disponibles para SS/CS • Solo un Maestro.
Implementación
La librería SPI.h cuenta con dos clases: - SPISettings: permite establecer los parámetros de las transferencias SPI a realizar. - SPI: permite controlar el bus SPI para enviar y recibir información.
Implementación
Un objeto de esta clase puede ser utilizado para configurar el bus SPI. Esto implica especificar: • Velocidad de transferencia máxima. • Orden de transmisión de bits • Modo de transmisión La sintaxis para crear un objeto de este tipo es la siguiente: SPISettings mySettting(speedMaximum, dataOrder, dataMode); - mySettting: es el objeto a crear. - speedMaximum: es la máxima frecuencia a utilizar especificada en herz. - dataOrder: es el orden en que se transfieren los bits. Su valor puede ser: * MSBFIRST: para comenzar por el bit más significativo. * LSBFIRST: para comenzar por el bit menos significativo. - dataMode: especifica el modo de transmisión. Puede tomar uno de los siguientes valores: SPI_MODE0, SPI_MODE1, SPI_MODE2 o SPI_MODE3.
Implementación
SPI.begin() Esta función inicializa el bus SPI y configura los pines SCK, MOSI y SS como salida. Después de ejecutar esta función no se deben utilizar las funciones digitalWrite() o analogWrite() en los pines de SPI. SPI.end() Esta función realiza lo contrario a SPI.begin(), es decir, que des-inicializa el bus SPI. De esta forma es posible utilizar las funciones digitalWrite() o analogWrite() para controlar los pines de SPI nuevamente. SPI.beginTransaction() Esta función es utilizada para preparar el bus SPI al comienzo de una transferencia y tiene dos propósitos: Establecer los parámetros necesarios para la transferencia a realizar. Indicar que el bus SPI está siendo utilizado. De lo contrario otra librería que emplee el bus SPI podría intentar utilizarlo, generando errores en la comunicación. SPI.beginTransaction(mySettings); mySettings: es un objeto de tipo SPISettings con los parámetros para la transferencia. SPI.transfer() Esta función envía y recibe datos con un esclavo previamente seleccionado. SPI.endTransaction()Esta función libera el bus una vez que se han terminado la transferencia
Implementación
Ejemplo de implementación como Maestro y como Esclavo: https://www.makerguides.com/es/master-slave-spi-communication-arduino/
SPI vs I2C