Qual é o atraso mínimo entre dois quadros RS232 consecutivos?

3

Eu tenho trabalhado na criação de uma UART em um FPGA. Eu posso transmitir com sucesso e receber caracteres simples digitados no PuTTY. No entanto, quando eu configuro meu FPGA para escrever constantemente uma sequência grande de "A", às vezes acabo com sequências de "@" ou alguns outros caracteres até que eu reinicie o FPGA algumas vezes.

Acredito que a UART no computador perde a diferença entre o bit inicial e o zero. O atraso entre os dois "A" é ~ 30us (medido com um analisador lógico) e a taxa de transmissão é 115200 8N1.

Existe um atraso mínimo que deve ser mantido entre dois quadros RS232 consecutivos?

    
por Lord Loh. 06.12.2012 / 10:49

3 respostas

1

Além da velocidade e do número de bits de dados, acho que as duas extremidades devem concordar com o número de bits iniciais, bits de parada e bits de paridade.

Veja Comunicação serial assíncrona

Oexemploacimamostracomoospersonagenssãoseparadosmasidealizaramostemposdesubidaedescida,acreditoqueumosciloscópiomostrariaalgomaisparecidocomoquesegue(observeoeixodemarca/espaçoinvertidocomparadocomodiagramaanterior).

Talvez você deva diminuir a velocidade, talvez seu FPGA não esteja emitindo um sinal bem formado em velocidades mais altas.

Além disso, o RS232 é assíncrono, acredito que significa que o receptor deve sincronizar seu tempo com base nos bits de início e fim.

  • A é 01000001 binário
  • @ é binário 01000000

A diferença é uma questão de tempo preciso. Com um tempo impreciso, um receptor pode contar seis em vez de cinco enquanto o +3 ... 15V é declarado.

Veja Sincronização de Sinais e Características do sinal

    
por 06.12.2012 / 11:29
2

Is there a minimum delay that must be maintained between two consecutive RS232 frames?

Não, não existe esse requisito (sem min e sem max) no EIA / RS232C.
O bit de início do próximo caractere pode seguir imediatamente o bit de parada de um caractere.
Observe que a linha fica ociosa no estado Marking, que é o mesmo nível do bit de parada.

É interessante que você não faça menção ao bit de parada no quadro de caracteres.

I believe the UART on the computer looses track of the difference between the start bit and a zero. The delay between the two "A" is ~ 30us (measured with a logic analyzer)

Você está usando a ferramenta errada para essa tarefa! Você deveria estar usando um escopo. Você não pode analisar um problema de temporização visualizando uma reprodução sampleada e sanitizada do sinal analógico.
A diferença entre o bit de início e um zero é o tempo. Os quadros de caracteres são transmitidos em uma taxa assíncrona. Mas os bits do quadro precisam ter clock na taxa de clock especificada. Para a taxa de transmissão de 115200, isso seria 8.68usec para o tempo de 1 bit. Para 8 bits de dados mais um bit de inicialização e um bit de parada, o tempo de estrutura é 86,8usec.
Sua pergunta implica que você não se preocupou em olhar para a especificação EIA / RS232C para tempos mínimos de subida / descida e quando o sinal é tipicamente amostrado. Método interessante para implementar HW.

Talvez você também deva usar um contador de frequência para medir o gerador de taxa de transmissão em cada extremidade. Uma incompatibilidade de alguns por cento geralmente pode ser tolerada. Uma incompatibilidade pode produzir os sintomas que você vê.
Por que os erros de enquadramento não são reportados pelo destinatário? Em vez de apenas observar a saída, talvez você precise revisar as estatísticas da porta serial, ou seja, /proc/tty/driver/...

    
por 07.12.2012 / 01:37
1

Eu suspeito que os UARTs ainda são muito parecidos com os originais. Eles usaram um clock de taxa de dados de 16x para "amostrar" os dados, em comparação com o esquema analógico anterior que usava um oscilador acionado por borda. Usando a abordagem de amostra, a UART poderia posicionar com precisão o tempo de amostragem no meio dos pulsos, e até mesmo fazer várias amostras para ser um pouco mais tolerante ao ruído.

Sua descrição não é clara em que você fala em um comentário recente sobre "detectar um bit de partida", mas você sugeriu anteriormente que você está TRANSMISSÃO e, portanto, não teria nada para "detectar".

    
por 08.12.2012 / 04:59