Página 1 de 1

RS232 - Controle de fluxo.

MensagemEnviado: 06 Jul 2009 17:27
por Francesco
Pessoal, a pergunta é tão simples que é até um pouco boba, mas pergunta é pergunta.

Preciso fazer uma conversão RS-232 para SPI. O problema é que o SPI vai ser mais lento que a UART. Logo, foi decidido usar um controle de fluxo.

Alguém pode me explicar a forma de onda do CTS (saída) e RTS (entrada)? E qual a diferença do handshaking para seqüência ou byte-simples? E o uso do RTS e DSR?

Agradeço desde já.

MensagemEnviado: 06 Jul 2009 19:51
por Djalma Toledo Rodrigues
Veja o Data Sheet do 8251

Mas, atualmente se usa mais o Contrôle de Fluxo por Soft XON XOFF.

MensagemEnviado: 07 Jul 2009 08:38
por Wagner de Queiroz
CTS e RTS nao tem segredo nao.

O ponto "A" (transmissor) aciona o sinal RTS (Request do Send) do receptor. O receptor, se puder receber, ativa o sinal CTS (Clear to Send). O Transmissor recebendo o CTS, ele pode enviar um byte. Depois de enviar o byte, se desativa o RTS e CTS. e o processo se inicia novamente pedindo com RTS e aguardando o CTS, lembre-se que esses sinais sao ativos em nivel baixo (-12v).

Alem destes sinais, as portas seriais de PC, algumas ativam o sinal DTR (Data terminal Ready) quando abrem a porta serial, indicando que estao ativas e aguardam o sinal DSR (Data Set Ready) do outro lado para saber que podem transmitir. Geralmente isso é um sinal que o outro lado trabalha com Controle de fluxo por hardware (CTS/RTS) qualquer duvida me procura no MSN.

É mais complicado explica do que fazer.

Depois vc me ensina a trabalhar com SPI, hehe...

MensagemEnviado: 07 Jul 2009 09:26
por Francesco
Olá Wagner e Djalma,

Olhei o datasheet do 8251, tanto da Intel como da Texas, mas não ficou claro quem faz as solicitações e o uso do RTS. Também procurei o datasheet do 16C450, mas tão está claro o uso.

Wagner, estou começando a entender. Só ficou uma dúvida, nos cabos Null-Modem o RTS (out) é ligado ao CTS (in). Isso indica que o terminal que irá receber é quem solicita os dados para quem vai transmitir?

Obrigado.

MensagemEnviado: 07 Jul 2009 14:02
por Djalma Toledo Rodrigues
Desculpe a Intel retirou o Datasheet

Tenho livros da Intel mas, com mudança ainda não estão nas prateleiras de
modo que esta difícil localizar

Mas, veja este site - além de CTS, DSR, etc., no final da página tem esquema de Null Cable
http://www.arcelect.com/rs232.htm

Para cabo DB9 Null Modem

http://www.cc86.org/~pjf/hwb/ca_Nullmodem9to9.html
.

MensagemEnviado: 07 Jul 2009 14:33
por Wagner de Queiroz
Francesco,

Vc esta certo, veja: Null-modem = modem nulo. Algumas portas seriais, conforme eu falei, só funcionam se lerem o sinal DSR, por isso costuma se fazer um jumper entre DTR e DSR, para fazer o pc, na hora de ligar o DTR, achar que tem um modem do outro lado. A mesma coisa para os sinais RTS e CTS, assim é possivel poder usar um cabo null modem em modo de controle de fluxo por software em portas seriais mais antigas, pois o hardware só funcionaria se tivesse DSR e só enviaria se recebesse um CTS quando enviar um RTS.

Espero ter te ajudado.

MensagemEnviado: 08 Jul 2009 11:18
por Djalma Toledo Rodrigues
Francesco escreveu:... Isso indica que o terminal que irá receber é quem solicita os dados para quem vai transmitir?....
Isso . E porque ? Porque ele possui um Buffer logo, só permite que o outro envie se espaço houver.

O Transmissor, no caso do 8251, também possui um Buffer mas de apenas um Byte. Logo o além do Byte que esta no momento sendo enviado em série, de D0 a D7, o próximo Byte já esta no Buffer.

(Um sistema bem bolado, bem engenhoso)
.

MensagemEnviado: 08 Jul 2009 21:19
por msamsoniuk
eu acho que o 68681 da motorola eh infinitamente mais interessante (ou como vc diria: bem bolado, bem engenhoso). eh um bom exemplo de como funciona controle de fluxo por hardware.

voce comeca testando se a TX FIFO do 68681 esta vazia. se estiver, vc pode escrever nela sem se preocupar (quando ela encher, um flag ira sinalizar que vc nao deve mais escrever). o que esta na TX FIFO soh eh transmitido efetivamente quando o sinal CTS esta ativo (ele eh ativo em nivel baixo). como o TX esta conectado no RX remoto e o CTS esta conectado no RX remoto, a analise passa para o lado receptor do 68681.

neste caso, ele vai receber ateh encher a RX FIFO. quando isso acontecer, ele ira automaticamente desativar RTS (que eh ativo em nivel baixo, tal como CTS). e desativando RTS, q esta conectado ao CTS remoto, vc inibe a transmissao remota, de modo que nao estoura a RX FIFO do lado receptor. na medida que a RX FIFO eh esvaziada e a fila anda, o 68681 ativa RTS indicando que o outro lado pode voltar a transmitir.

existem muitas variacoes do 68681, sendo que no componente original acho que a TX FIFO possui 2 bytes e a RX FIFO possui 3 bytes. com o mecanismo de controle de fluxo, evita-se perder caracteres em funcao de um buffer overflow na RX FIFO.

note que para controle de fluxo por hardware com alta velocidade, apenas CTS e RTS sao usados, os outros pinos sao para funcionalidades estaticas e nao servem para sinalizacao de alta velocidade.

Djalma Toledo Rodrigues escreveu:
Francesco escreveu:... Isso indica que o terminal que irá receber é quem solicita os dados para quem vai transmitir?....
Isso . E porque ? Porque ele possui um Buffer logo, só permite que o outro envie se espaço houver.

O Transmissor, no caso do 8251, também possui um Buffer mas de apenas um Byte. Logo o além do Byte que esta no momento sendo enviado em série, de D0 a D7, o próximo Byte já esta no Buffer.

(Um sistema bem bolado, bem engenhoso)
.

MensagemEnviado: 10 Jul 2009 10:34
por Francesco
Olá Marcelo,

Procurei esse componente, mas os datasheets que encontrei são bastante incompletos. Por exemplo http://pdf1.alldatasheet.com/datasheet-pdf/view/65953/IMP/EI68C681.html

Você saberia onde encontro um datasheet completo dele?
Obrigado.

MensagemEnviado: 10 Jul 2009 12:21
por Djalma Toledo Rodrigues
All Datasheet já foi bom

Veja aqui em 68306 User Manual
http://www.freescale.com/webapp/sps/sit ... r=default&
.

MensagemEnviado: 10 Jul 2009 12:55
por msamsoniuk
o MC68681 eh um componente antigo e nao eh mais fabricado, mas vc pode usar o manual do SCN68681, que eh compativel:

http://www.datasheet4u.com/download.php?id=500291

como o djalma falou, o mesmo bloco eh reutilizado em diversos outros componentes, como o 68306, que ainda eh fabricado:

http://www.datasheet4u.com/download.php?id=522795

MensagemEnviado: 10 Jul 2009 13:26
por Francesco
Pessoal, obrigado. Vou estudar esse manual.