SR §5 정의가 **"수신 실패"가 아니라 "신뢰할 수 없음"**이다. 이 차이가 결정적이다.
프레임이 와도 통신 오류일 수 있다
값이 정상 범위로 도착해도, 그 값이 오래됐으면 통신 오류다. 실제로 잡기 어려운 고장이 이것이다.
송신 노드의 애플리케이션이 hang
→ CAN 컨트롤러는 마지막 프레임을 자동 재전송
→ 수신 측은 정상 프레임을 계속 받는다
→ 값이 안 변할 뿐이다
이걸 잡으려면 세 층의 감시가 필요하다.
| 감시 대상 | 방법 | 놓치는 것 |
|---|---|---|
| 노드가 살아 있는가 | heartbeat 프레임 | 특정 태스크만 죽은 경우 |
| 신호가 갱신되는가 | 신호별 max age | 값이 원래 잘 안 바뀌는 신호(도어 상태) |
| 송신 태스크가 도는가 | alive counter | — |
heartbeat 만 있으면 "노드는 살아 있는데 센서 태스크만 죽은" 경우를 못 잡고, max age 만 있으면 변화가 드문 신호를 오탐한다.
복구 시 마지막 값을 쓰면 안 된다
§6.4.4 "통신 오류 복구 시 이전에 수신한 마지막 정상 정보를 근거로 새로운 자동 기능을 수행하지 않아야 한다."
복구 직후의 "마지막으로 알던 값"은 이미 낡았다. 그래서 §6.4.4 는 재평가가 먼저, 동작은 그 다음을 요구한다.