CAN 버스 위의 모든 통신은 frame 단위로 이뤄진다. Bus Networking에서 다뤘듯 프레임은 식별자를 담은 Arbitration Field, 실제 데이터인 Data Field, 오류 검출을 위한 CRC Field, Acknowledgment Field로 큰 틀이 짜이는데, 이 페이지는 그 전체 필드 구성과 프레임을 여닫는 나머지 요소들을 다룬다.

한 프레임은 Start of Frame(SOF)으로 열려 Arbitration Field·Control Field·Data Field·CRC Field·Acknowledgment(ACK) Field·End of Frame(EOF) 순서로 이어지고, 그 뒤에 붙는 Intermission까지 마치면 버스가 다시 유휴 상태로 돌아간다[1].

SOF SOF 1비트 Arbitration Identifier + RTR Arbitration Field 11+1비트 Control IDE+r+DLC Control Field 6비트 Data Data Field 0~8바이트 CRC 값+delimiter CRC Field 15+1비트 ACK ACK 1+1비트 EOF EOF 7비트 ITM Intermission 3비트

SOF는 단일 dominant 비트로, 버스가 유휴(recessive) 상태에서 벗어나 프레임 전송이 시작됐음을 알린다 — 이 비트가 언제 버스에 실리는지, 그리고 여러 노드가 동시에 SOF를 실었을 때 우선순위를 가리는 절차는 Bitwise Arbitration에서 다룬다.

Arbitration Field와 두 프레임 유형

Arbitration Field는 Standard Format 기준 11비트 Identifier와 그 뒤에 이어지는 RTR(Remote Transmission Request) 비트로 구성된다. 식별자는 두 가지 역할을 겸한다 — 전송 시에는 버스 중재의 우선순위 기준이 되고, 수신 시에는 각 노드가 메시지의 내용을 식별해 수신 여부를 거르는 기준이 된다[1]. Standard Format의 11비트를 넘어서는 주소 공간이 필요할 때 쓰는 29비트 확장 형식은 Extended CAN Identifier에서 다룬다.

RTR 비트는 프레임을 두 유형으로 가른다. dominant면 Data Frame, recessive면 Remote Frame이다. Remote Frame은 특정 식별자의 데이터를 요청하는 프레임으로, Data Field를 싣지 않지만 DLC만은 요청 대상 Data Frame과 같은 값으로 설정한다[1]. 같은 식별자를 쓰는 Data Frame과 Remote Frame이 동시에 전송되면 어느 쪽이 버스를 차지하는지는 Bitwise Arbitration에서 다룬다.

Control Field와 Data Field

Control Field는 IDE(Identifier Extension) 비트, 예약 비트 r, 그리고 4비트 DLC(Data Length Code)로 구성된다. IDE 비트가 프레임의 식별자 형식(Standard·Extended)을 가리키는 방식은 Extended CAN Identifier에서 다룬다. DLC는 0부터 8까지만 유효한 값으로 쓰여 Data Field에 실린 바이트 수를 가리키며, Data Field는 이 값만큼의 실제 페이로드를 0바이트부터 최대 8바이트까지 싣는다[1].

CRC Field와 ACK Field

CRC Field는 15비트의 순환 중복 검사(Cyclic Redundancy Check) 값과 그 뒤를 잇는 1비트 CRC Delimiter로 구성된다. 송신 측은 SOF부터 Data Field까지의 비트열을 생성 다항식 (16진수로 0x4599)로 나눈 나머지를 CRC 값으로 계산해 싣고, 수신 측은 같은 다항식으로 독립 계산한 값과 이를 대조해 불일치가 있으면 오류로 판정한다[1]. 이 불일치가 어떻게 통지되는지는 CAN Error Detection에서 다룬다.

Acknowledgment(ACK) Field는 ACK Slot과 ACK Delimiter 2비트로 구성된다. 송신 노드는 이 슬롯에 recessive 비트를 실어 보내고, CRC 검사를 통과한 수신 노드가 있다면 그 노드가 dominant 비트로 덮어써 응답한다 — 슬롯이 dominant로 관측되면 적어도 한 노드가 프레임을 오류 없이 수신했다는 뜻이고, recessive로 남으면 수신에 실패했거나 수신 노드가 아예 없다는 뜻이다[1]. 송신 노드가 이 슬롯에서 dominant 비트를 되읽지 못했을 때의 처리는 CAN Error Detection에서 다룬다.

EOF와 Intermission

End of Frame(EOF)은 7비트, 그 뒤를 잇는 Intermission은 3비트로, 둘 다 고정된 recessive 비트 구간이다[1]. 이 구간을 마치면 버스는 다시 유휴 상태로 돌아가 다음 프레임의 SOF를 받아들일 준비를 한다. SOF부터 CRC Field까지의 구간에 적용되는 인코딩 규칙(비트 스터핑)은 Bit Stuffing에서 다룬다.

참고문헌

[1]
Robert Bosch GmbH, “CAN Specification, Version 2.0”, 1991.