Las diferencias entre los tres protocolos de bus serie SPI, I2C y UART
La primera diferencia es, por supuesto, el nombre:
SPI (Serial Peripheral Interface: Interfaz periférica serie:
I2C (INTER IC BUS) p); >
UART (Universal Asynchronous ReceiverTransmisor: Transmisor Receptor Asíncrono Universal)
En segundo lugar, la diferencia radica en las líneas de señal eléctrica:
El bus SPI se compone de tres líneas de señal. : reloj de línea serial (SCLK), salida de datos serial (SDO), entrada de datos serial (SDI). El bus SPI puede conectar varios dispositivos SPI entre sí. El dispositivo SPI que proporciona el reloj serie SPI es el dispositivo maestro o host SPI (Maestro), y otros dispositivos son esclavos SPI o dispositivos esclavos (Esclavo). Se puede lograr una comunicación full-duplex entre los dispositivos maestro y esclavo. Cuando hay varios dispositivos esclavos, se puede agregar una línea de selección de dispositivo esclavo.
Si utilizas un puerto IO general para simular el bus SPI, debes tener un puerto de salida (SDO), un puerto de entrada (SDI), y el otro puerto depende del tipo de dispositivo implementado. desea implementar un dispositivo maestro-esclavo, necesita puertos de entrada y salida. Si solo implementa el dispositivo maestro, necesita el puerto de salida. Si solo implementa el dispositivo esclavo, solo necesita el puerto de entrada.
El bus I2C es un estándar de interfaz multimaestro en serie, bidireccional, de dos cables (SCL, SDA) con un mecanismo de arbitraje de bus, que es muy adecuado para la comunicación de corto alcance y sin contacto entre Dispositivos de comunicaciones periódicas de datos. En su sistema de protocolo, la dirección del dispositivo de destino se llevará al transmitir datos, de modo que se pueda realizar la conexión en red del dispositivo.
Si se utiliza un puerto IO general para simular el bus I2C y realizar la transmisión bidireccional, se requieren un puerto de entrada y salida (SDA) y un puerto de salida (SCL). (Nota: sé relativamente poco sobre I2C, por lo que la descripción aquí puede estar incompleta)
El bus UART es un puerto serie asíncrono, por lo que su estructura es generalmente mucho más compleja que los dos primeros puertos serie síncronos. Generalmente está determinado por la velocidad en baudios. Consiste en un generador (la velocidad en baudios generada es igual a 16 veces la velocidad en baudios de transmisión), un receptor UART y un transmisor UART. El hardware consta de dos líneas, una para enviar y otra. uno para recibir.
Obviamente, si se utiliza un puerto IO general para simular el bus UART, se requieren un puerto de entrada y un puerto de salida.
En tercer lugar, es obvio desde el segundo punto que SPI y UART pueden lograr dúplex completo, pero I2C no.
Cuarto, ¡echemos un vistazo a las opiniones de personas increíbles!
wudanyu: I2C tiene menos líneas. Creo que es más poderoso que UART y SPI, pero también es técnicamente más problemático porque I2C necesita soporte IO bidireccional y usa resistencias pull-up. a La capacidad de interferencia es débil y generalmente se usa para la comunicación entre chips en la misma placa, y se usa con menos frecuencia para comunicaciones de larga distancia. La implementación de SPI es más sencilla. UART requiere una velocidad de baudios fija, lo que significa que los intervalos entre dos bits de datos deben ser iguales, mientras que SPI no importa porque es un protocolo sincronizado.
mouse rápido: I2C es un poco más lento que SPI y el protocolo es un poco más complicado que SPI, pero hay menos conexiones que SPI estándar.
Introducción a la interfaz SPI (republicada)
En los últimos días, encontré flash usando la interfaz SPI y luego me di cuenta de que el flash también puede ser en serie. Realmente era una rana en el pozo. Lo encontré. Parte de la información sobre la interfaz SPI está incompleta. Más tarde encontré información en inglés, la traduje y agregué mi conocimiento personal para compilar este artículo. .
El nombre completo de la interfaz SPI es "Serial Peripheral Interface", que significa interfaz periférica en serie. Fue definida por primera vez por Motorola en sus procesadores de la serie MC68HCXX. La interfaz SPI se utiliza principalmente entre EEPROM, FLASH, reloj en tiempo real, convertidor AD, procesador de señal digital y decodificador de señal digital.
La interfaz SPI es una transmisión de datos en serie síncrona entre la CPU y los dispositivos periféricos de baja velocidad. Bajo el pulso de cambio del dispositivo maestro, los datos se transmiten bit a bit, con el bit alto al frente y. el bit bajo en la parte posterior es un doble completo. En las comunicaciones industriales, la velocidad de transmisión de datos es generalmente más rápida que la del bus I2C y la velocidad puede alcanzar varios Mbps.
La interfaz SPI funciona en modo maestro-esclavo. Este modo suele tener un dispositivo maestro y uno o más dispositivos esclavos. Su interfaz incluye las siguientes cuatro señales:
(1 ) MOSI – salida de datos del dispositivo maestro, entrada de datos del dispositivo esclavo
(2) MISO – entrada de datos del dispositivo maestro, salida de datos del dispositivo esclavo
(3) SCLK – señal de reloj, controlada por el Dispositivo maestro generado
(4)/SS – señal de habilitación del dispositivo esclavo, controlada por el dispositivo maestro
En la comunicación punto a punto, la interfaz SPI no requiere operaciones de direccionamiento y Esta comunicación totalmente dúplex parece simple y eficiente.
En un sistema con múltiples dispositivos esclavos, cada dispositivo esclavo requiere una señal de habilitación independiente y el hardware es un poco más complicado que el sistema I2C.
El hardware interno de la interfaz SPI son en realidad dos registros de desplazamiento simples. Los datos transmitidos son de 8 bits. Se transmiten bit a bit bajo la señal de habilitación del dispositivo esclavo y el pulso de desplazamiento generado por el dispositivo maestro. posición delante, posición baja detrás. Como se muestra en la figura siguiente, los datos cambian en el flanco descendente de SCLK y un bit de datos se almacena en el registro de desplazamiento.
Ilustración del hardware interno de la interfaz SPI:
Finalmente, una deficiencia de la interfaz SPI: no hay un control de flujo especificado ni un mecanismo de respuesta para confirmar si se han recibido datos. .
Interfaz SPI
Introducción a la interfaz SPI
SPI es una especificación de transmisión en serie síncrona introducida por Motorola de los Estados Unidos y se utiliza a menudo como periférico en serie. Chip para microcontroladores. Interfaz extendida. SPI tiene 4 pines: SS (línea de selección de esclavo), SDO (línea de salida de datos en serie), SDI (línea de entrada de datos en serie) y SCK (línea de reloj en serie síncrona). SPI puede enviar y recibir 8 (16) bits de datos simultáneamente utilizando comunicación full-duplex. El proceso es el siguiente: el host inicia el proceso de envío y envía una señal de pulso de reloj. Los datos en el registro de desplazamiento maestro se mueven al. registro de desplazamiento esclavo a través de SDO Al mismo tiempo, el registro de desplazamiento esclavo Los datos en el registro de bits se mueven al registro de desplazamiento principal a través de SDI. Después de 8 (16) pulsos de reloj, el reloj se detiene y los 8 (16) bits de datos en el registro de desplazamiento maestro se mueven al registro de desplazamiento esclavo y luego se cargan automáticamente en el búfer de recepción esclavo El búfer de recepción esclavo El dispositivo. El bit de indicador completo (BF) y el bit de indicador de interrupción (SSPIF) se establecen en "1". De la misma manera, todos los datos de 8 bits en el registro de desplazamiento esclavo se mueven al registro principal y luego se cargan automáticamente en el búfer de recepción principal. El bit de indicador completo (BF) del búfer de recepción principal y el bit de indicador de interrupción (SSPIF) se establecen en "1". Después de que la CPU principal detecta el bit de bandera completo del búfer de recepción principal o el bit de bandera de interrupción se establece en 1, puede leer los datos en el búfer de recepción. De manera similar, después de que la CPU esclava detecta que el bit de indicador lleno del búfer de recepción esclavo o el bit de indicador de interrupción están configurados, los datos en el búfer de recepción se pueden leer, completando así un proceso de comunicación mutua. Aquí, dsPIC30F6014 se configura como controlador maestro y ISD4002 es el dispositivo esclavo. El proceso de control de comunicación se completa a través del puerto SPI.
Protocolo de bus SPI
SPI es una estructura de bus en anillo, que consta de ss (cs), sck, sdi y sdo. Su sincronización es realmente muy simple y está principalmente bajo el control de sck. , dos registros de desplazamiento bidireccionales realizan el intercambio de datos.
Supongamos que el siguiente registro de 8 bits contiene los datos a enviar, 10101010, que se envía en el flanco ascendente, se recibe en el flanco descendente y el bit alto se envía primero.
Luego, cuando llegue el primer flanco ascendente, los datos serán sdo=1; Cuando llegue el flanco descendente, el nivel en sdi se almacenará en el registro, luego el registro = 0101010sdi. De esta manera, después de 8 pulsos de reloj, el contenido de los dos registros se intercambiará entre sí. De esta manera, se completa una secuencia de sincronización spi.
Ejemplo:
Supongamos que el maestro y el esclavo están listos para la inicialización: y el sbuff del maestro=0xaa, el sbuff del esclavo=0x55, lo siguiente pasará a paso los 8 ciclos de reloj de spi Demuestre la situación de los datos: suponga que los datos se envían en el flanco ascendente
Pulse host sbuff esclavo sbuff sdi sdo
0 10101010 01010101 0 0
1 en 0101010x 1010101x 0 1
1 abajo 01010100 10101011 0 1
2 arriba 1010100x 0101011x 1 0
2 abajo 10101001 01010110 1 0
3 arriba 0101001x 1010110x 0 1
3 abajo 01010010 10101101 0 1
4 arriba 1010010x 0101101x 1 0
4 abajo 10100101 01011010 1 0
5 arriba 0100101x 1011010x 0 1
5 abajo 01001010 10110101 0 1
6 arriba 1001010x 0110101x 1 0
6 abajo 10010101 01101010 1 0 p>
7 en 0010101x 1101010x 0 1
7 en 00101010 11010101 0 1
8 en 0101010x 1010101x 1 0
8 en 01010101 10101010 1 0
De esta manera, se completa el intercambio de 8 bits de los dos registros. La parte superior representa el flanco ascendente y la parte inferior representa el flanco descendente. Sdi y sdo son relativos al host. Cuando el pin ss se usa como maestro, el esclavo puede bajarlo para seleccionarlo pasivamente como esclavo. Cuando se usa como esclavo, se puede usar como pin de selección de chip. Según el análisis anterior, un ciclo de transmisión completo es de 16 bits, es decir, dos bytes, porque primero el host envía un comando, luego el esclavo prepara los datos de acuerdo con el nombre del host y el host vuelve a leer los datos. en el siguiente ciclo de reloj de 8 bits
El bus SPI es una interfaz síncrona de tres cables lanzada por Motorola. Se comunica de forma síncrona en serie de 3 cables: una línea de reloj SCK y una línea de entrada de datos. MOSI y una línea de salida de datos MISO; utilizados para la CPU y varios dispositivos periféricos realizan comunicaciones en serie síncronas y dúplex. Las características principales de SPI son: puede enviar y recibir datos en serie al mismo tiempo; puede funcionar como maestro o esclavo; proporciona un reloj de frecuencia programable; tiene un indicador de interrupción al final de la transmisión; protección contra conflictos; tiene protección de competencia de autobuses, etc. La Figura 3 muestra los cuatro modos de trabajo del bus SPI, de los cuales los más utilizados son los modos SPI0 y SPI3 (representados por líneas sólidas):
Figura 2 Los cuatro modos de trabajo del bus SPI
Interfaz de bus SPI y temporización
Para intercambiar datos con periféricos, el módulo SPI emite polaridad de reloj síncrono en serie y la fase se puede configurar de acuerdo con los requisitos de funcionamiento de los periféricos. La polaridad del reloj (. CPOL) es El protocolo de transporte no tiene un impacto significativo.
Si CPOL=0, el estado inactivo del reloj de sincronización en serie es de nivel bajo; si CPOL=1, el estado inactivo del reloj de sincronización en serie es de nivel alto; La fase del reloj (CPHA) se puede configurar para seleccionar uno de dos protocolos de transmisión diferentes para la transmisión de datos. Si CPHA = 0, los datos se muestrean en el primer flanco de transición (ascendente o descendente) del reloj de sincronización en serie; si CPHA = 1, los datos se muestrean en el segundo flanco de transición (ascendente o descendente) del reloj de sincronización en serie. muestreo. La fase del reloj de tono y la polaridad del módulo principal SPI y los periféricos que se comunican con él deben ser consistentes. La sincronización de la interfaz del bus SPI se muestra en la figura.
Diseño del módulo de función SPI
Según la definición de función y el principio de funcionamiento de SPI, todo el núcleo IP se divide en 8 submódulos: módulo de interfaz uC, división de frecuencia de reloj Módulo y módulo FIFO de transmisión de datos, módulo FIFO de recepción de datos, módulo de máquina de estado, módulo lógico de envío de datos, módulo lógico de recepción de datos y módulo de formulario de interrupción.
Un análisis en profundidad de los cuatro protocolos de transmisión de SPI puede encontrar que de acuerdo con un protocolo, siempre que se convierta el reloj síncrono en serie, se pueden obtener los tres protocolos restantes. Para simplificar las especificaciones de diseño, si se van a transmitir múltiples datos continuamente, se inserta una espera inactiva del reloj en serie entre dos transmisiones de datos, de modo que la máquina de estados solo necesita dos estados (inactivo y en funcionamiento) para funcionar correctamente.
Reimpreso de/kai_zone/article/details/53302704