CAN message types으로는 다음과 같이 네 가지가 있다.
- Data frame
- Remote frame
- Error frame
- Overload frame
Data frame과 Remote frame은 애플리케이션에서 더 자주 사용된다. 하지만 Error frame과 Overload frame은 controller에 의해 자동으로 사용된다.
우리가 프로그래밍할 때는 기본적으로 Data frame을 Remote frame보다 더 자주 사용하게 된다.
Data frame은 CAN 노드가 메시지를 브로드캐스트할 때 사용하는 표준 프레임 형식이다.

Data Frame은 다음과 같은 fields로 구성된다.
① Start Of Frame(SOF)
② Arbitration Field
③ Control Field & DLC(Data Length Code)
④ Data Field
⑤ CRC Field
⑥ ACK Field
⑦ EOF(End Of Frame) & IFS(Inter Frame Spacing)
Remote Frame은 다른 노드로부터 데이터를 요청하기 위한 프레임이다. 구조는 Data Frame과 유사하지만 다음의 차이점이 있다.
Arbitration Field 내 RTR bit가 recessive로 설정
Data Field의 부재
Example)
Node A가 ID 123으로 Remote Frame을 보내면, Node B는 동일한 ID로 Data Frame을 응답한다. 이는 Request-Response 구조 구현을 가능하게 한다.
예를 들어, 1번 제어기와 2번 제어기 모두 메시지를 보냈다고 하겠다. 브로드캐스트 방식이기 때문에, 두 메시지 모두 네트워크 전체에 전달되어야 한다. 하지만 1번 제어기와 2번 제어기가 보내는 메시지가 서로 다르기 때문에, 즉, 각 제어기가 만드는 전기적인 신호가 서로 달라 왜곡될 것이다.

그래서 CAN 통신에서는 특정 순간에 오직 하나의 메시지만 통신할 수 있도록 한다. 즉, 위의 상황에서처럼, 1번 제어기와 2번 제어기가 메시지를 보낸다고 할 때, 동시에 보낼 수는 없으므로, 서로 간에 우선순위를 정하여 메시지를 보내는 것이다. 우선순위를 정하기 위해 '메시지의 identifier가 작을수록 우선순위가 높다'라는 규칙을 도입했다.
이렇게 CAN은 CSMA/CD + AMP(Carrier Sense Multiple Access with Collision Detection and Arbitration on Message Priority) 방식으로 arbitration을 수행한다.
CSMA: 버스가 Idle 상태일 때만 전송 시도 가능. Idle 상태는 EOF + IFS의 recessive 상태로 판단
AMP: Identifier 기반 우선순위 중재. bit-wise arbitration 과정에서 recessive를 보낸 노드가 dominant를 감지하면 즉시 arbitration에서 탈락
<참고 자료>
CAN frame, https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC:CAN-Frame_mit_Pegeln_mit_Stuffbits.svg
Kiran Nayak, Mastering Microcontroller: Timers, PWM, CAN, Low Power(MCU2), Udemy, 2025.05.
존버매니아, CAN통신 - 자동차 신입이 알아야 할 모든 것, 인프런