Como dois UARTS sabem qual taxa de transmissão usar?

14

Estou lendo sobre o protocolo padrão do UART e acho que, se o UART de recebimento não tiver nenhuma idéia sobre a taxa de transmissão de dados transmitida, haverá muitos problemas. Se a taxa de transmissão assumida for menor que a taxa de transmissão na qual os dados são transmitidos, haverá bits que não seriam 'vistos' pelo UART receptor. Por outro lado, se a taxa de transmissão usada pelo receptor for maior que a taxa de transmissão na qual os dados são transmitidos, haverá bits que serão contados duas vezes e resultariam na leitura incorreta dos dados.

Meu conhecimento sobre o UART é que, quando a linha está ociosa, ela é mantida em '1', o bit de início é '0' e o bit de parada é '1'. Além disso, o bit Stop sendo '1' não tem nenhuma diferença com o '1' quando a linha está ociosa ou existe uma maneira de diferenciar?

Os dois UARTs comunicantes concordam primeiro com qual taxa de transmissão eles usarão? Se sim, como eles fazem isso?

Batibot323
fonte
O "bit de parada" poderia igualmente ser chamado de "retornar ao estado inativo", mas, ao torná-lo um pouco, possui um comprimento mínimo definido, mas após esse tempo mínimo garantido, a linha permanecerá no estado "1" até o próximo personagem aparece.
Peter Bennett
Eles poderiam alterar aleatoriamente as taxas de transmissão comuns até que algo funcione no XD.
precisa saber é o seguinte
3
Hayes iniciou uma maneira de permitir que o UART em seus modems estabelecesse a mesma taxa de transmissão que o terminal falando com ele usando uma sequência de caracteres 'AT' no início de seus comandos. Isso geralmente não era decodificado pelo UART, mas pelo firmware em tempo real que configuraria o UART para receber o restante da linha de comando. Ele basicamente detectou a largura do bit inicial e como a paridade foi definida.
infixado em 28/09/16
@infix Então, se eu pretendo modificar ou criar um código Verilog para o UART, posso fazê-lo para que ele detecte essa sequência 'AT' e ajuste sua taxa de transmissão a partir daí? Eu estava pensando em inicializá-lo com a maior taxa de transmissão, para capturar tudo e, a partir daí, encontrar a sequência 'AT'.
precisa saber é o seguinte
Um protocolo de comunicação baseado em UART (chamado LIN), que pode ser visto muito na indústria automotiva, possui um mecanismo de detecção de auto-baud, mas os nós mestre e escravo ainda "precisam" corresponder em termos de comprimento de dados e comprimento de bits de parada. O que significa que detectar apenas a taxa de transmissão não é suficiente.
Rohat Kılıç

Respostas:

26

UARTs comuns precisam ser pré-configurados com a taxa de transmissão desejada (assim como o comprimento das palavras, os bits de parada, a paridade etc.) tradicionalmente por um ser humano.

Há várias décadas, embora existam implementações de detecção de "auto baud" encontradas em algumas configurações, o que normalmente funciona cronometrando os principais recursos da forma de onda para deduzir a taxa de baud. Versões anteriores precisavam ser transmitidas para caracteres conhecidos, mas versões mais sofisticadas poderiam encontrar a taxa a partir de dados mais arbitrários.

Um UART receptor normalmente possui um relógio local que funciona a uma taxa mais rápida - geralmente 8 ou 16 vezes a taxa de transmissão. Isso é usado para amostrar o sinal recebido e detectar os bits dentro de uma palavra de maneira a tolerar alguns por cento do erro. Mesmo dois osciladores de cristal não combinariam perfeitamente com as taxas, mas a tolerância a erros pode permitir o uso de fontes menos precisas, às vezes incluindo osciladores aparados no chip, etc. Também pode ajudar a acomodar o fato de que a divisão das frequências populares do oscilador pode apenas produzir uma aproximação imprecisa de certas taxas de transmissão - antigamente, os relógios mestre do UART às vezes precisavam de frequências específicas para acessar taxas de transmissão populares, por exemplo, 11.0592 MHz na família 8051.

Chris Stratton
fonte
2
Minha hipótese sobre a detecção automática de transmissão pode ser um temporizador e um contador trabalhando simultaneamente para encontrar arestas e tempo entre as arestas?
Ammar.cma 28/09/16
1
O problema é que não há algoritmo que possa assumir uma forma de onda arbitrária "uart serial" e determinar de forma confiável a taxa de transmissão. Você pode encontrar o tempo mínimo entre transições com facilidade suficiente, mas isso geralmente não representa um período de bit único.
Peter Green
Existe um algoritmo (ouvi-o chamado "auto-bauding" em vários lugares), mas quando implementado no escopo com recursos limitados de um chip UART, às vezes a única maneira de fazer isso é consumindo alguns dos dados enviados e usando-o para calibração que persistirá pelo resto da sessão. Isso geralmente não é desejável. Se feito em software e permitido um pouco de latência, é trivial fazer isso sem consumir dados (armazenando-os temporariamente para análise) pelo menos para comunicações de baixa velocidade (menos de 200 KB / s). Velocidades mais altas apresentam mais dificuldades.
Wossname 29/09
8

Dois UARTS "concordam" na taxa de transmissão por meio de documentação e pelo operador / usuário definindo a taxa de transmissão manualmente, incluindo protocolo de handshake, tamanho de bit de parada, etc.

Ale..chenski
fonte
1
..... para as duas extremidades da interface.
Michael Karas
2

Sim, tudo é configurado manualmente, o que geralmente é um pouco trabalhoso, especialmente quando os sistemas estão mal documentados (estou olhando para você, todos os sistemas incorporados).

Sei que USB, SATA e a maioria dos outros protocolos de dados modernos iniciam após algum evento de redefinição ou inicialização na velocidade mais baixa com alguma configuração padrão padronizada e negociam com todos os outros (ou apenas o mestre, dependendo do protocolo) até velocidades mais altas . Alguns também usam resistores pull-up ou pull-down em suas linhas de dados / energia para indicar as velocidades suportadas.

Consulte este site sobre negociação de USB, se você estiver interessado em aprofundar um pouco mais em outros protocolos.

Adam Naber
fonte