Protocolo robusto para serial RS232

Para "abobrinhas" use o " Boteco"

Moderadores: andre_luis, 51, guest2003, Renie

aproveitando o tópico

Mensagempor caiortp » 12 Dez 2006 07:35

Bom dia pessoal,
Aproveitando o assunto do tópico.
Estou precisando de ajuda para escolher um protocolo de comunicação, o problema é o seguinte.

Enviar arquivo do pc para o microcontrolador, através da RS-232, que este irá gravar em uma Flash.

Necessidade de usar um programa simples para envio de arquivo como hyperterminal por exemplo (fácil de encontrar em todas as máquinas e S.O)

uC utilizado é o HCS12)

Pois então já me falaram em utilizar Xmodem, kermit, qual destes ou qual outro mais vocês podem me aconselhar?

Pensei também no TFTP, mas como sou num inexperiente na área deve ser um pouco mais complexo implementar este devido as pilhas tcp (estou correto?)

agradeço a ajuda desde já.


abraços
caiortp
 
Mensagens: 3
Registrado em: 05 Dez 2006 18:53
Localização: Santa Rita do Sapucaí

Mensagempor gibim » 12 Dez 2006 19:37

ChipSelect,

Achei na internet algumas informações mas nenhum material explicando melhor como funciona o protocolo de janela deslizantes, se você puder me enviar alguma referência, ficarei grato, pois assim posso implementar aqui. -> gibim@yahoo.com



Obrigado
Fernando Gibim.
Avatar do usuário
gibim
Byte
 
Mensagens: 117
Registrado em: 08 Nov 2006 21:40
Localização: Londrina - PR

Mensagempor chipselect » 13 Dez 2006 18:13

gibim

Infelizmente o material sobre esse algoritmo você vai encontrar mais em literaturas sobre redes de computadores, prinicpalmente no protocolo TCP.

O que eu fiz foi pegar o algoritmo, simplificar no máximo e implementar numa CPU Toshiba de 16 bits.

Agora estou simplificando mais ainda para por num 89C52.

Você não precisa implementar toda a janela deslizante no 8051, basta implementar a comunicação com pacotes e o sistema de confirmação de dados.

Janela deslizante define a transmissão de dados por pacotes de dados e confirmação do recebimento desses pacotes, sendo que esses pacotes são numerados sequencialmente, tanto no sentido disp1 -> disp2 como no sentido disp2 -> disp1.

Quando um dispositivo quer transmitir, ele fica enviando o(s) pacote(s) de dados até obter a cofirmação de recebimento de todos os pacotes. O número de pacotes que o transmissor pode enviar antes de receber a confirmação do primeiro pacote é o tamanho da janela. O transmissor enviou o número de pacotes máximo (janela), e não recebeu nenhuma confirmação ainda, o transmissor "espera" um tempo pra ver se recebe alguma coisa, e se não receber, ele retransmite tudo de novo.

Somente após receber a confirmação do primeiro pacote que o transmissor inclui o próximo pacote ainda não transmitido na janela, removendo da janela o pacote confirmado.

O dispositivo que recebe os pacotes, verifica a integridade (checksum) do pacote e, se tudo estiver ok, processa o pacote e envia uma confirmação que o pacote foi recebido. Obviamente isso acontece se a integridade do pacote estiver ok e se o pacote estiver na sequencia correta de numeração que o transmissor estava enviando.

O receptor não precisa enviar um pacote de "Go back(n)" ou de erro para pacotes inválidos ou com checksum inválidos. O pacote que foi perdido nessa situação será retransmitido pelo transmissor, já que ele não receberá uma confirmação do pacote. Isso irrá acontecer até o receptor receber direito o pacote ou o transmissor "se cansar" de enviar o pacote.

O numero de sequencia do pacote enviado pelo transmissor permite que o receptor identifique se o pacote já foi recebido, se é o pacote esperado ou se é um pacote que está na frente do pacote esperado.

No caso de receber pacotes que já foram recebidos, o receptor envia a confirmação dos pacotes recebidos sem reprocessar o pacote, obviamente. No caso de receber um pacote na frente do que realmente deveria receber (pulou un(s) pacotes, por exemplo), o receptor manda um pacote de "Go back(n)" onde o "n" permite definir o número de pacote que deveria receber. Nesse caso o transmissor volta a transmitir a partir desse tal "n".

O "Go back(n)" pode ser opcional, uma vez que o transmissor irá retransmitir todos os pacotes cuja confirmação ele não recebeu após um intervalo de tempo.

Obviamente os pacotes enviados do receptor ao transmissor também são numerados. Você pode fazer a confirmação e a numeração de pacotes de muitas maneiras. Por exemplo, pacotes de confirmação não precisariam respeitar a numeração de sequencia, mas conteriam o número de pacote recebido com sucesso da mesma forma.

Para iniciar a comunicação, a numeração dos pacotes tem que começar com algum valor, e se no meio da comunicação, uma falha grave ocorrer, os dois dispositivos devem ter suas numerações de pacotes "ressincronizados". Para isso eu uso um pacote especial que não precisa obedecer o sequenciamento de pacotes, e ele causa o cancelamento de qualquer comunicação para reiniciar uma nova, sincronizando a numeração de pacotes.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor gibim » 18 Dez 2006 21:28

Uffa, pensei que não conseguiria acabar de ler.rs

Agradeço toda a paciência em escrever e descrever todo o procedimento. De todas as opções mencionadas, esta é a que mais se adequa ao meu sistema atual. Agora basta eu implementar e se surgir mais dúvidas eu te contacto novamente.

Valeu !
Avatar do usuário
gibim
Byte
 
Mensagens: 117
Registrado em: 08 Nov 2006 21:40
Localização: Londrina - PR

Anterior

Voltar para Assuntos Gerais

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x