Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
29/06/1998

< Portas Seriais V: UART >


UART é o acrônimo de Universal Asynchronous Receiver/Transmitter, ou Receptor/Transmissor Assíncrono Universal, um processador auxiliar que constitui o coração da porta serial. Neste tipo de porta, os bytes são transmitidos como uma sucessão bits representados por pulsos de corrente. A principal função do UART é converter bytes no fluxo de bits correspondente e vice-versa, acrescentando alguns pulsos de controle para permitir a detecção de erros. Isto é necessário porque, ao contrário de uma porta paralela onde a falha na transmissão de um bit resulta em erro apenas no byte que o contém, na porta serial, se não forem tomadas precauções especiais, a ausência de um único bit afeta tudo o que é transmitido daí em diante, já que os bytes são reconstituídos "arrumando" os conjuntos de oito bits recebidos sucessivamente. Falhou um, desorganiza tudo...

Se os relógios do transmissor e do receptor dos dados estivessem absolutamente sincronizados, não haveria necessidade de conceber nenhum mecanismo de detecção de erro: sendo o ritmo de transmissão constante, qualquer falha é imediatamente detectada (imaginem uma linha de metrô onde o intervalo entre trens é de exatamente um minuto: decorrido mais de um minuto sem a passagem de um trem, pode-se afirmar com segurança que houve alguma anormalidade). O problema é que é impossível assegurar sincronia tão rigorosa em uma transmissão de dados sujeita a todo tipo de interferências e efetuada entre máquinas e dispositivos cujo ritmo é regulado por relógios diferentes. O remédio, então, é adotar medidas que permitam descobrir a eventual ocorrência de erros independentemente da sincronia entre os relógios. Transmissões deste tipo são denominadas "assíncronas".

O padrão RS-232C adotou uma forma relativamente simples de garantir a correção dos dados transmitidos: assinalar o início e o final de cada byte e incluir, opcionalmente, um pulso extra para controle de erro.

Nas transmissões seriais, todo bit que faz parte de um byte de dados é representado por um pulso de corrente. Mas nem todo pulso de corrente representa um bit, já que alguns pulsos servem apenas para delimitar o início ou o final da transmissão de um byte ou detectar erros. Estes pulsos são denominados "bits" de enquadramento, mesmo não sendo efetivamente bits. De todos, o primeiro é o mais importante. Para ser facilmente identificado, sua duração é mais longa que a dos demais (50% a mais, para ser exato). Chama-se "start bit" e sua função é sinalizar que imediatamente após vem o primeiro bit de um byte. Depois dele segue-se um conjunto de pulsos, agora sim, cada um deles correspondendo a um bit (parte de um byte de dados), pulsos negativos representando "um", pulsos positivos representando "zero". Em geral são oito, embora em certos casos possam ser sete (é estranho este byte de sete bits, mas basta acrescentar um zero à esquerda para completar oito). Depois, opcionalmente, pode haver um pulso adicional para controle de erro, chamado "bit de paridade". E, finalmente, seguem-se um ou dois pulsos para sinalizar o final do byte, chamados de "stop bits". Em seguida vem o start bit do próximo byte e assim por diante. Antes de iniciar a troca de dados, as partes devem se pôr de acordo sobre as características básicas da transmissão, a saber: o número de bits de dados de cada byte, a existência ou não do bit de paridade e o número de "stop bits". O mais comum é usar oito bits por byte, nenhum bit de paridade e um único stop bit, o que resulta no misterioso código "8-N-1" usado para caracterizar a maioria das transmissões por portas seriais.

Quando as portas seriais vinham em placas independentes, era importante saber que UART ela continha. O PC original usava o chip 8250, muito lento. Mais tarde, com o AT, foi lançado o chip 16450, mais rápido. E finalmente, com os PS/2 da IBM, apareceram o UART 16550 e seus derivados (como o 16550AFN), os únicos que permitem comunicação nas taxas elevadas atuais. Hoje em dia, as portas seriais vêm integradas à placa-mãe e todas as funções do UART foram incorporadas a um dos circuitos integrados da própria placa-mãe. Se este é seu caso, é mais que provável que suas portas seriais usem um UART compatível com os mais rápidos. Mas se sua porta serial não está na placa-mãe, sempre é bom verificar o UART. Qualquer coisa que não seja 16550 ou mais recente deve ser evitada.

Não cabe aqui entrar em detalhes sobre o funcionamento do UART. Basta mencionar que, como todo processador, ele dispõe de registradores, ou posições de memória internas usadas para armazenar temporariamente dados e códigos de controle. Oito registradores, para ser exato. Um deles é usado para conter o dado que está sendo transferido. Os demais, armazenam códigos de controle e dados auxiliares (por exemplo: um destes registros contém o número de bits que formam um byte, o tipo de paridade e o número de stop bits, do contrário a transmissão seria impossível).

Pronto: agora já sabemos o bastante sobre portas seriais para chegar póximo do final desta série.

B. Piropo