CRC와 응답
16/42

자동차의 직렬 통신에서 가장 큰 도전 과제는 전송 과정에서 매우 높은 수준의 안정성을 보장하는 것입니다. 여기에 이용되는 CRC 방식(순환 중복 검사)은 가장 강력한 에러 탐지 방법 중 하나입니다.

CRC 방식에서 CRC 시퀀스(CRC sequence)는 전송되는 비트(SOF에서 시작하여 데이터 필드를 포함)와 ISO 11898-1에서 규정하는 생성 다항식(generator polynomial) G(x)에 의해 처리됩니다. CRC 시퀀스에서는 전송되는 비트가 추가되며, 다항식 또한 전반적으로 전송될 여러 비트를 포함합니다. 이후 이 다항식의 리시버는 매우 높은 안정도로 전송 에러가 발생했는지를 탐지합니다. (예외: CRC 시퀀스 자체가 간섭으로 인해 고장 난 경우) 이는 생성 다항식의 분할이 나머지를 생성하는 경우에 발생합니다.

이 분할의 결과로 각 리시버는 응답(Acknowledgement)을 수행하는데, 이는 다른 수용 필터링과는 독립적입니다. 리시버의 응답은 긍정적일 수도, 부정적일 수도 있습니다. ACK 슬롯의 우성 레벨은 긍정적인 응답을, 열성 레벨은 부정적인 응답을 의미합니다.

ACK 구획 문자는 에러를 탐지하기 위해 언제나 열성으로 전송됩니다. 메시지를 전송할 때 트랜시버가 ACK 슬롯과 ACK 구획 문자를 모두 열성으로 보내기 때문에 하나의 긍정적인 응답으로도 메시지 전송이 정상적으로 이루어졌음을 확인하기에 충분합니다. 이것이 바로 CAN 네트워크의 응답 방식이 노드-중립(node-neutral) 긍정 응답으로 불리는 이유입니다.

응답에 관한 우측 그림을 통해 CAN 네트워크의 응답을 학습할 수 있습니다. 이 그림은 하나의 송신 노드와 두 개의 긍정 응답 리시버를 다룹니다.

노드 중립 긍정 응답에서 부정 응답의 CAN 노드는 덮어 씌워지며 처음에는 이 노드의 반응을 인지할 수 없습니다. 네트워크 범위의 데이터 일관성을 보장하기 위해 이 노드는 ACK 구획 문자가 발생한 후 에러 플래그를 발신합니다.

긍정적인 응답이 하나도 없을 경우 어떠한 리시버도 열성 ACK 슬롯을 덮어쓸 수 없으며 송신 노드는 ACK 에러(ACK error)를 탐지하고, 에러 플래그를 발신하여 진행 중인 메시지 전송 과정을 종료합니다. ACK 에러는 송신 노드에 의해 에러가 발생했거나 버스에 리시버가 없다는 것을 의미합니다.