Full screen

Share

Show pages

SPI
Start
Want to create interactive content? It’s easy in Genially!

Over 30 million people create interactive content in Genially

Check out what others have designed:

Transcript

SPI

Start

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?

¿Qué es SPI?

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.

Diagramas de conexiones

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

Funcionamiento

Hay cuatro formas en las que se puede muestrear el reloj SPI. CPOL es la polaridad del reloj. CPHA es la fase del reloj.

Polaridad y Fase de reloj en el bus SPI

Modos de funcionamiento

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)

• 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

Señales de SPI

• 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.

Características

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/

Implementación

SPI vs I2C

Next page

genially options

Show interactive elements