오늘날에도 비동기식 직렬 통신이 전자 장치에 널리 보급됨에 따라 많은 사람들이 때때로 이러한 질문에 직면했다고 생각합니다. 직렬 회선 (RS-232 또는 이와 유사한)으로 연결된 전자 장치 D
와 컴퓨터를 고려하여 PC
정보를 지속적으로 교환해야합니다 . 즉 , PC
각 명령 프레임을 보내고 상태 보고서 / 원격 측정 프레임으로 각각 응답합니다 (보고서는 요청에 대한 응답으로 보내거나 독립적으로 중요하지 않습니다). 통신 프레임 은 임의의 이진 데이터를 포함 할 수 있습니다 . 통신 프레임이 고정 길이 패킷이라고 가정합니다.X ms
D
Y ms
문제 :
프로토콜이 연속적이므로 수신 측은 진행중인 전송 된 프레임의 중간에서 동기화를 풀거나 "결합"할 수 있으므로 프레임 시작 (SOF) 위치를 알 수 없습니다. 데이터는 SOF에 상대적인 위치에 따라 다른 의미를 가지며, 수신 된 데이터는 잠재적으로 영원히 손상됩니다.
필요한 솔루션
복구 시간이 짧은 SOF를 감지하는 안정적인 구분 / 동기화 체계 (즉, 재 동기화하는 데 1 프레임 이상 걸리지 않아야 함)
내가 알고있는 (그리고 일부를 사용하는) 기존 기술 :
1) 헤더 / 체크섬 -SOF는 미리 정의 된 바이트 값입니다. 프레임 끝의 체크섬.
- 장점 : 단순합니다.
- 단점 : 신뢰할 수 없습니다. 알 수없는 복구 시간
2) 바이트 스터핑 :
- 장점 : 모든 하드웨어에서 안정적이고 빠른 복구가 가능합니다
- 단점 : 고정 크기 프레임 기반 통신에 적합하지 않음
3) 9 비트 마킹 -각 바이트 앞에 추가 비트를 붙이고 SOF로 표시 1
하고 데이터 바이트는 다음으로 표시합니다 0
:
- 장점 : 안정적이고 빠른 복구
- 단점 : 하드웨어 지원이 필요합니다. 대부분의
PC
하드웨어 및 소프트웨어에서 직접 지원되지 않습니다 .
4) 8 비트 마킹 -위의 에뮬레이션의 종류, 9 번째 대신 8 비트를 사용하는 경우 각 데이터 워드에 대해 7 비트 만 남습니다.
- 장점 : 모든 하드웨어에서 안정적이고 빠른 복구가 가능합니다.
- 단점 : 기존의 8 비트 표현과 7 비트 표현 사이의 인코딩 / 디코딩 체계가 필요하다. 다소 낭비입니다.
5) 타임 아웃 기반 -정의 된 유휴 시간 이후에 오는 첫 바이트로 SOF를 가정합니다.
- 장점 : 데이터 오버 헤드가없고 간단합니다.
- 단점 : 그렇게 신뢰할 수는 없습니다. Windows PC와 같은 열악한 타이밍 시스템에서는 제대로 작동하지 않습니다. 잠재적 인 처리량 오버 헤드.
질문 : 문제를 해결하기 위해 가능한 다른 기술 / 솔루션은 무엇입니까? 위의 목록에서 쉽게 해결할 수있는 단점 을 지적 하여 제거 할 수 있습니까? 시스템 프로토콜을 어떻게 설계합니까?