3.18. Conceitos básicos de UART

Uma UART (Universal Asynchronous Receiver-Transmitter) é a forma mais antiga e mais simples de mover bytes entre dois microcontroladores, ou entre um microcontrolador e um PC host. Dois fios transportam os dados – um para cada direção – e um terra compartilhado retorna o sinal. Nenhum dos lados usa um clock compartilhado; eles concordam previamente sobre uma taxa de transmissão (baud rate) e recuperam a temporização dos bits a partir da própria linha de dados.

3.18.1. O quadro

Cada caractere na linha é envolvido em um quadro: um bit de início, os bits de dados, um bit de paridade opcional e um ou dois bits de parada.

Forma de onda de um quadro UART. O sinal fica em repouso em nível alto à esquerda, cai para nível baixo durante o tempo de um bit (o bit de início), depois transporta oito bits de dados em sequência e, em seguida, retorna a nível alto durante o tempo de um bit (o bit de parada) antes de voltar ao repouso.

Um quadro UART: um bit de início, oito bits de dados e um bit de parada, cada um com a largura de um período de bit (1 / baudrate segundos).

A linha fica em repouso em nível alto. O receptor observa a busca de uma borda de descida, que marca o início de um novo quadro. Em seguida, ele amostra a linha de dados uma vez por período de bit – normalmente no meio de cada bit – e remonta os bits em um caractere. O bit de parada retorna a linha ao repouso para que o próximo bit de início possa ser detectado.

3.18.2. A taxa de transmissão (baud rate)

O período de bit – e a velocidade do enlace – é definido pela taxa de transmissão (baud rate), o número de bits por segundo. 9600, 19200, 38400, 57600, 115200, 230400, 460800 e 921600 são os valores padrão; 115200 é o valor padrão mais comum. Ambas as extremidades devem concordar sobre a taxa de transmissão dentro de uma margem de poucos por cento, ou o receptor amostra os bits nos pontos errados e os dados voltam corrompidos.

Taxas de transmissão mais altas movem mais dados por segundo, mas são mais sensíveis ao comprimento do cabo, à capacitância e à precisão dos clocks em cada extremidade. Para enlaces curtos entre duas placas na mesma bancada, de 115200 a 921600 funciona confortavelmente.

3.18.3. Cabeamento

Um enlace UART usa três fios:

Duas placas rotuladas A e B, conectadas por três fios. O pino TX da placa A conecta-se ao pino RX da placa B; o pino TX da placa B conecta-se ao pino RX da placa A; e os pinos de terra de ambas as placas estão ligados entre si.

Cabeamento UART: o TX de uma placa vai para o RX da outra, e ambos os terras estão ligados.

  • TX → RX, nos dois sentidos. O pino de transmissão de cada placa é o pino de recepção da outra placa. Um erro comum de iniciantes é ligar TX → TX – duas saídas disputando uma com a outra, sem nenhum dado em qualquer dos receptores.

  • Terra compartilhado. Os níveis do sinal são referenciados ao terra, então as duas placas devem ter um terra comum, ou o receptor vê a tensão errada na linha.

3.18.4. Níveis de tensão e camadas físicas

Os níveis de sinal nos pinos UART da câmera são 3,3 V CMOS: terra para um zero lógico, 3,3 V para um um lógico. Qualquer coisa que fale UART CMOS de 3,3 V – outro microcontrolador, um adaptador USB-serial configurado para 3,3 V, um módulo GPS de 3,3 V – pode ser ligada diretamente.

Nota

Dispositivos UART CMOS de 5 V (microcontroladores mais antigos, certos módulos GPS, algumas placas de sensores mais antigas) falam o mesmo enquadramento UART em níveis lógicos de 5 V. Ligá-los diretamente à câmera é inseguro: um TX de 5 V acionando o RX da câmera excede a tensão de entrada máxima absoluta em câmeras que não são tolerantes a 5 V, e o TX de 3,3 V da câmera pode não atingir o limiar de nível alto do dispositivo de 5 V para um um lógico limpo.

Traduzir entre as duas tensões requer um driver de linha ativo – um CI bidirecional dedicado de deslocamento de nível com seus próprios transistores de acionamento em ambos os lados de cada linha. Os deslocadores passivos com MOSFET e resistor de pull-up de Conversão de nível não são suficientes aqui: suas bordas de subida dependem do carregamento da linha através de um resistor, o que é adequado em velocidades de chaveamento, mas muito lento para UART. A 115200 baud, cada bit dura cerca de 8 µs, e o slew RC do deslocador passivo borra um bit no seguinte.

Um driver de linha ativo produz bordas limpas em ambas as direções nas taxas plenas de UART. Escolha um componente especificado para a taxa de transmissão em que o enlace irá operar, ligue o TX e o RX da câmera ao lado de 3,3 V do deslocador e ligue o TX e o RX do dispositivo de 5 V ao lado de 5 V do deslocador.

Três camadas físicas mais antigas usam o mesmo enquadramento, mas tensões diferentes, e precisam de um conversor de nível entre elas e um microcontrolador de 3,3 V:

  • RS-232. Usado por portas seriais em PCs de mesa e alguns equipamentos industriais. A linha oscila entre aproximadamente ±5 V e ±15 V, com o repouso no trilho negativo. Polaridade invertida e tensão alta em comparação ao CMOS; um chip da família MAX232 / MAX3232 (ou similar) cuida da conversão.

  • RS-422. Um padrão de sinalização diferencial para enlaces ponto a ponto (um driver, até dez receptores). O driver transmite por um par balanceado de fios; o receptor vê a diferença entre eles e ignora o ruído de modo comum ao longo do caminho. Enlaces full-duplex usam dois pares – um para cada direção. O RS-422 alcança de dezenas de metros a um quilômetro, dependendo da taxa de transmissão, e um chip transceptor RS-422 fica entre o TX / RX da câmera e o par balanceado.

  • RS-485. O primo multiponto do RS-422 – a mesma sinalização diferencial, mas projetado para colocar até 32 drivers e receptores em um único barramento. A maioria dos enlaces é half-duplex em um único par, com o driver e o receptor de cada nó compartilhando os mesmos fios e o software arbitrando quem fala. Usado em barramentos de automação industrial (Modbus, DMX512, Profibus) onde os fios percorrem longas distâncias e o ruído é severo; um chip transceptor RS-485 fica entre o TX / RX da câmera e o par diferencial.

Ambos ainda enviam quadros UART no nível de bit subjacente. A configuração machine.UART da câmera (taxa de transmissão, bits, paridade, bits de parada) é a mesma independentemente de qual camada física transporta o sinal do outro lado do transceptor.