CanServo/Protoco/T2-Message
Jump to navigation
Jump to search
개요
- 여러 개의 T-Message 가 섞이는 경우, 수신 측에서 분석 실패가 발생할 수 있습니다.
- CRC16만으로는 16 비트 초과의 변질을 감지할 수 없습니다.
- 예를 들어, 5개 패킷으로 이루어진 메시지에서 1-2개 패킷이 유실되어도 CRC가 맞을 가능성이 있습니다.
- 실제로 이런 일이 발생하였습니다.
- 완벽을 위한 조건은 다음과 같습니다.
- 발신자 구분 = CAN ID를 통해서 구분
- 메시지마다 증가하는 시퀸스
- 패킷마다 증가하는 시퀸스
- 실제 전달하는 메시지의 길이
- 체크섬
- 발신자 구분이 가능하면 CRC 16, 구분이 불가능하면 CRC32 ?
- 의문: 패킷1개가 바뀌는 경우에는 7바이트가 바뀌는 것인데 CRC16,32의미가 있는가? 그래도 확률상 32가 나음?
- 체크섬, 메시지 길이의 위치 = 처음에 넣음. 마지막에 넣는 다면, 이것도 유동적이라 부적절함.
- 사용 조건
- 1개 패킷으로 보낼 수 있는 경우는 T-Message 로 전송
- 1개 패킷으로 보낼 수 없는 경우에 T2-Messsage 전송
- Format
- Message = L(2), crc(2 or 4), msg body(L byte)
- Packet = part of msg(max 7 or 63), tail byte (begin/end flag, packet seq: 4 bit, msg seq: 2 bit)
- packet seq 의 최상위 bit는 toggle flag 자리를 사용
- T-Message 와의 구분
- T-Message의 toggle flag 는 1 부터 시작.
- packet seq 가 0 부터 시작하므로, toggle bit 자리가 0이 되어 구분이 가능.