Forçando um baud ininterrupto limpo ao receber dados via porta serial

0

Eu fiz um projeto com um micro-controlador que me permite enviar dados para o PC, onde os baixos nibbles de dados sempre seguem a mesma sequência. Por exemplo, meus dados são enviados assim:

x0 x1 x2 x3 x4 ..... xE xF

em que x é qualquer valor hexadecimal de 0 a F.

No começo, a transmissão é boa, mas quando envio dados do PC para o micro-controlador e depois os dados são retornados, ele sempre quer pular a mesma posição de byte. Por exemplo, em vez de ...

x0 x1 x2 x3 x4......

Eu recebo:

x0 x2 x3 x4.....

Eu verifiquei meu código e ele é eficiente, então não pode ser código especialmente se a mesma função exata para produzir os dados para o PC for exatamente a mesma toda vez e essa função formatar os dados para que o nibble inferior seja a sequência número e aguarda que a transmissão seja concluída.

Isso me faz pensar que há algumas configurações do Unix que eu preciso aplicar.

Eu olhei para o setserial e stty, mas estou imaginando quais configurações são realmente as melhores. Não me importo se meu computador literalmente bloqueia todos os outros processos enquanto os testes em série são executados.

Eu estava pensando em ajustar as opções closing_wait e close_delay em setserial e talvez permitir low_latency, bem como usar os comandos nice e ionice no aplicativo (aka od) para assistir a E / S. Mas, novamente, o aplicativo que estou usando é ruim? Este é o comando que eu usei para ler dados ...

od -t x1 -w16 -v /dev/ttyS0

Então, quais ferramentas unix ajudariam o máximo que me permitiria obter TODOS os dados sem perder nenhum caractere da porta serial? A taxa de dados definida para os dois dispositivos é de 57600bps e estou usando um cabo de porta serial de um metro.

    
por Mike 28.10.2017 / 05:07

0 respostas