próximo acima anterior sumário índice
Next: Resolução de Problemas Up: Um passo adiante... Previous: ``baud'' Vs. ``bps''   Sumário   Índice Remissivo


O que são UARTs? Como elas afetam a performance?serial!UARTs

UARTs (Transmissor e Receptor Assíncrono Universal ou Universal Asynchronous Receiver Transmitter) são chips localizados na placa serial do PC (caso se utilize uma) ou na placa mãe. A função da UART pode ser executada também por por chips que executam outras funções. O propósito da UART é converte dados para bits, enviá-los pela linha serial e reconstruir os dados novamente na outra extremidade da linha. UARTs lidam com dados divididos em pedaços de bytes, os quais são convenientemente o tamanho dos caracteres ASCII.

Suponhamos que se tenha um terminal conectado a um PC. Ao se digitar um caracter, o terminal envia o caracter ao transmissor (também um UART). O transmissor envia o byte em uma linha serial, um bit de cada vez, em uma velocidade específica. Na ponta do PC, a UART receptora recebe todos os bits, recompondo o byte e o disponibiliza em um buffer.

Há dois tipos diferentes de UARTs. As chamadas UARTs burras - 8250 e 16450, e UARTs FIFO - 16550A. Para entender as suas diferenças, inicialmente vamos examinar o que acontece quando uma UART envia ou recebe um byte.

A UART por si só não faz absolutamente nada com os dados, ela simplesmente os envia ou os recebe. Para UARTS originais, a CPU obtém uma interrupção a partir do dispositivo serial toda vez que um byte é enviado ou recebido. A CPU então move o byte recebido para fora do buffer da UART para algum lugar na memória ou fornece outro byte a UART para ser enviado. As UARTs 8250 e 16450 têm somente um byte de buffer, o que significa que cada vez que 1 byte é recebido ou enviado, a CPU será interrompida. Em baixas velocidades, isso funciona bem, porém em taxas maiores a CPU se torna tão ocupada lidando com a UART que não lhe resta muito tempo para lidar com outras tarefas. Em alguns casos, a CPU não consegue atender o serviço de interrupções adequadamente, fazendo com que o byte recebido anteriormente seja sobrescrito, uma vez que eles estejam chegando em uma velocidade maior da que eles possam ser tratados.

É nesse momento que a UART 16550A se torna muito útil. Estes chips vêm com FIFOs de 16 bytes, o que significa que eles podem receber ou transmitir até 14 bytes antes de interromper a CPU. Não somente podem esperar, assim como podem transferir os 14 bytes de uma só vez. Apesar da interrupção não estar sempre configurada para receber todos os 14 bytes em uma única transferência, esta vantagem ainda é significativa sobre outros tipos de UART, os quais têm somente um 1 byte de buffer. A CPU recebe menos interrupções e é livre para outras coisas. Dados não são perdidos e tudo funciona perfeitamente (existe uma UART 16550, mas ela é tratada como uma 16450 uma vez que tem problemas).

Em geral, UARTs 8250 e 16450 devem ser adequadas para velocidades de até 38.400 bps. Para velocidades maiores, possivelmente se tenha perda de dados. Outros sistema operacionais de PC como DOS não são multitarefas, podendo então lidarem de maneira mais otimizada com UARTs mais antigas. Esta é a causa porque não se percebe a perda de dados até que se passe a utilizar o Linux.

Placas multiseriais inteligentes e equipamentos que não usem UARTs utilizam chips DSP para disponibilizarem buffers e controle que liberam ainda mais a CPU. Por exemplo as placas Cyclades Cyclom e Stallion EasyIO usam uma UART RISC Cirrus Logic CD1400, e muitas placas usam CPUs 80186 CPUs ou ainda CPUs RISC especiais para lidar com E/S serial.

Tenha em mente que UARTs do tipo burras não são ruins, elas simplesmente não conseguem lidar com velocidades de transmissão maiores. Não se deve ter nenhum problema em se conectar um mouse ou um terminal a essas UARTs. Porém para modems de alta velocidade uma UART 16550A é uma necessidade.

Muitos do PCs mais novos (486s, Pentiums ou superiores) vêm com uma UART 16550A (nota: no momento da tradução deste Como Fazer podemos afirmar que praticamente inexistem equipamentos novos sendo fabricados com UARTs burras). Caso se tenha um equipamento realmente antigo pode-se atualizá-lo através da aquisição de chips 16550A e da substituição das UARTs antigas. Porém se a funcionalidade está agregada a outros chips, a substituição não será possível. Caso uma UART 16450 esteja conectada à placa, a atualização pode ser simples, uma vez que ambas são compatíveis pino a pino em seus conectores. Pode ser mais simples simplesmente comprar uma placa serial na Internet (pouca lojas têm este tipo de produto atualmente).


próximo acima anterior sumário índice
Next: Resolução de Problemas Up: Um passo adiante... Previous: ``baud'' Vs. ``bps''   Sumário   Índice Remissivo
Cyro Mendes de Moraes Neto 1999-12-30