저자: 크리스티안 쿠르츠케
1화 요약
차량 기능의 복잡성이 증가함에 따라(더욱 다양해진 전자 센서 및 액추에이터) 차량 전체에 케이블을 설치하는 작업이 점점 더 번거로워졌습니다.
CAN 버스는 아날로그 방식의 점대점 배선에서 디지털(2선식) 통신 버스 아키텍처로 전환함으로써 이러한 문제들을 해결하기 위해 1990년대 중반에 도입되었습니다.
차량 내 CAN 버스를 통해 기기들이 통신에 참여하는 방식을 살펴보겠습니다.
하드웨어 연결
하드웨어 노드가 CAN 버스 통신에 참여하려면 최소한 두 계층의 칩셋 기능이 필요하며, 이 두 계층은 종종 (매우 저렴한) SOC로 통합됩니다.
그 두 층은 다음과 같습니다.
- 견고한 +/- 12V 차동 배선 형식을 표준 0/5V 디지털 RX/TX 프로토콜로 변환하는 CAN 버스 전기 "레벨" 변환기입니다.
이러한 용도에 일반적으로 사용되는 부품은 MCP2551 칩입니다.
이미지 출처 - 패킷 프레임, 충돌 감지 및 우선순위 적용 등 CAN 프로토콜의 기본 사항을 구현하는 마이크로컨트롤러.
이러한 용도로 자주 사용되는 칩은 MCP2515입니다.
이미지 출처
아래는 라즈베리 파이용 개별 CAN 인터페이스의 예입니다. 자세한 내용은 여기를 참조하세요.

다음 장에서는 CAN 버스의 가장 하위 세 계층에 대해 자세히 살펴보겠습니다.
이 주제에 대한 매우 자세한 설명은 이 전자책 이나 ISO 11898-1 및 ISO 11898-2의 CAN 버스 전기 사양을 참조하십시오. 이 사양들은 최대 1Mbps의 데이터 전송 속도로 버스를 구동하기 위한 전기 사양 및 신호 요구 사항을 확장하고 있습니다.
자세한 사양은 여기에서 확인할 수 있습니다.
전기적 특성
CAN 버스 네트워크에서 통신하려면 장치가 버스에 전기적으로 연결되어야 하며, 특정 통신 표준에 맞춰 표준화된 저수준 전기 신호를 "이해"하고 "전달"할 수 있어야 합니다.
물리적 관점에서 CAN 버스는 2선식 차동 버스 토폴로지입니다. 몇 가지 기본 원리는 다음과 같습니다.
- CAN에는 두 개의 전선이 있지만, "송신"과 "수신" 전용 전선은 없습니다. 두 전선은 모든 노드 간의 공유 매체를 나타내며, 모든 노드는 (현재로서는 데이터 패킷 충돌을 무시할 경우) 동시에 수신 및/또는 송신할 수 있습니다.
- 일반적으로 모든 노드는 "버스" 형태로 순차적으로 배열되지만, 몇 가지 제약 조건 하에 스타형 또는 다른 그래프 토폴로지로 배열될 수도 있습니다.
- 송신기는 "오픈 컬렉터" 또는 "도미넌트 제로" 방식을 사용하며, 여러 노드가 동시에 송신하는 경우 0을 송신하는 노드가 1을 송신하는 노드보다 우선권을 갖습니다. (이는 CAN 패킷의 우선순위 결정에 중요한 요소입니다.)
- 버스의 양쪽 끝은 120옴 저항으로 종단 처리되어 있습니다.
배선 방식을 잘 보여주는 그림이 아래에 나와 있습니다.

다음은 버스 상에서 단일 CAN 패키지가 어떻게 보이는지 보여주는 오실로스코프 화면 예시입니다.

전기 연결 단계에서는 신호 변환기를 사용하여 차동 전압 레벨을 디지털 1과 0 비트로 변환합니다.
일반적으로 이러한 변환은 MCP2551 트랜시버와 같은 매우 간단한 집적 회로를 사용하여 수행됩니다. 자세한 내용은 이 예제를 참조하십시오.
1과 0을 CAN 패키지로 해석하기
신호가 비트로 처리되면, 원시 비트 스트림은 저수준 CAN 프로토콜 ISO 11898에 따라 CAN 컨트롤러에 의해 처리됩니다.
예를 들어 MCP2515 마이크로컨트롤러를 사용하면 이를 구현할 수 있습니다. 이 컨트롤러는 형식이 올바른 CAN 패킷을 생성하고 CAN 프로토콜의 물리 계층(충돌 제어, 우선순위 결정, CRC, 비트 타이밍 및 패킷 타이밍 등)을 처리합니다. 자세한 내용은 여기에서 확인할 수 있습니다.
보다 유연한 아키텍처를 위해, 이 기능은 CAN-USB 브리징 펌웨어를 실행하는 Arm 기반 STM32xx 제품군과 같은 마이크로컨트롤러를 통해서도 제공될 수 있습니다.
CAN 버스 저수준 통신
CAN 컨트롤러에서 CAN 패킷의 페이로드가 CPU로 전달됩니다. 아래 예시에서는 데이터가 SPI 인터페이스를 통해 CAN 장치 드라이버가 실행 중인 라즈베리 파이로 전달됩니다. 다른 연결 방식으로는 USB 또는 RS232 직렬 연결이 있습니다.
이 단계에서 CAN 데이터 패킷은 다음과 같은 구조를 갖습니다(자세한 내용은 여기를 참조하십시오).

저수준 프로토콜 사양
가장 간단한 경우로, CAN 데이터 패킷은 다음과 같은 특징을 가진다고 생각할 수 있습니다.
- 11비트 패킷 ID
- 64비트 페이로드
- 15비트 CRC 오류 감지/수정
11비트 패킷 ID를 이해하는 것이 중요합니다.
- 발신 주소도 아니고 수신 주소도 아닙니다. 버스 상의 어떤 노드든 기술적으로 임의의 ID를 사용하여 CAN 패킷을 보낼 수 있습니다.
- 페이로드 데이터의 해석을 나타냅니다(예: 엔진 온도 또는 휠 속도 값).
- 버스 충돌 발생 시 중재 역할을 합니다. ID가 가장 낮은 패킷이 우선권을 가지므로 중요도 순으로 낮은 ID가 할당됩니다.
이는 공격자가 패킷을 위조하거나 우선순위가 높은 패킷으로 버스를 과부하 상태로 만들 수 있게 하는 등 흥미로운 보안 문제를 야기합니다. 이 글에서는 이러한 문제에 대한 자세한 내용은 다루지 않으며, 관련 개요는 여기에서 확인할 수 있습니다.
CAN 버스 상의 노드들과 통신하는 방법에 대한 자세한 정보는 다음 섹션에서 제공됩니다.
Please reach out to discuss your particular scenario today.