Existencia de caractere ASCII para reenvio

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Existencia de caractere ASCII para reenvio

Mensagempor Anderson_Arantes » 26 Mai 2008 15:51

Prezados Senhores,
Estou complementando as funções já disponíveis em um dispositivo que desenvolvi.
Entre as funções sendo acrescentadas, há uma que carrega dados recebidos pela USART em um buffer em RAM que, quando completo(preenchido) é armazenado em EEPROM externa.

O controle de fluxo é feito por software (caracteres Xon/Xoff) e se utiliza o hyperterminal na transferência. A cada recepção de caractere, o firmware envia um Xoff, verifica paridade, atualiza um barra gráfica(LCD) e se necessário,transfere conteúdo do buffer à EEPROM.

O problema é que se identificada falha de paridade, não sei como solicitar o reenvio do último caractere ao PC. Existe algum caractere de controle para isso?

Estatisticamente pude observar a recepção incorreta de uns 5 ou 6 caracteres para arquivos de 20Kbytes, valor crítico para minha aplicação.

Também observei na fase de execução passo a passo que após enviado pelo microcontrolador um caractere Xoff, suspendendo a transferência do arquivo, este é ignorado pelo PC após aproximadamente 5 S que restaura a condição de envio,transmitindo um caractere do arquivo a cada 5S.

Antecipadamente agradeço à todos.
Anderson Arantes.
Anderson_Arantes
Bit
 
Mensagens: 42
Registrado em: 13 Out 2006 15:58
Localização: Rio de Janeiro

Mensagempor Wagner de Queiroz » 26 Mai 2008 20:38

Edson, voce vai ter que criar um protocolo de alto nivel entre o PC e seu dispositivo. Voce pode usar os caracteres de controle ASCII de 1 a 31 para sinalizar algumas coisas.

Imagem

Por exemplo: voce envia um pacote de dados comecando por SOH (Start of Header) com um valor de 1 a 255 que identifica a quantidade de bytes a serem enviados do pacote, e concluir o pacote com um checksum basico. Ao receber o mcu responde com ACK ou NAK (Mantendo o seu Xon e Xoff caso sinta necessidade) Caso tenha um XON ou XOFF no meio do caminho que pertença ao pacote de dados coloque um ESC antes. Caso o ESC faça parte dos dados, Coloque um ESC antes ou seja
para enviar 1 2 ESC 3 vc enviaria 1 2 ESC ESC 3 Assim quando o destino receber um ESC fica esperto, se o proximo for outro ESC, ele coloca um ESC no buffer de recepcao e o outro ESC é ignorado.

A técnica pode parecer maluca a principio mas é muito conhecida e se chama Byte Stuffing

web.cs.wpi.edu/~rek/Undergrad_Nets/ B01/BitByteStuffing.pdf
http://www.its.bldrdoc.gov/fs-1037/dir-005/_0639.htm

Caso o receptor após enviar um pacote de dados recebe um nak, ele reenvia o pacote.
É claro que voce vai ter que fazer o protocolo no pc tb. Ou entao tente usar o XMODEM ou ZMODEM que sao protocolos usados por modem.
http://en.wikipedia.org/wiki/XMODEM


http://timeline.textfiles.com/1988/10/1 ... ymodem.txt
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor Anderson_Arantes » 27 Mai 2008 09:45

Caro Wagner,
Mais uma vez agradeço por sua colaboração. Vou pesquisar os caminhos apontados. Se alcançar o exito desejado, retorno. Obrigado.

Anderson Arantes.
Anderson_Arantes
Bit
 
Mensagens: 42
Registrado em: 13 Out 2006 15:58
Localização: Rio de Janeiro


Voltar para PIC

Quem está online

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

cron

x