3.18. Noções básicas de UART¶
Um UART (Universal Asynchronous Receiver-Transmitter) é a forma mais antiga e simples de transferir bytes entre dois microcontroladores, ou entre um microcontrolador e um PC anfitrião. Dois fios transportam os dados – um para cada direção – e uma ligação à massa comum devolve o sinal. Nenhum dos lados utiliza um relógio partilhado; ambos acordam antecipadamente uma taxa de baud e recuperam a temporização dos bits a partir da própria linha de dados.
3.18.1. O fotograma¶
Cada carácter no fio é envolvido num fotograma: um bit de início, os bits de dados, um bit de paridade opcional e um ou dois bits de paragem.
Um fotograma UART: um bit de início, oito bits de dados e um bit de paragem, cada um com um período de bit (1 / baudrate segundos) de largura.¶
A linha permanece em repouso alto. O recetor aguarda uma transição descendente, que marca o início de um novo fotograma. Depois amostra a linha de dados uma vez por período de bit – tipicamente no meio de cada bit – e recompõe os bits num carácter. O bit de paragem devolve a linha ao repouso para que o próximo bit de início possa ser detetado.
3.18.2. A taxa de baud¶
O período de bit – e a velocidade da ligação – é definido pela taxa de baud, o número de bits por segundo. 9600, 19200, 38400, 57600, 115200, 230400, 460800 e 921600 são os valores normalizados; 115200 é o valor predefinido mais comum. Ambas as extremidades têm de concordar na taxa de baud com uma tolerância de alguns por cento, caso contrário o recetor amostra os bits nos pontos errados e os dados chegam corrompidos.
Taxas de baud mais elevadas movem mais dados por segundo, mas são mais sensíveis ao comprimento do cabo, à capacitância e à precisão dos relógios em cada extremidade. Para ligações curtas entre duas placas na mesma bancada, 115200 a 921600 funciona confortavelmente.
3.18.3. Ligação¶
Uma ligação UART utiliza três fios:
Ligação UART: o TX de uma placa vai ao RX da outra, e ambas as massas estão ligadas.¶
TX → RX, em ambos os sentidos. O pino de transmissão de cada placa é o pino de receção da outra. Um erro comum de principiantes é ligar TX → TX – duas saídas a competir entre si, sem dados em nenhum dos recetores.
Massa partilhada. Os níveis de sinal são referenciados à massa, pelo que as duas placas têm de ter uma massa comum, caso contrário o recetor 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âmara são 3,3 V CMOS: massa para zero lógico, 3,3 V para um lógico. Qualquer dispositivo que comunique em UART a 3,3 V CMOS – outro microcontrolador, um adaptador USB para série configurado para 3,3 V, um módulo GPS a 3,3 V – pode ser ligado diretamente.
Nota
Os dispositivos UART a 5 V CMOS (microcontroladores mais antigos, certos módulos GPS, algumas placas de sensor mais antigas) comunicam com o mesmo enquadramento UART a níveis lógicos de 5 V. Ligá-los diretamente à câmara não é seguro: um TX a 5 V a controlar o RX da câmara excede a tensão de entrada máxima absoluta em câmaras que não são tolerantes a 5 V, e o TX a 3,3 V da câmara pode não atingir o limiar alto do dispositivo a 5 V para um um lógico limpo.
A tradução entre as duas tensões requer um driver de linha ativo – um CI deslocador de nível bidirecional dedicado com os seus próprios transistores de saída em ambos os lados de cada linha. Os deslocadores passivos de MOSFET e pull-up de Conversão de nível lógico não são suficientes aqui: as suas transições ascendentes dependem da carga da linha através de uma resistência, o que é adequado a velocidades de comutação mas demasiado lento para UART. A 115200 baud cada bit dura cerca de 8 µs, e o tempo de subida RC do deslocador passivo funde um bit no seguinte.
Um driver de linha ativo produz transições limpas em ambas as direções às velocidades UART completas. Escolha um componente homologado para a taxa de baud a que a ligação irá funcionar, ligue o TX e RX da câmara ao lado de 3,3 V do deslocador, e ligue o TX e RX do dispositivo a 5 V ao lado de 5 V do deslocador.
Três camadas físicas mais antigas utilizam o mesmo enquadramento mas tensões diferentes, e precisam de um conversor de nível entre elas e um microcontrolador a 3,3 V:
RS-232. Utilizado pelas portas série em PCs de secretária e em algum equipamento industrial. A linha oscila entre aproximadamente
±5 Ve±15 V, com repouso no nível negativo. Polaridade invertida e tensão elevada em comparação com CMOS; um chip da família MAX232 / MAX3232 (ou similar) trata da conversão.RS-422. Uma norma de sinalização diferencial para ligações ponto-a-ponto (um driver, até dez recetores). O driver envia num par de fios equilibrado; o recetor vê a diferença entre eles e ignora o ruído de modo comum ao longo do caminho. As ligações full-duplex utilizam dois pares – um para cada direção. O RS-422 alcança dezenas de metros a um quilómetro dependendo da taxa de baud, e um chip transcetor RS-422 fica entre o TX / RX da câmara e o par equilibrado.
RS-485. O parente multi-ponto do RS-422 – a mesma sinalização diferencial, mas concebido para colocar até 32 drivers e recetores num único barramento. A maioria das ligações é half-duplex num único par, com o driver e o recetor de cada nó a partilharem os mesmos fios e o software a arbitrar quem fala. Utilizado em barramentos de automação industrial (Modbus, DMX512, Profibus) onde os fios percorrem longas distâncias e o ruído é intenso; um chip transcetor RS-485 fica entre o TX / RX da câmara e o par diferencial.
Ambos continuam a enviar fotogramas UART ao nível de bit subjacente. A configuração machine.UART da câmara (taxa de baud, bits, paridade, bits de paragem) é a mesma independentemente da camada física que transporta o sinal no outro lado do transcetor.