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?


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.