USART, UART, RS232, USB, SPI, I2C, TTL, etc. o que são todos esses e como eles se relacionam?

166

Como um iniciante em hobby de eletrônicos, ouvi esses termos e muito mais serem lançados em todos os lugares. Na sua raiz, entendo que todos eles são baseados na comunicação entre dispositivos, computadores, periféricos etc.

Eu tenho um entendimento básico de como todos eles funcionam, mas fico confuso quando vejo muitos deles e estou tendo dificuldade em entender como eles se relacionam. Por exemplo, o UART é um subconjunto do USART? Qual é a diferença entre RS232 e Serial? Quais são as principais diferenças entre todos esses métodos de comunicação: confiabilidade, custo, aplicação, velocidade, requisitos de hardware?

Se você pode imaginar, tenho todos esses termos escritos em cartões, espalhados na mesa de café, e preciso de alguém para me ajudar a organizar meu entendimento. Perdoe-me se esta pergunta é um pouco vaga, mas eu realmente sinto que é a natureza dessa questão todos juntos.

Capcom
fonte
pergunta relacionada: Diferença entre UART e RS232?
Nick Alexeev

Respostas:

253

Serial é uma palavra guarda-chuva para tudo o que é "Time Division Multiplexed", para usar um termo caro. Isso significa que os dados são enviados espalhados ao longo do tempo, geralmente um bit após o outro. Todos os protocolos que você está nomeando são protocolos seriais.

UART, para o Transmissor universal de receptor assíncrono, é um dos protocolos seriais mais usados. É quase tão antigo quanto eu, e muito simples. A maioria dos controladores possui um UART de hardware a bordo. Ele usa uma única linha de dados para transmitir e outra para receber dados. Na maioria das vezes, os dados de 8 bits são transferidos da seguinte forma: 1 bit de início (nível baixo), 8 bits de dados e 1 bit de parada (nível alto). O bit de início de baixo nível e o bit de parada de alto nível significam que sempre há uma transição de alto a baixo para iniciar a comunicação. É isso que descreve o UART. Não há nível de tensão, portanto você pode obtê-lo em 3,3 V ou 5 V, conforme o seu microcontrolador. Observe que os microcontroladores que desejam se comunicar via UART precisam concordar com a velocidade de transmissão, a taxa de bits, pois possuem apenas os bits iniciais de ponta para sincronizar. Isso é chamado de comunicação assíncrona.

Para comunicação de longa distância (que não precisa ser centenas de metros), o UART de 5 V não é muito confiável, é por isso que é convertido em uma voltagem mais alta, geralmente +12 V para um "0" e -12 V para um " 1 " O formato dos dados permanece o mesmo. Então você tem o RS-232 (que você realmente deveria chamar EIA-232, mas ninguém o faz).

A dependência de tempo é uma das grandes desvantagens do UART, e a solução é USART , para o Transmissor universal de receptor síncrono / assíncrono. Isso pode fazer o UART, mas também um protocolo síncrono. Em síncrono, não há apenas dados, mas também um relógio transmitido. A cada bit, um pulso de relógio informa ao receptor que ele deve trancá-lo. Protocolos síncronos precisam de uma largura de banda maior, como no caso da codificação Manchester, ou de um fio extra para o relógio, como SPI e I2C.

O SPI (Serial Peripheral Interface) é outro protocolo serial muito simples. Um mestre envia um sinal de relógio e, a cada pulso de relógio, ele muda um pouco para o escravo, e um pouco para dentro, vindo do escravo. Os nomes dos sinais são, portanto, SCK para clock, MOSI para Master Out Slave In e MISO para Master In Slave Out. Ao usar os sinais SS (Seleção de Escravo), o mestre pode controlar mais de um escravo no barramento. Existem duas maneiras de conectar vários dispositivos escravos a um mestre, um mencionado acima, ou seja, usando o slave select e o outro é encadeamento em série, ele usa menos pinos de hardware (linhas selecionadas), mas o software fica complicado.

I2C(Circuito Inter-Integrado, pronunciado "I ao quadrado C") também é um protocolo síncrono, e é o primeiro que vemos com alguma "inteligência"; os outros mudaram tristemente os bits para dentro e para fora, e foi isso. O I2C usa apenas 2 fios, um para o relógio (SCL) e outro para os dados (SDA). Isso significa que o mestre e o escravo enviam dados pelo mesmo fio, novamente controlados pelo mestre que cria o sinal do relógio. O I2C não usa o Slave Selects separado para selecionar um dispositivo específico, mas possui endereçamento. O primeiro byte enviado pelo mestre possui um endereço de 7 bits (para que você possa usar 127 dispositivos no barramento) e um bit de leitura / gravação, indicando se o próximo byte (s) também virá do mestre ou deve vir do escravo. Após cada byte, o destinatário deve enviar um "0" para confirmar a recepção do byte, que o mestre trava com um nono pulso de relógio. Se o mestre quiser escrever um byte, o mesmo processo se repete: o mestre coloca bit após bit no barramento e cada vez dá um pulso de clock para sinalizar que os dados estão prontos para serem lidos. Se o mestre deseja receber dados, ele gera apenas os pulsos do relógio. O escravo deve cuidar para que o próximo bit esteja pronto quando o pulso do relógio for dado. Esse protocolo é patenteado pela NXP (anteriormente Phillips), para economizar custos de licenciamento, a Atmel usa a palavra TWI (interface de 2 fios), exatamente igual à I2C, portanto, qualquer dispositivo AVR não terá I2C, mas terá TWI. Se o mestre deseja receber dados, ele gera apenas os pulsos do relógio. O escravo deve cuidar para que o próximo bit esteja pronto quando o pulso do relógio for dado. Esse protocolo é patenteado pela NXP (anteriormente Phillips), para economizar custos de licenciamento, a Atmel usa a palavra TWI (interface de 2 fios), exatamente igual à I2C, portanto, qualquer dispositivo AVR não terá I2C, mas terá TWI. Se o mestre deseja receber dados, ele gera apenas os pulsos do relógio. O escravo deve cuidar para que o próximo bit esteja pronto quando o pulso do relógio for dado. Esse protocolo é patenteado pela NXP (anteriormente Phillips), para economizar custos de licenciamento, a Atmel usa a palavra TWI (interface de 2 fios), exatamente igual à I2C, portanto, qualquer dispositivo AVR não terá I2C, mas terá TWI.

Dois ou mais sinais no mesmo fio podem causar conflitos, e você teria um problema se um dispositivo enviar um "1" enquanto o outro enviar um "0". Portanto, o barramento é conectado com OU: dois resistores puxam o barramento para um nível alto e os dispositivos enviam apenas níveis baixos. Se eles querem enviar um nível alto, simplesmente soltam o ônibus.

TTL (Transistor Transistor Logic) não é um protocolo. É uma tecnologia mais antiga para lógica digital, mas o nome é frequentemente usado para se referir à tensão de alimentação de 5 V, geralmente se referindo incorretamente ao que deveria ser chamado de UART.


Sobre cada um deles, você pode escrever um livro, e parece que estou no meu caminho. Esta é apenas uma breve visão geral, deixe-nos saber se algumas coisas precisam de esclarecimentos.

stevenvh
fonte
+1 apenas no TTL, acho que o OP significa TTL serial que, na minha experiência, descreve os sinais UART antes do driver do transceptor / barramento RS232.
Kenny
4
@ Kenny - mas não existe algo como "TTL serial". Isso é UART. E se a tensão for de 3,3 V? O TTL só se refere ao 5 V.
stevenvh
sobre o que estou falando, as E / Ss do UART são frequentemente chamadas na minha experiência como TTL Serial.
Kenny
Resposta surpreendente! Vou ler mais algumas vezes e informar se tiver dúvidas. Obrigado Steven.
Capcom
8
A melhor aposta seria para pescar Uart idade então :-)
Vaibhav Garg
11

Isso está muito próximo do território de algo em que você leria melhor os artigos do que fazer perguntas para respostas personalizadas, mas para abordar um ponto importante que o fabricante às vezes esbate:

Existem dois tipos básicos de interfaces seriais: síncrona e assíncrona.

As interfaces síncronas têm os dados transmitidos com seu tempo em relação a um relógio explícito, que também é fornecido. O exemplo clássico disso é o SPI, mas também existem formas especiais, como I2S para conversores de áudio, interfaces de configuração JTAG, FPGA, etc. Muitos canais de comunicação paralela são apenas essa idéia estendida para mover mais bits de uma só vez. Freqüentemente, mas nem sempre, esses enviam o bit mais significativo primeiro.

As interfaces assíncronas têm o tempo codificado no próprio fluxo de dados. Para "portas seriais" e padrões relacionados, como RS232, o tempo da palavra é relativo ao bit inicial, e o receptor apenas faz a amostragem da linha nos intervalos corretos a partir de então. Outras interfaces podem ser um pouco mais complicadas e exigem recuperação mais sofisticada do relógio usando loops e algoritmos com bloqueio de fase. Um UART é um "Transmissor Receptor Assíncrono Universal" - realmente o nome de um bloco funcional frequentemente usado para implementar uma "porta serial" com alguma flexibilidade para comprimento de palavra, taxa e condições de início / fim. Coisas como RS232, RS422, etc. são padrões para sinalização elétrica externa dos dados que você obteria deles - tensão, terminação única ou diferencial, se 1 for alto ou baixo, etc.

O "USART" pode ser uma fonte de confusão legítima, pois é um tipo de dispositivo híbrido, um "Transmissor Receptor Síncrono / Assíncrono Unversal" Essencialmente, esse é e é mais comumente usado como UART, mas também pode ser configurado para gerar (ou considerar) um relógio separado sincronizado com os dados e pode reverter a ordem dos bits. Geralmente é configurável para interoperar com o SPI, mas pode não ser possível remover o tempo dedicado aos bits de início / parada, por isso pode não ser capaz de operar com algo como o I2S, que pode esperar que os dados fluam continuamente, sem intervalos entre as palavras.

Chris Stratton
fonte
Explicação muito agradável (Y) Adorei a brevidade. Obrigado @chris
Avi Mehenwal
8

O RS-232 é um protocolo serial muito simples que foi originalmente usado para modems e teletipos. É o que geralmente é chamado de porta serial (ou porta COM no MS-Windows). Na linha, ele usa nominalmente níveis de ± 12V, mas eles podem variar amplamente conforme a detecção é especificada em ± 3V. Sempre existe um driver de linha (atualmente normalmente da família MAX232) que converte esses níveis para e a partir dos níveis de sinal digital interno de um computador ou microcontrolador.

TTL significa Transistor-Transistor-Logic e tem seu nível para zero lógico próximo de 0V e lógico próximo de 5V. Muitas vezes, qualquer lógica de 5V é chamada TTL, embora a maioria dos circuitos hoje em dia seja construída como CMOS. Hoje também existem muitos circuitos que funcionam em 3,3V, que não são mais TTL.

Com relação aos níveis internos, os níveis na linha RS-232 são invertidos, + 12V corresponde a baixa lógica e -12V corresponde a alta lógica, o que pode ser confuso.

Para descrever o formato dos dados, geralmente se mostra o sinal lógico. Quando a linha está ociosa, é alta. Uma transmissão começa com um bit de início baixo, os bits de dados com o bit menos significativo primeiro, um bit de paridade opcional e um a dois bits de parada (lógico 1). Isso é chamado de transmissão assíncrona, porque os bits de início e parada sincronizam os dados para cada byte separadamente.

Um UART (transmissor universal de receptor assíncrono) é um dispositivo em um computador ou microcontrolador que realiza esse tipo de comunicação assíncrona.

Um USART (Transmissor Receptor Síncrono Assíncrono Universal) é um dispositivo que também pode realizar alguns tipos de transmissão síncrona, daí o S. adicional. Esse tipo varia, você precisa procurá-lo na folha de dados.

SPI, I²C e USB são histórias diferentes (e no caso de USB muito longas).

starblue
fonte
1

Eu concordo com o que foi mencionado sobre os protocolos SPI e CAN. Para melhorar o desempenho, o protocolo CAN foi projetado. Nesse conceito de arbitragem, é usado o dispositivo em que dois dispositivos estão prontos para a comunicação, dependendo da prioridade da transmissão ou recepção. O CAN é amplamente utilizado em muitas indústrias.

user19166
fonte