Arduino – SPI (Español)

esta biblioteca le permite comunicarse con dispositivos SPI, con Arduino como dispositivo maestro.
para usar esta biblioteca
#include <SPI.h>

Una breve introducción al Serial Peripheral Interface (SPI)

Serial Peripheral Interface (SPI) es un protocolo de datos serie síncrono utilizado por microcontroladores para comunicarse con uno o más dispositivos periféricos rápidamente a distancias cortas. También se puede utilizar para la comunicación entre dos microcontroladores.,

Con una conexión SPI siempre hay un dispositivo maestro (generalmente un microcontrolador) que controla los dispositivos periféricos., Normalmente hay tres líneas comunes a todos los dispositivos:

  • MISO (Master in Slave Out) – la línea esclava para enviar datos al maestro,
  • MOSI (Master Out Slave In) – La línea maestra para enviar datos a los periféricos,
  • SCK (Serial Clock) – los pulsos de reloj que sincronizan la transmisión de datos generada por el maestro

y una línea específica para cada dispositivo:

  • Seleccionar): el PIN de cada dispositivo que el maestro puede usar para habilitar y deshabilitar dispositivos específicos.,

cuando el pin de selección de esclavo de un dispositivo es bajo, se comunica con el maestro. Cuando está alto, ignora al maestro. Esto le permite tener varios dispositivos SPI que comparten las mismas líneas MISO, MOSI y CLK.

para escribir código para un nuevo dispositivo SPI, debe tener en cuenta algunas cosas:

  • ¿Cuál es la velocidad SPI máxima que puede usar su dispositivo? Esto es controlado por el primer parámetro en SPISettings. Si está utilizando un chip clasificado a 15 MHz, use 15000000. Arduino usará automáticamente la mejor velocidad que sea igual o menor que el número que usa con SPISettings.,
  • ¿Los datos se desplazan primero en el Bit más significativo (MSB) o en el Bit menos significativo (LSB)? Esto es controlado por el segundo parámetro SPISettings, ya sea MSBFIRST o LSBFIRST. La mayoría de los chips SPI usan MSB first data order.
  • ¿El reloj de datos está inactivo cuando es alto o bajo? ¿Están las muestras en el borde ascendente o descendente de los pulsos del reloj? Estos modos son controlados por el tercer parámetro en SPISettings.

el estándar SPI está suelto y cada dispositivo lo implementa de manera un poco diferente. Esto significa que debe prestar especial atención a la hoja de datos del dispositivo al escribir su código.,

en términos generales, hay cuatro modos de transmisión. Estos modos controlan si los datos entran y salen en el borde ascendente o descendente de la señal del reloj de datos (llamada fase del reloj), y si el reloj está inactivo cuando está alto o bajo (llamado polaridad del reloj).,se according to this table:

Mode Clock Polarity (CPOL) Clock Phase (CPHA) Output Edge Data Capture
SPI_MODE0 0 0 Falling Rising
SPI_MODE1 0 1 Rising Falling
SPI_MODE2 1 0 Rising Falling
SPI_MODE3 1 1 Falling Rising

Once you have your SPI parameters, use SPI.,beginTransaction () para comenzar a usar el puerto SPI. El puerto SPI se configurará con todos sus ajustes. La forma más simple y eficiente de usar SPISettings es directamente dentro de SPI.beginTransaction().Por ejemplo:

SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));

Si otras bibliotecas utilizan SPI de interrupciones, se les impedirá acceder a SPI hasta que llame a SPI.endTransaction(). La configuración de SPI se aplica al inicio de la transacción y SPI.endTransaction() no cambia la configuración de SPI., A menos que usted, o alguna biblioteca, llame a beginTransaction por segunda vez, la configuración se mantiene. Debe intentar minimizar el tiempo entre antes de llamar SPI.endTransaction(), para una mejor compatibilidad si su programa se usa junto con otras bibliotecas que usan SPI.

con la mayoría de los dispositivos SPI, después de SPI.beginTransaction(), escribirá el pin de selección de esclavo bajo, llamará SPI.transfer() cualquier número de veces para transferir datos, luego escribirá el pin SS alto y finalmente llamará SPI.endTransaction().

para más información sobre SPI, vea la página de Wikipedia sobre SPI.,

conexiones

la siguiente tabla muestra en qué pines se dividen las líneas SPI en las diferentes placas Arduino:

tenga en cuenta que MISO, MOSI y SCK están disponibles en una ubicación física consistente en el encabezado ICSP; esto es útil, por ejemplo, para diseñar un escudo que funcione en cada placa.

nota sobre el pin Slave Select (SS) en tarjetas basadas en AVR

todas las tarjetas basadas en AVR tienen un pin SS que es útil cuando actúan como un esclavo controlado por un maestro externo., Dado que esta biblioteca solo admite el modo maestro, este pin debe establecerse siempre como salida, de lo contrario, la interfaz SPI podría ponerse automáticamente en modo esclavo por hardware, lo que haría que la biblioteca no funcionara.

sin embargo, es posible utilizar cualquier pin como Slave Select (SS) para los dispositivos. Por ejemplo, Arduino Ethernet shield utiliza el pin 4 para controlar la conexión SPI a la tarjeta SD integrada y el pin 10 para controlar la conexión al controlador Ethernet.

ejemplos

  • Sensor de presión barométrica: lea la presión del aire y la temperatura de un sensor utilizando el protocolo SPI.,
  • Digital Pot Control: controle un potenciómetro digital AD5206 utilizando el protocolo SPI.

última revisión 24/12/2019 por SM

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *