Às vezes, meu UART recebe um caractere nulo

0

Em um sistema incorporado, eu uso um GPS com outros dispositivos conectados em 3 UARTs. Quando uso o comando cat ou minicom com UARTs / dev / ttyUSB0 e outros, perco caracteres (recebo caracteres nulos em vez de caracteres excluídos).

/ dev / ttyUSB0: mensagens binárias em 200Hz (230400 bauds)

/ dev / ttyS2: mensagem NMEA a 1 Hz (115200 bauds)

/ dev / ttyS1: mensagem NMEA a 2 Hz (115200 bauds)

Às vezes em / dev / ttyS2:$GPZDA,5[00]5519.00,14,12,2016,,*69[0D][0A]

Às vezes em / dev / ttyS1:$GPGGA,155513.50,...,472[00]79,M,2.4,0120*65[0D][0A]

A média de carga é de 0,14, 0,11, 0,04.

Gostaria de saber se existe uma opção no kernel para melhorar isso?

Eu uso o kernel 3.11.6

obrigado

Nota: Se eu definir a taxa de transmissão em 19200 para / dev / ttyS1 e / dev / ttyS2, o problema desaparecerá para essas portas seriais.

Nota 2: Com um conversor USB / serial, tentei conectar a linha TX de / dev / ttyS2 ao meu computador e não tenho caracteres nulos. Suponho que o sinal não seja perturbado. Além disso, se eu parar o comando cat ou minicom em / dev / ttyUSB0 (200 hz), o problema desaparecerá.

D.Piquet
fonte
Dependendo das configurações do termios , um erro de enquadramento ou paridade será indicado pela disciplina de linha com a substituição do caractere por um NULL. "se eu definir a taxa de transmissão em 19200 ..., o problema desaparecerá" - Então você está tentando usar uma taxa de transmissão muito rápido para as condições (por exemplo, cabo muito longo, bitola pequena demais, blindagem inadequada ??? )
sawdust
Eu adicionar a nota 2. Else Eu li termios manual: When neither IGNBRK nor BRKINT are set, a BREAK reads as a null byte ('\0'). Eu tentei desativar essas opções, mas eu tenho o mesmo problema (com o gato no / dev / ttyUSB0)
D.Piquet
Leia a página de manual e meu comentário novamente. Não estava me referindo a uma condição BREAK, mas a um erro de enquadramento ou paridade. Na página de manual termios : se nem IGNPAR nem PARMRK estiverem configurados, leia um caractere com um erro de paridade ou erro de estrutura como \ 0.
sawdust