03. CAN 메시지 구조
CAN 프레임이란
CAN 프레임은 서로 다른 노드가 CAN 네트워크를 통해 전송되는 데이터 단위입니다. 노드가 전송하는 메시지의 구조라 볼 수 있습니다. CAN 프레임에는 메시지 ID, 데이터, 데이터 유효성을 검증하기 위한 CRC 등이 들어갑니다.
CAN 프레임은 크게 표준(Standard) 포맷(버전 2.0A)과 확장(Extended) 포맷(버전 2.0B)으로 나눌 수 있습니다. 표준 포맷은 메시지 ID의 길이가 11bit로 최대 2048개의 메시지 ID를 가질 수 있습니다. 2048개의 메시지가 충분하지 않은 경우 확장포맷을 사용하면 됩니다. 확장 포맷은 메시지의 길이가 29 bit로 2의 29승 개의 메시지 ID를 가질 수 있습니다.
CAN 프레임 종류
CAN 프레임에 종류로는 데이터 전송에 사용하는 Data 프레임과 에러가 감지한 노드가 전송하는 Error 프레임이 있습니다. 이외에도 Remote 프레임과 Overload 프레임과 있지만 차량 도메인에서는 잘 사용하지 않습니다.
표준 CAN 프레임 구조
CAN 프레임은 크게 헤더 + 데이터 + 테일로 구성됩니다.
데이터 필드 앞에 위치하는 헤더에는 메시지 ID, 메시지 설정을 위한 Control 필드가 들어가고 데이터 필드 뒤에 위치하는 테일에는 유효성 검증, 에러 핸들링을 위한 필드가 들어갑니다.
SoF (Start of Frame)
- SoF는 CAN 프레임의 첫 번째 비트로 항상 "0" 값을 가집니다.
- CAN 버스가 IDLE 상태 (11 bit 연속 1)일 때 SoF 비트를 전송하며 데이터 전송을 시작합니다.
- BUS IDLE 후 SoF bit가 오면 falling edge가 만들어지고 이때 동기화 작업이 수행됩니다.
ID (Identifier)
- ID는 Standard 포맷의 경우 11 비트 길이를 가집니다.
- 메시지의 ID는 신호의 종류를 나타내며 메시지의 우선순위를 결정합니다.
- 메시지의 우선순위는 ID가 작을 수록 높습니다.
RTR (Remote Transmission Request)
- RTR 비트는 CAN 프레임이 Data 프레임인지 Remote 프레임인지 결정합니다.
- 0 (Dominant bit)인 경우가 Data 프레임이고 1(Recessive bit)인 경우 Remote 프레임
- 자동차 도메인에서는 Remote 프레임은 사용하지 않으므로 RTR 비트는 0으로 고정하여 사용합니다.
RTR 비트 까지를 arbitration 영역이라고도 부르는 데, RTR 비트까지는 버스에 어떤 메시지를 보낼지 결정하는 arbitration할 수 있기 때문입니다. RTR 비트까지 버스에 보내지고 나면 버스에 보낼 메시지가 하나로 결정됩니다.
IDE (Identifier Extension)
- IDE는 프레임이 Standard 포맷인지 Extended 포맷인지 결정합니다.
- IDE가 0 (Dominant bit)이면 Standard Format이고 1 (Recessive)이면 Extended 포맷입니다.
r (Reserved)
- Reserved 비트는 0으로 고정됩니다.
DLC (Data Length Code)
- DLC는 Data 필드의 길이를 나타냅니다.
- 데이터는 0부터 최대 8 바이트 길이를 가집니다. (DLC가 8보다 큰 값인 경우는 8로 취급)
CRC (Cyclic Redundancy Check)
- CRC 데이터로 통신 상의 오류를 판별합니다.
- 메시지를 받는 노드는 CRC를 계산하여 데이터에 오류가 있는지 판단합니다.
- CRC가 일치할 경우 CRC 계산 결과 오류가 없다는 의미로 positve ACK (dominant) 신호를 보내고 CRC 불일치하는 경우 오류가 있다는 의미로 negative ACK (recessive) 신호를 보냅니다.
EoF (End of Frame)
- ACK Delimiter 부터 EOF 는 8 bit 연속된 1로 이루어집니다. 이는 프레임이 종료됨을 나타냅니다.
- CAN 버스는 11bit가 연속되야 idle로 인식함으로 프레임과 프레임 사이 간격은 최소 3bit가 되야 합니다.
- 이때 프레임과 프레임 사이 간격은 ITM (Intermission) 혹은 IFS (Inter Frame Space)라 부릅니다.
Bit Stuffing
- CAN 통신은 동기화를 목적으로 5개의 비트가 동일한 값이 이어지면 이에 반대되는 비트를 추가하는 bit stuffing을 사용합니다.
- CAN 통신은 falling edge에서 동기화를 수행하는데 반대되는 비트를 추가하여 falling edge를 만들어 동기화를 하도록합니다.
확장 CAN 프레임 구조
확장 포맷은 29bit의 메시지 ID를 가지며, 표준 포맷과 같이 사용할 수 있습니다. (호환 가능)
표준 포맷과 호환이 가능하기 위해 29bit를 11bit 길이와 18bit 길이로 나누어 구성됩니다.
SRR (Subsititue Remote Request)
- 표준 포맷과 확장 포맷을 중재하기 위해 항상 "1"의 값을 가집니다.
IDE (Identifier Extension)
- IDE는 프레임이 Standard 포맷인지 Extended 포맷인지 결정합니다.
- IDE가 0 (Dominant bit)이면 Standard Format이고 1 (Recessive)이면 Extended 포맷입니다.