Uma taxa de transmissão na comunicação serial (USB ou RS232) precisa ser exata?

8

Na comunicação serial, a taxa de transmissão significa que precisamos usar a velocidade exata do relógio ou é uma gama de velocidades que podemos usar?

e se for um valor exato, quão exato deve ser? por exemplo, posso usar o 555 como relógio de um circuito de comunicação serial?

sonslikefiziks
fonte
Um UART geralmente pode tolerar um desvio de cerca de ~ 3%. Depende de um específico, no entanto.
Eugene Sh.
Para USB, ele será especificado no padrão, que é gratuito para download.
The Photon

Respostas:

6

Os tempos devem ser precisos o suficiente para não se separarem antes que o protocolo ressincronize.


A série UART ressincroniza em cada byte e um byte é de cerca de 10 bits (8 bits de dados mais início e parada). Assumimos que nosso UART tem como alvo o meio de cada bit. Se tudo estiver perfeito e apenas uma extremidade estiver imprecisa, isso permitirá uma diferença de aproximadamente 5% entre as duas extremidades do link.

Contudo:

  1. Ambas as extremidades do link podem ser imprecisas em relação ao nominal. No pior dos casos, uma extremidade pode estar abaixo do nominal, enquanto a outra está acima do nominal.
  2. Pode haver imprecisões sistemáticas. Por exemplo, a maioria dos UARTS possui uma faixa limitada de configurações do gerador de taxa de transmissão.
  3. O seu UART é baseado em um relógio mestre com uma velocidade finita. Mesmo se o gerador de clock e taxa de transmissão estiver perfeito, isso resultará em não atingir o meio exato de cada bit.

A linha inferior é que 1% de erro no seu relógio é quase certo. 5% de erro é quase certamente um problema. Entre essas duas figuras, pode ou não ser um problema, dependendo da imagem geral.

Essa é uma tarefa difícil para um oscilador RC. Digamos que seu R tenha uma tolerância de 1% e seu C tenha uma tolerância de 2%. Isso fornece uma tolerância de cerca de 3% para a constante de tempo da rede RC e isso é antes de você pensar em quaisquer erros introduzidos pelo seu chip de driver.

Portanto, o ponto principal é que você deve procurar um ressonador de cristal ou cerâmica.


Quanto ao USB, não tenho experiência para analisar desde os primeiros princípios, mas https://www.silabs.com/community/interface/knowledge-base.entry.html/2004/03/15/usb_clock_tolerance-gVai diz 1,5% para baixa velocidade e 0,25% para velocidade máxima.

Peter Green
fonte
Se for possível programar a taxa de transmissão em 3% ou em etapas mais precisas e usar uma sequência adequada de "treinamento", a precisão da RC pode não ser um problema. Se alguém souber que a outra extremidade estará alternando, enviando 0xF8 e 0xF0 repetidamente (baixo por quatro e cinco bits, respectivamente) definindo a taxa de transmissão 33% mais rápida deve fazer com que receba consistentemente 0xF0 (5,33 vezes) e 0x80 (6,67 bits) vezes). O recebimento de outros valores permitirá que você saiba que é mais rápido ou mais lento que a velocidade "33% acima", enquanto o recebimento de 0xF0 0x80 repetido indicará que se deve reduzir a velocidade em 25% e iniciar a comunicação real.
Supercat
8

Os UARTs normalmente usados ​​em sistemas seriais do tipo RS232 funcionam amostrando a linha de dados em algum ponto intermediário de acordo com uma divisão do relógio de freqüência base da taxa de transmissão predefinida. Como tal, se os dados e o receptor enviados não estiverem na mesma frequência, o "ponto de amostragem" se aproximará da borda do quadro de bits em bits sucessivos.

Com um UART normal, o comprimento de bit para um byte é 10 ou 11 bits. 1 Iniciar, 8 dados e 1 ou 2 bits de parada. Meio desvio no décimo bit se traduz em erro de 0,5 / 10 = 5%.

No entanto, na realidade, sua tolerância é menor do que isso, porque você também precisa adicionar a latência do seu período de frequência base, o que adicionará um deslocamento da borda anterior do bit inicial. Quanto maior a sua frequência base, menos efeito isso tem.

Quanto ao uso de um timer 555 para esse fim, eu não o recomendaria, a menos que você planeje fazer um ajuste manual no circuito 555.

Um USART, por outro lado, usa um método de controle mais complexo que tenta sincronizar a transmissão com os dados recebidos. Isso pode ser feito usando um padrão de dados que possui um relógio incorporado, usando um relógio passado ou por alguma forma de bloqueio de fase nas bordas dos dados recebidos. (Embora sem dúvida o último seja realmente pseudo-síncrono.)

Trevor_G
fonte
Como você sabe do que está falando, pensei em mencionar a abreviação "U S ART", que deve fazer parte dessa resposta. Bem, isso tornaria a resposta completa na minha opinião e, depois disso, merece um +1 de mim.
Harry Svensson
1
@HarrySvensson hmm .. Eu concordo .. mas tentar decidir é que isso apenas torna a resposta mais confusa para um 555 OP de embalagem.
Trevor_G
1
Um USART é diferente, pois pode ser síncrono. E se for usado como uma interface síncrona, o relógio é comum nas duas extremidades e a velocidade do relógio não importa.
gbarry
1
Bem, pode estar nos comentários, obrigado @gbarry. Eu não me importo. +1 para Trevor.
Harry Svensson
@HarrySvensson Eu adicionei uma breve explicação ondulada da diferença de completude ..
Trevor_G