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?
fonte
Respostas:
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.
fonte
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.
fonte
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.
fonte