CAN 통신

CAN 프로토콜 개요

임베디드 친구 2025. 2. 18. 09:44
728x90
반응형

1. CAN(Controller Area Network) 프로토콜이란?

CAN(Controller Area Network)은 자동차, 산업 자동화, 로봇, 의료 기기 등 다양한 임베디드 시스템에서 널리 사용되는 직렬 통신 프로토콜입니다. CAN 프로토콜은 1980년대에 독일의 Bosch사에서 개발하였으며, 높은 신뢰성과 실시간 데이터 교환이 필요한 환경에서 효과적으로 동작합니다.

1.1 CAN 프로토콜의 특징

  • 멀티마스터(Multi-Master) 방식: 네트워크 내 모든 노드가 송신할 수 있으며, 특정 노드에 의존하지 않습니다.
  • 우선순위 기반 메시지 송수신: 메시지의 ID 값을 이용하여 우선순위를 정하고, 우선순위가 높은 데이터가 먼저 전송됩니다.
  • 에러 검출 및 오류 복구 기능: CRC(Cyclic Redundancy Check) 및 ACK(Acknowledgment) 메커니즘을 통해 신뢰성을 보장합니다.
  • 비트 스터핑(Bit Stuffing) 기법: 연속된 동일 비트가 일정 개수를 초과하지 않도록 변조하여 데이터의 신뢰성을 높입니다.
  • 송수신 노드 간 동기화 필요 없음: 클록 신호 없이 데이터 전송이 가능하여 하드웨어 부담을 줄입니다.

2. CAN 프레임 구조

CAN 프레임은 크게 Standard Frame(표준 프레임)Extended Frame(확장 프레임)으로 구분됩니다.

2.1 Standard Frame (표준 프레임)

표준 프레임은 11비트의 식별자(ID)를 포함하며, 전체 길이는 44비트에서 108비트까지 변동될 수 있습니다.

필드 이름 비트 길이 설명
Start of Frame (SOF) 1비트 프레임 시작을 나타내는 비트
Identifier (ID) 11비트 메시지의 우선순위를 결정하는 ID
Remote Transmission Request (RTR) 1비트 데이터 프레임(0) 또는 원격 프레임(1) 구분
Identifier Extension (IDE) 1비트 표준(0) 또는 확장(1) 프레임 구분
Reserved Bit (r0) 1비트 예약된 비트(사용 안 함)
Data Length Code (DLC) 4비트 데이터 길이 (0~8바이트)
Data Field 0~64비트 실제 전송할 데이터 (최대 8바이트)
CRC Field 15비트 에러 검출을 위한 CRC 값
ACK Field 2비트 수신 노드가 데이터를 정상적으로 수신했는지 확인
End of Frame (EOF) 7비트 프레임 종료 표시

2.2 Extended Frame (확장 프레임)

확장 프레임은 표준 프레임과 비교하여 18비트의 확장 식별자(Extended Identifier)가 추가되며, 총 29비트의 식별자를 사용합니다. 이를 통해 더 많은 종류의 메시지를 처리할 수 있습니다.

필드 이름 비트 길이 설명
Start of Frame (SOF) 1비트 프레임 시작을 나타내는 비트
Identifier (ID) 11비트 기본 식별자
Substitute Remote Request (SRR) 1비트 표준과 확장 프레임 구분
Identifier Extension (IDE) 1비트 확장 프레임(1) 설정
Extended Identifier (EID) 18비트 확장 식별자
Remote Transmission Request (RTR) 1비트 데이터 프레임(0) 또는 원격 프레임(1) 구분
Reserved Bits (r0, r1) 2비트 예약된 비트
Data Length Code (DLC) 4비트 데이터 길이 (0~8바이트)
Data Field 0~64비트 실제 전송할 데이터 (최대 8바이트)
CRC Field 15비트 에러 검출을 위한 CRC 값
ACK Field 2비트 수신 노드가 데이터를 정상적으로 수신했는지 확인
End of Frame (EOF) 7비트 프레임 종료 표시

3. 주요 필드 설명

3.1 Identifier (ID)

CAN 메시지는 ID 값을 통해 우선순위를 결정합니다. 값이 낮을수록 높은 우선순위를 가집니다.

3.2 DLC (Data Length Code)

DLC는 전송할 데이터의 길이를 나타내며, 최대 8바이트까지 지정할 수 있습니다.

3.3 CRC (Cyclic Redundancy Check)

데이터 오류를 검출하기 위한 15비트의 오류 검출 코드입니다.

3.4 ACK (Acknowledgment)

수신 노드는 메시지를 정상적으로 수신하면 ACK 비트를 0으로 설정하여 송신 노드에 성공적으로 전달되었음을 알립니다.

4. 비트 스터핑(Bit Stuffing)과 에러 검출 방식

4.1 비트 스터핑(Bit Stuffing)

비트 스터핑은 연속된 동일한 비트(0 또는 1)가 5개 이상 나오지 않도록 중간에 반대 비트를 삽입하는 기법입니다. 이는 데이터의 동기화를 유지하고 신뢰성을 높이기 위해 사용됩니다.

4.2 CAN의 에러 검출 방식

CAN 프로토콜은 높은 신뢰성을 보장하기 위해 다양한 에러 검출 방식을 적용합니다.

  1. CRC(Cyclic Redundancy Check): 전송된 데이터의 무결성을 확인하기 위한 오류 검출 코드입니다.
  2. ACK Slot Checking: 수신 노드가 정상적으로 데이터를 수신했는지 확인합니다.
  3. Bit Monitoring: 송신한 비트와 버스에 실제 전송된 비트를 비교하여 오류를 감지합니다.
  4. Bit Stuffing Checking: 비트 스터핑 규칙을 위반하면 오류로 판단합니다.
  5. Frame Check: 메시지 형식(Frame Format)과 필드 값의 일관성을 검사합니다.

5. 결론

CAN 프로토콜은 높은 신뢰성과 실시간성이 중요한 환경에서 널리 사용됩니다. 표준 프레임과 확장 프레임을 활용하여 다양한 메시지를 효율적으로 전달할 수 있으며, 비트 스터핑과 CRC 기반의 강력한 오류 검출 기능을 갖추고 있습니다. 이를 통해 자동차, 산업 자동화, 의료 기기 등 다양한 분야에서 안정적인 통신을 제공합니다.

반응형