UART=Hardware, SPI=Protocolo?

Leí en algunos lugares, uno de ellos es este , que una de las principales diferencias entre UART y SPI es que el primero es un tipo de hardware y el segundo es un protocolo.

Estoy teniendo dificultades para comprender completamente esta noción. Esto es brevemente lo que obtuve hasta ahora del material de lectura que encontré buscando en Google, incrustado con algunas preguntas:

UART

UART es una pieza de hardware que se utiliza para comunicarse entre dos componentes. El UART convierte los datos paralelos que recibe de un bus de datos en un flujo de bits en serie que se transfieren a través de un solo cable y viceversa. Un UART usa solo 2 cables, uno para recibir y otro para transmitir. El resto de los detalles no son importantes para la forma de esta discusión.

SPI

SPI es un protocolo de comunicación síncrono (ya que utiliza un reloj) utilizado entre dispositivos.
Este protocolo utiliza 4 cables (si solo hay un esclavo presente):

  • MOSI (Master Out/Slave In): se utiliza para transmitir datos de maestro a esclavo
  • MISO (Master In/Slave Out): se utiliza para transmitir datos de esclavo a maestro
  • SCLK - (Reloj) - utilizado para sincronizar la transmisión de datos.
  • SS/CS - (Selección de esclavo/Selección de chip) - Cuando se baja, indica al chip que se comunique.

A diferencia de UART, transfiere bits en un flujo no dividido en paquetes (aquí comienza la confusión: se compara con UART). Los dispositivos que se comunican a través de SPI tienen una relación maestro-esclavo. El maestro es el dispositivo de control, generalmente un microcontrolador, mientras que el esclavo, generalmente algo como una pantalla, un sensor o un chip de memoria, recibe instrucciones del maestro. (Comprobación de cordura: cuando decimos que el maestro controla al esclavo, ¿simplemente nos referimos a la selección del esclavo por el cable SS/CS y la señalización del reloj?)

Diferencias entre UART y SPI

  • Número de cables: UART usa 2, SPI usa al menos 4
  • Sin bits de inicio/parada: los datos se envían continuamente sin interrupciones.
  • Número de dispositivos: UART solo puede tener 2, SPI puede conectar virtualmente una cantidad ilimitada de esclavos a un maestro
  • Hardware vs Protocolo: UART es un tipo de hardware, mientras que SPI es un protocolo.

Finalmente - la pregunta

Lo que más me confunde es esta última diferencia: hardware frente a protocolo. Parece que estos dos esquemas de comunicación se comparan de lado a lado en los mismos parámetros (Número de pines, bits de inicio/parada, Velocidad, etc.) - no se pueden comparar 2 entidades esencialmente diferentes basadas en los mismos parámetros, ¿verdad?

¿La diferencia es que UART es una pieza de hardware dedicada y SPI usa GPIO generales del microcontrolador?

No llamaría a SPI un protocolo, para mí, UART, SPI e I²C son solo capas físicas para la comunicación en serie. Pero luego aparece la palabra protocolo en los artículos de SPI y no en los de UART. Para mí, un protocolo es cómo deben organizarse los bytes para que tengan sentido para la comunicación. La capa física solo tiene que asegurarse de que se transmitan... Pero esa es solo mi opinión.
Un UART utiliza un protocolo de comunicación en serie asíncrona, por lo que si desea comparar manzanas con manzanas, compare la comunicación en serie asíncrona con SPI. en.wikipedia.org/wiki/Asynchronous_serial_communication Desafortunadamente, ninguno de estos es un estándar estricto.
El protocolo de comunicación es solo un conjunto de reglas para comunicarse entre dos entidades. UART tiene un conjunto de reglas (por ejemplo: el bit de inicio debe estar allí ... etc.). SPI tiene un conjunto de reglas (por ejemplo: los datos deben iniciarse en este borde, muestrearse en ese borde, etc.). Así que ambos son protocolos.
Lo más importante que debe recordar es que "UART" y "RS-232" no son lo mismo.
@Arsenal pero UART, SPI, I2C no son capas físicas. Son protocolos lógicos como se transmiten los bits. I2C solo uno que también define una capa física, pero UART y SPI no, son solo una forma lógica de transmitir bits. Simplemente utilizan E/S lógica TTL o CMOS estándar como capa física. Puede usar UART con muchas capas físicas diferentes usando un chip PHY como RS232, RS485, optoacoplador como MIDI, CAN o fibra óptica para construir su interfaz.
@Solo yo, sí, eso tiene sentido. Tengo que reordenar mi pensamiento. Entonces, básicamente, tiene un protocolo a nivel de dispositivo que maneja qué bytes significan qué y tiene un protocolo de transmisión (?) Que le dice qué señal significa qué (para llegar a los bytes). ¿Es esa una mejor manera de pensar en ello?

Respuestas (4)

No, UART no es necesariamente una pieza de hardware, ni SPI. Puede implementar ambos en software en un dispositivo que no tiene hardware UART o SPI. Por lo general, ambos se encuentran dentro de MCU como periféricos de hardware.

Un UART simplemente significa Transmisor receptor asíncrono universal. Utiliza el protocolo de encuadre de inicio y parada asíncrono para transmitir símbolos de datos con un número seleccionable de bits y bits de paridad para la verificación de errores. Para simplificar, supongamos que envía símbolos de datos de 8 bits que se denominan bytes. Entonces, un UART simplemente proporciona una interfaz serial asíncrona a nivel de bit.

SPI era originalmente un periférico de hardware simple para interactuar, como los chips TTL que tenían interfaces seriales sincronizadas. Simplemente descargó la transmisión de bytes del software al hardware, con polaridad de reloj y ajuste de fase seleccionables. Entonces, un SPI proporciona simplemente una interfaz serial síncrona orientada a bytes a nivel de bits.

Entonces, al final, ambos son protocolos sobre cómo enviar bits y bytes.

Pero eso es diferente de un protocolo que define lo que significan esos bytes. Por ejemplo, un chip SPI Flash define un protocolo sobre cómo usar la selección de chip para delimitar comandos y qué bytes son comandos y cuáles son datos, y cómo se usan para leer y escribir la memoria Flash a través del bus SPI a alto nivel. Lo mismo ocurre, por ejemplo, con el protocolo YModem, que define lo que significan esos bytes para poder enviar archivos a través de UART a alto nivel.

La mayoría de sus afirmaciones son incorrectas y hay muchos conceptos erróneos aquí...

una de las principales diferencias entre UART y SPI es que el primero es un tipo de hardware y el segundo es un protocolo.

No, eso es una tontería. Tampoco es un protocolo. Ambos son estándares de capa física y de enlace de datos. Consulte el "modelo OSI" que se enseña en cualquier clase para principiantes de comunicación de datos.

Estoy teniendo dificultades para comprender completamente esta noción.

No es de extrañar ya que es una tontería incorrecta...

UART es una pieza de hardware que se utiliza para comunicarse entre dos componentes.

Más bien, existe el bus UART, la capa de enlace de datos, y el componente físico UART, que se utiliza para comunicarse a través de ese bus. En los días en que los dinosaurios caminaban por la tierra, había un componente llamado 16550, desarrollado por National Semi, que era "el UART" y se colocaba en todas las computadoras PC.

Del mismo modo, necesita un periférico de hardware SPI. Aunque básicamente es solo un registro de desplazamiento glorificado adjunto a un montón de señales.

El UART convierte los datos paralelos que recibe de un bus de datos

La forma de abordar el UART depende del sistema. En los microcontroladores modernos, esto se maneja internamente y no tenemos que preocuparnos de cómo. Puede ser paralelo, se trata de cómo está diseñado el MCU y no tiene nada que ver con UART.

SPI es un síncrono (ya que usa un reloj)

Más bien, es síncrono ya que usa una señal de reloj junto con los datos. UART también registra sus datos, pero puede haber retrasos infinitos entre los bytes de datos. Los términos síncrono frente a asíncrono no son realmente tan útiles, son principalmente palabras de moda.

A diferencia de UART, transfiere bits en un flujo no dividido en paquetes

No, al igual que UART, transfiere un mínimo de 8 bits. Si hay algún tipo de protocolo de capa superior presente, dicta los formatos de los paquetes. Pero eso no es algo presente en la capa de enlace de datos, sino en la capa de aplicación.

Comprobación de cordura: cuando decimos que el maestro controla al esclavo, ¿simplemente nos referimos a la selección del esclavo por el cable SS/CS y la señalización del reloj?)

Significa que controla /SS así como el reloj. Por lo tanto, el maestro controla cuándo comienza la transmisión de datos y qué tan rápido es. El esclavo solo tiene que alinearse. Y, por lo general, esto significa que el esclavo debe tener los datos listos en todo momento, porque a menudo no puede saber cuándo es el momento de enviarlos. Hay muchas variaciones en esto, ya que SPI no está realmente tan bien estandarizado.

UART solo puede tener 2

Con estándares de capa más altos, como RS-485, puede crear redes más grandes. Por lo general, "redes en estrella" donde toda la información pasa a un maestro, quien luego la redirige. Pero también puede tener una forma de red multipunto, siempre que dos nodos no envíen al mismo tiempo. Es posible, pero en general bastante crudo.

El protocolo, desafortunadamente, puede tener muchos significados. en.wikipedia.org/wiki/Category:Physical_layer_protocols
@ Mattman944 ​​Bueno, sí, pero el significado de facto es un concepto de capa superior. Donde tiene bytes de sincronización, bytes de tamaño, carga útil, suma de verificación, etc. En la capa de enlace de datos hablamos de marcos y este es un término ampliamente estandarizado, también parte del "modelo OSI" mencionado. Entonces, en este nivel inferior, hablamos de marcos UART , marcos SPI, marcos CAN o lo que sea.
Si sabe dónde hay una tabla que asigna SPI al modelo OSI, sería realmente útil para el OP.
@Mattman944 ​​SPI específicamente no se usa a menudo con mucho en el camino de los protocolos de capa superior, ya que casi siempre es solo comunicación a bordo. En su mayoría, es una hoja de datos de componentes que dice algo así como "enviar 2 bytes para la dirección, luego 2 bytes para los datos, usando big endian". Ese es un protocolo de capa superior, aunque sea muy tosco. UART, por otro lado, puede tener niveles de aplicación complejos.
Encuentro la respuesta confusa. Primero dice que ninguno es un protocolo, y luego dice que ambos pertenecen al enlace de datos y a las capas físicas del modelo ISO. Estas capas del modelo ISO definen un protocolo sobre cómo se transmiten los bits o marcos entre dispositivos. Entonces, si existe un acuerdo mutuo entre dos dispositivos sobre cómo enviar y recibir bits, ¿cómo es que eso no es un protocolo entonces? Estoy de acuerdo, UART no es un protocolo, es un dispositivo que implementa la transmisión y recepción de datos mediante el protocolo de inicio y parada asíncrono.

UART significa Receptor-transmisor asíncrono universal, que Wikipedia define como Un receptor-transmisor asíncrono universal es un dispositivo de hardware informático para la comunicación en serie asíncrona en el que el formato de datos y las velocidades de transmisión son configurables.

Justme, quizás se refiere a una conexión en serie, que puede ser sobre un UART o también sobre software.

El UART a nivel de hardware es un sistema que serializará datos y los enviará bit por bit en una línea. Por sí mismo, no implementa ningún protocolo, ni hardware ni software, y puede usarse con transceptores y protocolos para generar buses como RS232, RS485, MODBUS, DMX, etc.

UART se usa a menudo para crear esos buses para luego comunicarse entre diferentes sistemas. A veces también se usa para comunicarse con módulos de hardware, como suele ser el caso de los módulos Bluetooth.

UART envía datos sin una línea de reloj y requiere que los dispositivos tengan la misma velocidad en baudios, lo que requiere configuración en ambos lados y también requiere un oscilador (reloj de algún tipo).

UART no tiene un lado esclavo/maestro, pero se puede implementar en el software.

SPI (Interfaz periférica en serie) en sí mismo también es una implementación de hardware y no contiene protocolo de software. Tiene un conjunto de reglas, como las líneas de datos, una línea de habilitación y un reloj como mínimo.

También considera que hay un maestro y un esclavo, el maestro controla el reloj y la línea de habilitación.

SPI no tiene reglas para el nivel lógico de las líneas, por lo que algunos chips pueden usar diferentes niveles lógicos.

El formato de datos enviado a través de SPI tampoco se especifica y lo implementa el software según con qué se está comunicando.

SPI generalmente se usa dentro de una PCB para comunicarse con otros circuitos integrados.

Debido a que el SPI tiene una línea de reloj, no hay necesidad de configuración en el lado del esclavo, lo que también significa que el esclavo no necesita tener un oscilador.

También hay algunos buses que se basan en SPI que define más reglas como SPI_RX o alguna otra que depende del fabricante.

SPI se utiliza principalmente para la comunicación entre chips dentro de una PCB.

UART se usa principalmente para la comunicación a través de cables, pero a veces también con algunos módulos dentro de una PCB.

Podría decirse que SPI y UART por sí solos tienen velocidades similares. Uart generalmente opera a una velocidad más lenta porque se usa en distancias más largas y debido a las tolerancias de frecuencia del oscilador, mientras que SPI no depende de la sincronización del reloj.

No creo que sea útil mezclar, por ejemplo, RS-232 y Modbus. RS-232, etc. son extensiones físicas de UART, mientras que Modbus es una capa de aplicación en la parte superior.
Para transferir datos entre dos UART, ambos deben estar de acuerdo sobre cómo se serializan los datos entre ellos, y si un acuerdo sobre cómo serializar datos entre dos dispositivos no es un protocolo, ¿qué es? Diría que el UART implementa un determinado protocolo sobre cómo serializar los datos, el protocolo de parada de inicio asíncrono.

UART nació en los años 70 mientras que SPI en los 90.

Tanto las interfaces UART como SPI tienen una gran cantidad de transistores CMOS en su interior, por lo que son interfaces de hardware. La totalidad de estos transistores CMOS se denomina "controlador de hardware".

UART tiene 2 pines: TX, RX

SPI tiene 4 pines: TX, RX, CLOCK, ENABLE

Ambos transmiten y reciben un byte a la vez, es decir, uno tras otro.

SPI es mucho más rápido que UART porque los bits se escriben y leen en el borde ascendente o descendente de la señal CLOCK. Aceleras el ritmo del reloj, aceleras las comunicaciones.

UART no tiene soporte de reloj, por lo tanto, el dispositivo receptor debe generar una señal de reloj local que no puede estar sincronizada con la transmisora. Eso significa que la frecuencia del reloj no puede ser demasiado alta y las comunicaciones son bastante lentas.


Para responder tu pregunta:

Un protocolo, en informática es un conjunto de reglas.

El hardware en electrónica es un conjunto de transistores, diodos, resistencias, etc., interconectados entre sí.


El hardware está diseñado para ejecutar protocolos.

La serie asíncrona existía mucho antes de los años 70 y spi estaba disponible como periférico de hardware en los años 80.
Creo que tus años están desfasados ​​por al menos una década o dos. El primer UART como IC puede haber estado disponible a principios de los años 70, pero antes de eso, los UART se construyeron a partir de puertas lógicas discretas y los primeros fueron dispositivos electromecánicos. SPI como un periférico MCU se introdujo por primera vez en los años 80, pero cambió muy poco ya que las comunicaciones seriales síncronas ya eran una cosa.
Ha usado nombres no estándar para pines SPI, y usar TX y RX es particularmente confuso porque estos nombres de pines tienen un significado diferente al que tienen para un UART.
En efecto. SPI no está estandarizado, pero los nombres estándar de facto son MOSI, MISO y /SS (invertido) y deben usarse. El reloj se puede llamar diferentes cosas, SCLK, etc.
"Aceleras el ritmo del reloj, aceleras las comunicaciones". Eso también es muy cierto para UART.
La velocidad de UART está limitada a 1 Mbit/s. La velocidad SPI puede ir 10 veces más rápido.
Eso no es cierto, los µC modernos admiten 20 Mbaud sobre UART, el cargador de arranque de mi teléfono inteligente funciona con 5 Mbaud. Sí, SPI todavía puede ir más rápido. Pero la oración que cité es cierta básicamente para cualquier comunicación: es solo una cuestión de dónde toca el techo con ella.
SPI es una interfaz isócrona y siempre será 10 veces más rápida que UART. SPI de 75 MHz es común en muchos dispositivos flash seriales.
@EnricoMigliore Ni la velocidad de UART ni la de SPI están limitadas por nada excepto por la implementación. He usado comunicaciones UART con PC a 3 Mbps durante años, principalmente porque era la velocidad más rápida de la que era capaz el chip del puerto serie USB. Las interfaces que usan UART como RS-485 o RS-422 generalmente se cree que alcanzan los 10 Mbps para muchos medidores. SPI puede ir más rápido, pero como es sincrónico, tiene el problema de que el maestro espera el tiempo de vuelo para que el reloj sincronice los datos del esclavo. Por lo tanto, no puede tener un bus SPI de 75 MHz a menos que la distancia sea extremadamente pequeña, como unos pocos centímetros.