CAN 컨트롤러는 CAN의 데이터 링크 계층(ISO 11898-1)을 하드웨어로 구현하는 장치다.[1] MCU 안에 주변장치로 들어가기도 하고[2], SPI(Serial Peripheral Interface)로 호스트 MCU에 붙는 독립형 칩으로 나오기도 한다.[3]

컨트롤러는 버스에 직접 닿지 않고, CAN 트랜시버를 거쳐 CAN_H와 CAN_L 버스에 연결된다.[2]

노드 상태

ISO 11898-1:2024와 Bosch CAN FD 1.0은 노드가 integrating, idle, receiver, transmitter 네 상태 가운데 하나에 있다고 정한다.[4][5]

ISO 11898-1:2024는 idle condition을 샘플링한 recessive 비트가 11개 이어지는 것을 찾는 것으로 정의한다.[4]

상태뜻
integrating프로토콜 동작을 시작한 뒤나 bus-off에서 복구하는 동안 idle condition을 기다리는 상태로, Bosch CAN FD 1.0에서는 그 뒤 idle로 넘어간다. ISO 11898-1:2024는 프로토콜 예외 이벤트 뒤에도 이 상태를 둔다.[4][5]
idleBosch CAN FD 1.0은 SOF(Start of Frame)를 받을 준비가 되어 있고, 그 뒤 receiver나 transmitter로 넘어가는 상태로 정한다.[5]
receiver버스가 idle이 아닌 동안 송신도 integrating도 하지 않는 노드를 수신 노드라 한다.[4]
transmitter데이터 프레임이나 리모트 프레임을 보내는 노드를 송신 노드라 한다. 노드는 버스가 다시 idle이 되거나 중재에서 질 때까지 송신 노드로 남는다.[4][6]

송신

애플리케이션은 빈 송신 버퍼에 식별자, DLC, 데이터를 넣고 송신을 요청한다.[2] 컨트롤러는 버퍼 내용으로 프레임을 부호화하고, 비트열로 직렬화해 내보낸다.[7] 이때 같은 값의 비트가 5개 이어지면 반대 값의 비트를 하나 자동으로 넣는다(비트 스터핑).[6]

Bosch CAN FD 1.0은 공유 메모리에서 꺼내 보내는 메시지의 데이터 일관성을 두 방법 가운데 하나 이상으로 지키게 정한다. 하나는 송신을 시작하기 전에 보낼 메시지 전체를 임시 버퍼에 채워 두는 것이다. 다른 하나는 메시지를 넘기는 동안 데이터 오류(RAM 워드의 패리티 오류, 제때 오지 않은 데이터, 송신 중에 일부만 고쳐진 데이터 등)를 검사하는 것이다. 데이터 오류를 찾으면 송신을 시작하지 않고, 이미 시작했으면 노드를 Bus Monitoring 모드로 바꿔 수신 노드가 유효한 메시지를 보지 못하게 한다.[5]

컨트롤러의 송신 출력은 트랜시버의 TXD 핀에, 수신 입력은 트랜시버의 RXD 핀에 연결된다. 논리 비트와 버스 차동 전압 사이의 변환은 트랜시버가 맡는다.[8]

송신 노드는 내보낸 비트를 버스에서 되읽어 대조한다. 중재 구간에서 자기가 낸 recessive 비트가 dominant로 읽히면 즉시 송신을 그만두고 수신 쪽으로 넘어간다.[6]

자동 재전송

Bosch CAN 2.0 규격은 오류로 깨진 메시지를 자동으로, 우선순위에 따라 다시 보내게 한다. 재전송도 다른 메시지와 버스를 다투어야 하므로, 이 규격은 재전송을 버스가 idle이 되는 즉시 시작하도록 정한다.[6] Bosch CAN FD 1.0은 재전송 횟수를 설정으로 제한할 수 있게 하고, 기본값은 제한 없음으로 둔다.[5] Bosch M_CAN은 중재에서 졌거나 오류로 깨진 프레임을 기본 설정에서 자동으로 다시 보낸다.[9]

수신

컨트롤러는 버스 입력의 에지에 비트 타이밍을 맞춘다. SOF(Start of Frame)의 에지에서 하드 동기화를, 그 뒤의 에지에서 재동기화를 한다.[3] 받은 비트열에서는 스터프 비트를 걷어낸다.[6]

컨트롤러는 버스의 모든 메시지에서 비트, 스터프, CRC, 형식, ACK 오류를 검사한다.[7] 메시지를 제대로 받은 수신 노드는 ACK 슬롯에서 dominant 비트를 보내 송신 노드에 알린다.[6]

MCP2515는 오류 검사를 마친 메시지의 식별자를 수용 마스크와 필터에 비교한다. 일치한 메시지만 수신 버퍼에 넣고, 인터럽트 핀으로 MCU에 알린다.[3]

설정과 오류 상태

비트율과 샘플 포인트는 컨트롤러의 설정 레지스터로 정한다. 컨트롤러는 송신 오류 계수기(TEC, Transmit Error Counter)와 수신 오류 계수기(REC, Receive Error Counter)를 관리하고, 계수기 값에 따라 error active, error passive, bus-off 상태를 오간다.[3]

선택 동작 모드

Bosch CAN FD 1.0은 노드가 선택해 둘 수 있는 동작 모드 두 가지를 정한다.[5]

  • Bus Monitoring 모드: 유효한 데이터 프레임과 리모트 프레임을 받지만, 버스에는 recessive 비트만 내고 송신을 시작하지 못한다. ACK 슬롯, 오버로드 플래그, active 오류 플래그처럼 dominant를 내야 할 비트는 안에서 돌려, 버스가 recessive로 남아도 컨트롤러는 그 dominant를 본다.
  • Restricted Operation 모드: 데이터 프레임과 리모트 프레임을 주고받고 유효한 프레임에 ACK를 보내지만, active 오류 프레임이나 오버로드 프레임은 내지 않는다. 오류 조건이나 오버로드 조건이 생기면 dominant를 내지 않고 버스 idle을 기다려 다시 동기를 맞추며, 오류 계수기는 올리지 않는다.[5]

슬립과 웨이크업

Bosch CAN 2.0 규격은 CAN 장치가 전력 소비를 줄이려고 슬립 모드에 들어갈 수 있게 한다. 슬립 모드에서는 내부 동작이 없고 버스 드라이버가 끊긴다. 슬립 모드는 버스 활동이나 시스템 내부 조건에 따른 웨이크업으로 끝난다. 깨어난 장치는 발진기가 안정되기를 기다린 뒤, recessive 11비트가 이어지는 것을 확인해 버스 활동에 동기를 맞추고 나서야 버스 드라이버를 버스에 다시 붙인다.[6]

제품 예

MCP2515는 SPI로 MCU와 통신하는 독립형 컨트롤러다. CAN 2.0B를 1 Mbit/s까지 지원하고, 송신 버퍼 3개, 수신 버퍼 2개, 수용 마스크 2개, 수용 필터 6개를 둔다.[3] Bosch M_CAN은 CAN FD를 64바이트 데이터까지 지원하는 컨트롤러 IP(Intellectual Property) 모듈이다.[9]

CAN FD 컨트롤러와의 차이

ISO 11898-1:2024는 CAN FD 프레임을 주고받지는 못해도 방해하지 않는 classic 구현(FD tolerant)도 규정하며, classic 구현의 통신 범위는 CAN FD에서 다룬다.[4] CAN FD 노드는 classical CAN 프레임도 주고받을 수 있다.[5]

[1]
“TCAN4550 Automotive Control Area Network Flexible Data Rate (CAN FD) Controller with Integrated Transceiver,” Texas Instruments, 2020. Accessed: Sep. 25, 2026. [Online]. Available: https://www.ti.com/lit/ds/symlink/tcan4550.pdf
[2]
“RM0008 Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced Arm-based 32-bit MCUs,” STMicroelectronics, 2021. Accessed: Sep. 25, 2026. [Online]. Available: https://web.archive.org/web/20260827132512/https://www.st.com/resource/en/reference_manual/cd00171190-stm32f101xx-stm32f102xx-stm32f103xx-stm32f105xx-and-stm32f107xx-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf
[3]
“MCP2515 Stand-Alone CAN Controller with SPI Interface,” Microchip Technology Inc., 2019. Accessed: Sep. 25, 2026. [Online]. Available: https://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf
[4]
ISO, “ISO 11898-1:2024 Road vehicles — Controller area network (CAN) — Part 1: Data link layer and physical coding sublayer (OBP preview).” 2024. Accessed: Sep. 25, 2026. [Online]. Available: https://www.iso.org/obp/ui/#iso:std:iso:11898:-1:ed-3:v1:en
[5]
“CAN with Flexible Data-Rate Specification Version 1.0,” Robert Bosch GmbH, 2012. Accessed: Sep. 25, 2026. [Online]. Available: https://web.archive.org/web/20151211125301/http://www.bosch-semiconductors.de/media/ubk_semiconductors/pdf_1/canliteratur/can_fd_spec.pdf
[6]
“CAN Specification Version 2.0,” Robert Bosch GmbH, 1991. Accessed: Sep. 25, 2026. [Online]. Available: https://web.archive.org/web/20171215103144/http://www.bosch-semiconductors.de:80/media/ubk_semiconductors/pdf_1/canliteratur/can2spec.pdf
[7]
“MCP251XXFD CAN FD Controller Module Family Reference Manual,” Microchip Technology Inc., 2018. Accessed: Sep. 25, 2026. [Online]. Available: https://ww1.microchip.com/downloads/en/DeviceDoc/MCP251XXFD-CAN-FD-Controller-Module-Family-Reference-Manual-20005678B.pdf
[8]
“MCP2561/2FD High-Speed CAN Flexible Data Rate Transceiver,” Microchip Technology Inc., 2014. Accessed: Sep. 25, 2026. [Online]. Available: https://ww1.microchip.com/downloads/en/DeviceDoc/20005284A.pdf
[9]
“M_CAN Controller Area Network User’s Manual, Revision 3.3.1,” Robert Bosch GmbH, 2023. Accessed: Sep. 25, 2026. [Online]. Available: https://www.bosch-semiconductors.com/media/ip_modules/pdf_2/m_can/mcan_users_manual_v331.pdf