저는 직렬을 통해 외부 장치로부터 데이터를 수신하는 ARM 기반 컴퓨터를 실행하고 있습니다. 외부 장치는 데이터 버스트와 유휴 상태(25바이트, 3밀리초 유휴, 25바이트, 3밀리초 유휴 등)를 번갈아 가며 나타냅니다. 그러나 패킷 중간에 1바이트를 삭제하고 24바이트만 출력하는 경우가 많습니다. 약간의 불일치가 있기 때문에 회선이 유휴 상태일 때를 감지하여 다음 패킷의 시작 부분을 처리하고 있음을 확신할 수 있는 방법을 찾으려고 노력 중입니다.
패킷은 시작 및 중지 바이트 0xF0 및 0x00을 사용하지만 고유하지는 않습니다. 0xF0 또는 0x00은 특별한 처리 없이 패킷 중간에 데이터로 도착할 수도 있습니다. 나는 3ms의 유휴 시간과 시작 바이트를 감지하는 것이 새 패킷의 도착을 결정하는 유일한 방법이라고 생각합니다.
Linux에서 유휴 회선을 감지하고 이런 방식으로 새 패킷의 시작 부분과 동기화하는 방법이 있습니까? 나는 주로 직렬 포트에서 open()과 read()를 사용하여 C로 코딩했지만 쉘 스크립트도 작동할 것입니다.