CAN(Controller Area Network)이란?
지능형 디바이스를 네트워크로 연결하는 고정밀 시리얼 버스 시스템이다. 자동차에서 각 ECU(Electonic Control Unit) 끼리 통신하는데 사용되는 표준 통신 규격이며, 현재는 자동차 이외에도 각종 산업기계나 의료기기 등 다양한 분야에서 사용되고 있다고 한다.
CAN의 특징
- Multi Master 구조
여러 노드(ECU, 센서, 액추에이터 등)가 동일한 버스에서 통신할 수 있으며, 하나의 마스터 장치에 의존하지 않는다.
- 비동기 데이터 전송 (통신 속도 빠름)
데이터 전송은 클럭을 동기화할 필요 없이 비동기로 이뤄지며, 표준 속도는 1Mbps까지 지원한다.
- 메시지 우선순위
CAN 프레임의 ID 필드가 존재하여 우선순위를 설정할 수 있다. 우선순위가 높은 메시지가 충돌 없이 전송되며, ID 숫자가 낮을 수록 우선순위가 높다.
- 비트 단위 오류 검출
데이터 전송 중 오류가 발생하면 즉시 검출하며, 전송을 중단하고 재전송 할 수 있다.
- 브로드캐스트 통신
네트워크 상 모든 노드에 브로드캐스트하고, 각 ECU는 자기가 관련된 데이터만 처리하는 방식을 가진다.
CAN의 장점
- 노이즈에 강함
Twist pair 2선을 사용하여 전자기 간섭에 강해 안정적인 데이터 전송을 제공한다.
- 낮은 비용
하나의 버스로 여러 장치가 연결되므로 배선 비용을 줄일 수 있다.
- 확장성
역시 버스 형태이므로, 노드를 쉽게 추가할 수 있다.
- 효율성
우선순위 기반이므로, 중요한 데이터는 먼저 전송되며, 충돌이 발생해도 재전송이 빠르다. 또한, 브로드캐스트로 패킷을 날리고 각 ECU가 특정 ID만 수신이 가능하다.
- 실시간 통신
실시간으로 신뢰성있는 데이터 전송이 가능하며, 데이터를 쓰고 전송하면 나머지 처리는 알아서 하드웨어가 전송해준다.
CAN 프레임 구조 및 필드
SOF (Start of Frame)
프레임의 시작을 알리는 비트로, 모든 CAN 프레임은 이 비트로 시작한다. 이 필드는 하나의 0 비트로 구성되며, 송신측과 수신측의 동기화를 위한 비트이다.
Arbitration Field - 12 bits
1) Identifier - 11bits
메시지의 우선순위를 나타내고, 송신자 또는 수신자를 식별하는 데 사용된다. 표준 CAN에서는 11비트, 확장 CAN에서는 29비트를 사용하며, ID 값이 낮을수록 우선순위가 높다.
2) RTR (Remote Transmission Request) - 1bit
데이터를 요청하는 메시지인지, 실제 데이터를 보내는 메시지인지 나타낸다.
- 0 : 데이터 프레임
- 1 : 원격 프레임(데이터 요청 메시지)
다른 노드에게 data를 요청하기 위해서 사용되며, Data 필드가 없이 구성된다. 원격 프레임 요청을 받은 장치가 적절하게 설정되어 있으면 Data를 응답해줄 것이다.
Control Field - 6bits
1) IDE - 1bit
표준 CAN인지, 확장 CAN인지 구분한다.
- 0 : 표준 CAN(11비트 ID)
- 1 : 확장 CAN(29비트 ID)
2) Reserved - 1bit
- 예약 필드(0)
3) DLC - 4bits
Data Length Code의 약자로, 전송되는 데이터의 길이를 나타낸다.
Data Field - 8bites
payload가 위치하는 필드이며, 최대 8bytes 까지 전송 가능하다.
CRC Field - 16 bits
데이터의 무결성을 확인하기 위한 오류 검출 코드이다.
1) CRC - 15bits
데이터 무결성을 보장하는 15비트 CRC 값이다.
2) CRC Delimiter - 1bit
CRC 필드가 끝났음을 구분하는 고정된 비트로, 항상 1로 설정된다.
ACK (Acknowledgment) - 2bits
수신자가 데이터를 성공적으로 받았는지를 송신자에게 확인한다.
1) Acknowledge Slot - 1bit
수신자가 데이터를 정상적으로 받았는지를 송신자에게 알리는 비트이다.
- 0 : 수신자가 성공적으로 수신
- 1 : 오류 발생
2) Acknowledge Delimiter - 1bit
ACK 필드의 끝났음을 구분하는 고정된 비트로, 항상 1로 설정된다.
EOF (End of Frame) - 7bits
7개의 연속된 1비트로, 프레임 전송 완료를 알린다. 수신자는 EOF 프레임이 정상적으로 끝났는지 확인하며, 전송 실패 시 EOF 대신 Error Frame이 전송된다.
IFS (Interframe Space) - 3bits
두 프레임 사이에 3비트 간격으로, 다음 프레임 전송 전에 버스가 IDLE 상태로 전환된다. 다음 프레임 전에 충분한 대기 시간으로 버스를 안정화하여 충돌을 방지한다. 모든 CAN 노드가 이 간격을 준수해야 한다.
Extended CAN
- Standard CAN (2.0A) : 11비트 ID
- Extended CAN (2.0B) : 29비트 ID
2.0A 경우에는 표준 CAN(11비트 ID)만 고려하며, 2.0B는 표준 CAN, 확장 CAN 모두 고려한다. CAN 네트워크에 2.0A와 2.0B가 같이 있을 경우에 2.0B가 확장 CAN을 사용해서 전송하면 2.0A에서는 에러가 발생한다.
Reference