USART, UART, RS232, USB, SPI, I2C, TTL, ecc. Cosa sono tutti questi e come si relazionano tra loro?


166

Come appassionato di elettronica per principianti, ho sentito questi termini e molti altri sono stati gettati ovunque. Alla radice, capisco che sono tutti basati sulla comunicazione tra dispositivi, computer, periferiche, ecc.

Ho una comprensione di base di come funzionano tutti, ma mi confondo quando vedo così tanti di loro e ho difficoltà a capire come si relazionano tra loro. Ad esempio, UART è un sottoinsieme di USART? Qual è la differenza tra RS232 e seriale? Quali sono le differenze principali tra tutti questi metodi di comunicazione: affidabilità, costo, applicazione, velocità, requisiti hardware?

Se puoi immaginare, ho tutti questi termini scritti su carte, sparsi sul tavolino da caffè e ho bisogno di qualcuno che mi aiuti a organizzare la mia comprensione. Perdonami se questa domanda è un po 'vaga, ma sento davvero che è la natura di questa domanda tutti insieme.


Risposte:


253

Seriale è una parola d'ordine per tutto ciò che è "Divisione del tempo multiplexato", per usare un termine costoso. Significa che i dati vengono inviati diffusi nel tempo, molto spesso un singolo bit dopo l'altro. Tutti i protocolli che stai nominando sono protocolli seriali.

UART, per Universal Asynchronous Receiver Transmitter, è uno dei protocolli seriali più utilizzati. È vecchio quasi quanto me e molto semplice. La maggior parte dei controller ha un UART hardware integrato. Utilizza una singola linea di dati per la trasmissione e una per la ricezione di dati. Molto spesso i dati a 8 bit vengono trasferiti, come segue: 1 bit di avvio (basso livello), 8 bit di dati e 1 bit di arresto (alto livello). Il bit di avvio di basso livello e il bit di arresto di alto livello indicano che c'è sempre una transizione da alta a bassa per iniziare la comunicazione. Questo è ciò che descrive UART. Nessun livello di tensione, quindi puoi averlo a 3,3 V o 5 V, qualunque sia il tuo microcontrollore. Si noti che i microcontrollori che desiderano comunicare tramite UART devono concordare la velocità di trasmissione, la velocità in bit, poiché hanno solo i bit di inizio per la sincronizzazione. Si chiama comunicazione asincrona.

Per comunicazioni a lunga distanza (che non devono essere centinaia di metri) l'UART 5 V non è molto affidabile, ecco perché viene convertito in una tensione più alta, in genere +12 V per uno "0" e -12 V per uno " 1" . Il formato dei dati rimane lo stesso. Quindi hai RS-232 (che in realtà dovresti chiamare EIA-232, ma nessuno lo fa).

La dipendenza dal timing è uno dei maggiori svantaggi di UART e la soluzione è USART , per il trasmettitore ricevitore sincrono / asincrono universale. Questo può fare UART, ma anche un protocollo sincrono. In sincrono non ci sono solo dati, ma anche un clock trasmesso. Ad ogni bit, un impulso di clock indica al ricevitore che dovrebbe bloccare quel bit. I protocolli sincroni richiedono una larghezza di banda maggiore, come nel caso della codifica Manchester, o un filo aggiuntivo per l'orologio, come SPI e I2C.

SPI (Serial Peripheral Interface) è un altro protocollo seriale molto semplice. Un master invia un segnale di clock e ad ogni impulso di clock si sposta di un bit verso lo slave e un bit in ingresso, proveniente dallo slave. I nomi dei segnali sono quindi SCK per clock, MOSI per Master Out Slave In e MISO per Master In Slave Out. Utilizzando i segnali SS (Slave Select) il master può controllare più di uno slave sul bus. Esistono due modi per collegare più dispositivi slave a un master, uno è menzionato sopra, ad esempio utilizzando la selezione slave e l'altro è il collegamento in cascata, utilizza meno pin hardware (selezionare le linee), ma il software diventa complicato.

I2C(Inter-Integrated Circuit, pronunciato "I squadrato C") è anche un protocollo sincrono, ed è il primo che vediamo che contiene un po 'di "intelligenza"; gli altri, stupidamente, spostavano i bit dentro e fuori, e questo era quello. I2C utilizza solo 2 fili, uno per l'orologio (SCL) e uno per i dati (SDA). Ciò significa che master e slave inviano dati sullo stesso filo, sempre controllati dal master che crea il segnale di clock. I2C non utilizza selezioni slave separate per selezionare un determinato dispositivo, ma ha indirizzamento. Il primo byte inviato dal master contiene un indirizzo a 7 bit (in modo da poter utilizzare 127 dispositivi sul bus) e un bit di lettura / scrittura, indicando se anche i byte successivi verranno dal master o dovrebbero provenire dal schiavo. Dopo ogni byte, il destinatario deve inviare uno "0" per confermare la ricezione del byte, che il master si blocca con un impulso del nono clock. Se il master vuole scrivere un byte, lo stesso processo si ripete: il master inserisce bit dopo bit sul bus e ogni volta dà un impulso di clock per segnalare che i dati sono pronti per la lettura. Se il master desidera ricevere dati, genera solo gli impulsi di clock. Lo slave deve fare attenzione che il prossimo bit sia pronto quando viene dato l'impulso di clock. Questo protocollo è brevettato da NXP (precedentemente Phillips), per risparmiare sui costi di licenza, Atmel usando la parola TWI (interfaccia a 2 fili) che corrisponde esattamente a I2C, quindi qualsiasi dispositivo AVR non avrà I2C ma avrà TWI. Se il master desidera ricevere dati, genera solo gli impulsi di clock. Lo slave deve fare attenzione che il prossimo bit sia pronto quando viene dato l'impulso di clock. Questo protocollo è brevettato da NXP (precedentemente Phillips), per risparmiare sui costi di licenza, Atmel usando la parola TWI (interfaccia a 2 fili) che corrisponde esattamente a I2C, quindi qualsiasi dispositivo AVR non avrà I2C ma avrà TWI. Se il master desidera ricevere dati, genera solo gli impulsi di clock. Lo slave deve fare attenzione che il prossimo bit sia pronto quando viene dato l'impulso di clock. Questo protocollo è brevettato da NXP (precedentemente Phillips), per risparmiare sui costi di licenza, Atmel usando la parola TWI (interfaccia a 2 fili) che corrisponde esattamente a I2C, quindi qualsiasi dispositivo AVR non avrà I2C ma avrà TWI.

Due o più segnali sullo stesso filo possono causare conflitti e si potrebbe avere un problema se un dispositivo invia uno "1" mentre l'altro invia uno "0". Pertanto il bus è cablato-OR: due resistori portano il bus a un livello elevato e i dispositivi inviano solo livelli bassi. Se vogliono inviare un livello elevato rilasciano semplicemente il bus.

TTL (Transistor Transistor Logic) non è un protocollo. È una tecnologia più vecchia per la logica digitale, ma il nome viene spesso utilizzato per fare riferimento alla tensione di alimentazione a 5 V, spesso erroneamente riferita a quello che dovrebbe essere chiamato UART.


A proposito di ognuno di questi puoi scrivere un libro e sembra che stia bene sulla mia strada. Questa è solo una breve panoramica, facci sapere se alcune cose necessitano di chiarimenti.


+1 solo su TTL, immagino che OP significhi TTL seriale che nella mia esperienza descrive i segnali UART prima del ricetrasmettitore / driver di bus RS232.
Kenny,

4
@Kenny - ma non esiste una cosa come "seriale TTL". Questo è UART. Cosa succede se la tensione è di 3,3 V? Il TTL si riferisce solo al 5 V.
Stevenvh

questo è ciò di cui sto parlando, gli I / O di UART sono spesso chiamati nella mia esperienza TTL Serial.
Kenny,

Risposta incredibile! Lo leggerò alcune altre volte e ti farò sapere se ho domande. Grazie Steven.
capcom,

8
Una scommessa migliore sarebbe pescare per l'età di Uart quindi :-)
Vaibhav Garg il

11

Questo è molto vicino al territorio di qualcosa in cui sarebbe meglio leggere articoli che porre domande per risposte personalizzate, ma per affrontare un punto importante che il produttore a volte sfoca:

Esistono due tipi base di interfacce seriali: sincrona e asincrona.

Le interfacce sincrone hanno i dati trasmessi con i loro tempi relativi a un orologio esplicito, che è anche fornito. L'esempio classico di questo è SPI, ma ci sono anche forme speciali come I2S per convertitori audio, JTAG, interfacce di configurazione FPGA, ecc. Molti canali di comunicazione parallela sono solo questa idea estesa allo spostamento di più bit contemporaneamente. Spesso, ma non sempre, vengono inviati per primi i bit più significativi.

Le interfacce asincrone hanno il tempo codificato nel flusso di dati stesso. Per le "porte seriali" e gli standard correlati come RS232, la temporizzazione della parola è relativa al bit di avvio e il ricevitore semplicemente campiona la linea agli intervalli giusti da quel momento in poi. Altre interfacce possono essere un po 'più complicate e richiedere il recupero dell'orologio più sofisticato utilizzando loop e algoritmi con blocco di fase. Un UART è un "Trasmettitore di ricevitore asincrono universale" - in realtà il nome di un blocco funzionale spesso usato per implementare una "porta seriale" con una certa flessibilità in termini di lunghezza, frequenza e inizio / fine delle parole. Cose come RS232, RS422, ecc. Sono standard per la segnalazione elettrica esterna dei dati che otterresti da questi - tensione, single ended o differenziale, se un 1 è alto o basso, ecc.

"USART" può essere una fonte di legittima confusione, in quanto è una sorta di dispositivo ibrido, un "Trasmettitore di ricevitore sincrono / asincrono inverso" Essenzialmente, questo è ed è più comunemente usato come UART, ma può anche essere configurato per generare (o considerare) un clock separato sincronizzato con i dati e potrebbe essere in grado di invertire l'ordine dei bit. Di solito è configurabile per interagire con SPI, ma potrebbe non essere in grado di rimuovere il tempo dedicato ai bit di avvio / arresto, quindi potrebbe non essere in grado di funzionare con qualcosa come I2S che può aspettarsi che i dati scorrano continuamente senza spazi tra le parole.


Spiegazione molto bella (Y) Mi è piaciuta molto la brevità. Grazie @chris
Avi Mehenwal

8

RS-232 è un protocollo seriale molto semplice originariamente utilizzato per modem e teletipi. È quella che viene comunemente chiamata porta seriale (o porta COM in MS-Windows). Sulla linea utilizza nominalmente livelli di ± 12V, ma possono variare notevolmente poiché il rilevamento è specificato a ± 3V. Esiste sempre un driver di linea (oggi di solito della famiglia MAX232) che converte questi livelli da e verso i livelli di segnale digitali interni di un computer o microcontrollore.

TTL significa Transistor-Transistor-Logic e ha il suo livello per zero logico vicino a 0 V e per quello logico vicino a 5 V. Spesso ogni logica a 5 V è chiamata TTL, sebbene oggigiorno la maggior parte dei circuiti sia costruita come CMOS. Oggi ci sono anche molti circuiti che funzionano a 3.3V, che non è più TTL.

Rispetto ai livelli interni, i livelli sulla linea RS-232 sono invertiti, + 12V corrisponde al minimo logico e -12V corrisponde al massimo logico, il che può creare confusione.

Per descrivere il formato dei dati uno di solito mostra il segnale logico. Quando la linea è inattiva è alta. Una trasmissione inizia con un bit di inizio basso, prima i bit di dati con il bit meno significativo, un bit di parità opzionale e uno o due bit di stop (1 logico). Questo si chiama trasmissione asincrona, poiché i bit di avvio e arresto sincronizzano i dati per ogni byte separatamente.

Un UART (Universal Asynchronous Receiver Transmitter) è un dispositivo in un computer o microcontrollore che esegue questo tipo di comunicazione asincrona.

Un USART (Universal Asynchronous Synchronous Receiver Transmitter) è un dispositivo che può inoltre eseguire alcuni tipi di trasmissione sincrona, quindi la S. aggiuntiva che varia, è necessario cercarla nella scheda tecnica.

SPI, I²C e USB sono storie diverse (e nel caso di USB molto lunghe).


1

Concordo con quanto menzionato sui protocolli SPI e CAN. Per migliorare le prestazioni, è stato progettato il protocollo CAN. In questo concetto di arbitrato viene utilizzato in cui due dispositivi sono pronti a comunicare, quindi a seconda della loro priorità ha luogo la trasmissione o la ricezione. CAN è ampiamente utilizzato in molti settori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.