Detectando quando o RX serial fica ocioso entre os pacotes de dados

2

Estou executando um computador baseado em ARM que recebe dados de um dispositivo externo via serial. O dispositivo externo alterna entre rajadas de dados e inativo: 25 bytes, depois 3ms ociosos, 25 bytes, 3ms ociosos e assim por diante. No entanto, a cada momento, um byte cai no meio do pacote e só gera 24 bytes. Devido à pequena inconsistência, estou tentando descobrir uma maneira de detectar quando a linha fica inativa, para que eu possa ter certeza de que estou processando no início do próximo pacote.

O pacote usa bytes de início e parada, 0xF0 e 0x00, mas eles não são exclusivos. Um 0xF0 ou 0x00 pode chegar como dados no meio do pacote sem qualquer tratamento especial. Acredito que detectar 3ms de inatividade seguido por um byte inicial é a única maneira de ter certeza de que um novo pacote está chegando.

Existe uma maneira no Linux de detectar a linha ociosa e sincronizar com o início de um novo pacote dessa maneira? Estou codificando principalmente em C usando open () e read () na porta serial, mas um script de shell também funcionaria.

    
por Dan Laks 23.12.2016 / 18:24

0 respostas