CAN (Controller Area Network) 정리!
CAN
CAN 통신(Controller Area Network)은 차량 내에서 호스트 컴퓨터 없이 마이크로 콘트롤러나 장치들이 서로 통신하기 위해 설계된 표준 통신 규격이다. CAN 통신은 메시지 기반 프로토콜이며 최근에는 차량 뿐만 아니라 산업용 자동화기기나 의료용 장비에서도 종종 사용되고 있다. Controller Area Network (CAN)은 각 제어기들 간의 통신을 위해 주로 사용되는 non-host bus 방식의 메시지 기반 네트워크 프로토콜이다.
1983년 최초로 Bosch社에 의해 개발되었고, 1986년 공식적으로 소개된 이래, 현재 생산되는 대부분의 자동차에서 사용되고 있으며, 기타 다양한 분야에서도 적용이 되고 있다.
CAN 통신은 로버트 보쉬사에서 1983년부터 개발에 착수해 1986년 미국 미시간주 디트로이트에서 열린 SAE(Society of Automotive Engineers)에서 공식적으로 발표되었다. 최초의 CAN 콘트롤러 칩은 인텔과 필립스에 의해 생산되었으며 1987년 시장에 출시되었다. 1991년 보쉬는 CAN 2.0 스펙을 발표하였다.
CAN 통신은 OBD-II라고 불리는 차량 진단용 통신 표준의 5대 프로토콜 중 하나로 포함되어 있다. OBD-II 표준은 1996년 이후로 미국에서 판매되는 모든 승용차와 소형 트럭에 필수사항으로 적용되었으며 EU에서는 2001년 이후 판매되는 가솔린 차량에 대해, 2004년 이후 판매되는 모든 디젤차량에 대해 EOBD 표준을 적용하여야 한다.
역사
1983 | Bosch社에서 차량용 네트워크 프로토콜 개발 프로젝트 착수 |
1986 | CAN 프로토콜이 Society of Automotive Engineers (SAE)에 공식적으로 소개됨 |
1987 | Intel社와 Philips社에 의해 첫 번째 CAN 칩이 생산됨 |
1991 | Bosch, CAN 2.0 사양 발표 |
1992 | Mercedes-Benz社에서 최초로 CAN 적용 차량 생산 |
1993 | ISO 11898 (data link and high-speed physical layer) 사양 제정 |
1994 | SAE J1939 사양 제정 |
1995 | ISO 11898 사양 개정 (extended frame format) |
2003 | Data link 계층과 high-speed physical 계층 사양 분리 (ISO 11898-1 / -2) |
2006 | ISO 11898-3 (low-power, low-speed physical layer) 사양 제정 |
2007 | ISO 11898-5 (low-power, high-speed physical layer) 사양 제정 |
2011 | CAN FD 프로토콜 개발 착수 |
2013 | ISO 11898-6 (physical layer with selective wake-up function) 사양 제정 |
2015 | ISO 11898-1 (Classical CAN and CAN FD) 사양 발표 |
구조
베이스 프레임 형식
일반 캔 배이스 프레임 형식 (전기적 신호 포함)
CANH, CANL 신호는 차동 방식이므로 dominant 상태에서는 CANH-CANL 전압차가 0.9V 이상 발생한다. 따라서 그림과 CANL 신호가 dominant 상태에서는 0V로 본다. Recessive state는 CANH-CANL <0.5V 이고 VCC/2 상태로 CANL가 중간 전압으로 뜬다.
Dominant 상태에서는 CANH 전압이 5V였다가 Recessive state에서는 CANL와 마찬가지로 VCC/2 즉 2.5V가 된다.
일반적으로 CANL의 전압을 기준으로 0V를 LOGIC 0, 2.5V를 LOGIC1 로 표시한다. 신호는 Start-of-frame에서 시작해서 End-Of-Frame으로 끝나게 도니다.
일반 캔 배이스 프레임 형식 (전기적 신호 포함)
Extended Frame Format
Extended Frame은 베이스 프레임 형식에서 스터프 비트가 추가된다.
CAN EXTENDED FRAME with electric signal
장점
CAN은 여러 개의 CAN 디바이스가 서로 통신할 수 있는 경제적이며 안정적인 네트워크를 제공합니다. 이 같은 네트워크의 장점은 ECU (electronic control units)가 시스템 내 각 디바이스마다 아날로그 및 디지털 입력을 갖는 것이 아니라 단일의 CAN 인터페이스만 보유한다는 점입니다. 따라서 자동차의 전체 비용과 중량도 줄일 수 있습니다. 네트워크 상의 각 디바이스에는 CAN 컨트롤러 칩이 있어 매우 지능적입니다. 네트워크 상의 모든 디바이스는 전송되는 모든 메시지를 확인합니다. 각 디바이스는 해당 메시지가 관련된 것인지 필터링되어야 할 지 여부를 결정합니다. 또한, 모든 메시지는 우선 순위가 있으므로 두 개의 노드가 동시에 메시지를 전송할 경우, 우선 순위가 높은 메시지가 먼저 전송되고 낮은 우선 순위의 메시지는 전송이 연기됩니다.
CAN은 차량용으로 개발되었으므로 가장 보편적인 어플리케이션은 in-vehicle 전자 네트워킹입니다. 차량용 외에도 지난 15년간 CAN의 안정성과 장점이 입증되면서 타 업계에서도 광범위한 어플리케이션에 CAN 버스를 도입하였습니다. 그 일례로 철도용 어플리케이션 (트램, 지하철, 경전철, 장거리 열차 등)에 CAN이 도입되었습니다. 이와 같은 차량 내 여러 네트워크의 다른 레벨에서도 CAN을 찾아볼 수 있습니다. 또한 CAN은 항공기 상태 센서, 네비게이션 시스템, 조종실 내 리서치 PC 등 항공기 어플리케이션에도 적용되었습니다. 뿐만 아니라, 기내 데이터 분석에서부터 엔진 컨트롤 시스템 (연료 시스템, 펌프, 선형 액추에이터 등)에 이르는 다양한 우주 항공 어플리케이션에서도 CAN 버스가 사용됩니다.
의료기기 제조업체들은 의료기기의 임베디드 네트워크로 CAN을 사용합니다. 실제로 일부 병원에서는 CAN을 사용하여 수술실 전체를 관리하기도 합니다. 즉, CAN 기반 시스템으로 조명, 테이블, X-레이 머신, 환자 침대 등 수술실에 배치된 모든 것을 컨트롤합니다. 승강기와 에스컬레이터는 임베디드 CAN 네트워크를 사용하며, 병원에서는 CANopen 프로토콜을 사용하여 패널, 컨트롤러, 도어 안전 장치 등의 디바이스를 서로 연결하며 컨트롤합니다. 또한 CANopen은 실험실 장비, 스포츠 카메라, 망원경, 자동문, 커피 메이커 등의 비 산업용 어플리케이션에도 사용됩니다.
물리계층
CAN에는 여러 종류의 다른 물리 계층이 있습니다. 이같은 물리 계층은 전기적 레벨, 신호 구조, 케이블 임피던스, 최대 보드 (baud) 속도 등 CAN 네트워크의 특정 사항을 분류합니다. 가장 보편적이며 널리 사용되는 물리 계층은 아래와 같습니다.
High-Speed CAN
High-speed CAN은 현재까지 가장 보편적으로 사용되는 계층입니다. 고속 CAN 네트워크는 두 개의 와이어로 실행되며 최대 1 Mb/s 전송 속도로 통신을 진행합니다. 고속 CAN의 다른 명칭으로는 CAN C와 ISO 11898-2가 있습니다. 일반적인 고속 CAN 디바이스에는 ABS (anti-lock brake systems), 엔진 컨트롤 모듈 그리고 방출 시스템 등이 있습니다.
저속/내고장(fault-tolerant) CAN 하드웨어
저속/내고장 CAN 네트워크 또한 두 개의 와이어로 실행되며, 최고 125 kb/s 속도로 디바이스와 통신하며, 내고장 기능이 있는 트랜시버를 제공합니다. 저속/내고장 CAN 디바이스는 CAN B 및 ISO 11898-3으로도 알려져 있습니다. 자동차에서의 일반적인 저속/내고장 기기에는 안락장치가 있습니다. 차량의 문을 열고 닫을 때의 강도를 고려하여 차량의 문을 통과해야 하는 와이어는 저속/내고장입니다. 또한, 브레이크 등과 같이 강화된 보안 레벨이 요구되는 경우, 저속/내고장 CAN은 그 해결책이 될 수 있습니다.
단일 와이어 CAN 하드웨어
단일 와이어 CAN 인터페이스는 최고 33.3 kb/s (고속 모드에서는 88.3 kb/s) 속도로 디바이스와 통신합니다. 단일 와이어 CAN의 다른 명칭은 SAE-J2411, CAN A 및 GMLAN입니다. 차량 내 일반적인 단일 와이어 디바이스는 고성능을 요구하지 않습니다. 일반적인 어플리케이션에는 좌석과 거울 조정기 등의 안락 장치가 있습니다.
통신방법
이전에 언급된 바와 같이 CAN은 피어 투 피어 (peer-to-peer) 네트워크입니다. 다시 말하면, 개별 노드가 CAN 버스에서 데이터를 읽거나 쓰기 위해 액세스할 때 컨트롤하는 마스터가 없습니다. CAN 노드가 데이터 전송 준비 완료되면, 버스의 준비 여부를 확인하고 그 후 CAN 프레임을 네트워크에 작성합니다. 전송되는 CAN 프레임은 전송 노드나 수신 노드 중 어느 쪽의 주소도 포함하고 있지 않습니다. 대신, 고유한 중재 ID가 네트워크에서 프레임을 분류합니다. CAN 네트워크 상의 모든 노드는 CAN 프레임을 수신하며, 전송되는 프레임의 중재 ID에 따라 네트워크 상의 각 CAN 노드는 프레임 수용 여부를 결정합니다.
다중 노드가 동시에 메시지를 CAN 버스로 전송하려는 경우 최우선 순위를 가진 노드 (가장 낮은 중재 ID)가 자동적으로 버스에 액세스됩니다. 최저 우선 순위를 가진 노드는 버스가 사용 가능할 때까지 반드시 대기해야 합니다. 이러한 방식으로 CAN 네트워크를 실행하면 CAN 노드 사이에 결정성있는 통신을 구현할 수 있습니다.
용어
CAN 디바이스는 CAN 네트워크 상에서 프레임이라고 하는 패킷으로 데이터를 전송합니다. CAN 프레임은 아래와 같은 섹션으로 구성됩니다.
- CAN 프레임 --- 전체 CAN 전송: 중재 ID, 데이터 바이트, ACK (acknowledge) 비트 등. 또한 프레임은 메시지를 의미합니다.
- SOF (start-of-frame) 비트 –– 주요한 (logic 0) 비트로 메시지의 시작을 표시합니다.
- 중재 ID –– 메시지를 식별하고 메시지의 우선 순위를 지정합니다. 프레임에는 두 가지 포맷인 11 비트 중재 ID를 사용하는 표준과 29 비트 중재 ID를 사용하는 확장이 있습니다.
- IDE (identifier extension) 비트 –– 표준과 확장 프레임을 구분합니다.
- RTR (remote transmission request) 비트 –– 원격 프레임과 데이터 프레임을 구별하는 역할을 합니다. 주요한 (logic 0) RTR 비트는 데이터 프레임을 나타냅니다. 역행 (logic 1) RTR 비트는 원격 프레임을 나타냅니다.
- DLC (data length code) –– 데이터 필드의 바이트 수를 나타냅니다.
- 데이터 필드 –– 데이터의 0 ~ 8 바이트로 구성됩니다.
- CRC (cyclic redundancy check) –– 15 비트의 주기적인 중복 체크 코드 + 역행 delimiter 비트로 구성됩니다. CRC 필드는 오류 검출에 사용됩니다.
- ACK (ACKnowledgement) 슬롯 –– 메시지를 정확하게 수신한 모든 CAN 컨트롤러는 메시지의 말미에 ACK 비트를 전송합니다. 전송 노드는 버스 상에 ACK 비트 유무를 확인하고, ACK가 발견되지 않을 경우 전송을 재시도합니다. NI Series 2 CAN 인터페이스에는 수신 전용 모드 기능이 있습니다. 이 때문에, 모니터링 하드웨어가 ACK 비트 전송을 금지하여 버스의 작동에 영향을 주지 않게 됩니다.
- CAN 신호 –– CAN 프레임 데이터 필드 내에 포함된 개별 데이터를 의미합니다. 또한 CAN 신호는 채널을 의미합니다. 데이터 필드는 최대 8 바이트의 데이터를 보유하므로 단일 CAN 프레임은 0 ~ 64개의 개별 신호를 보유할 수 있습니다. (64 채널의 경우, 모든 채널은 바이너리입니다.)
아래 그림을 보면 단일 CAN 프레임의 데이터 필드에는 6개의 채널이 있습니다. 각 신호에는 8 비트의 데이터가 포함됩니다.
데이터베이스
CAN 데이터베이스 파일은 CAN 프레임과 신호 정의를 위해 확장 정보를 포함한 텍스트 파일입니다.
각 신호당, CAN 데이터베이스는 공학단위로 변환하기 위한 스케일링 팩터를 정의합니다.
- 채널명
- 해당 메시지 내에서 채널의 위치 (시작 비트)와 크기 (비트 수)
- 바이트 순서 (Intel/Motorola)
- 데이터 유형 (부호/비부호/IEEE float)
- 스케일링 및 유닛 스트링
- 범위
- 기본값
- 주석
본 정보는 "원시" 프레임 정보 (보통 바이트)를 "실제" 값으로 편리하게 변환하는 데에 사용됩니다. 아래 그림은 이 같은 변환의 예입니다.
CAN 데이터베이스 파일은 전체 차량에 대한 프레임과 신호 정의를 포함합니다. 각 네트워크에는 고유의 데이터베이스 파일이 있습니다. 또한, 본 데이터베이스 파일은 벡터 전용이며, 보통 기밀 (confidential)입니다.
CAN 네트워크에서 여러 프레임에 데이터베이스 파일을 사용함으로써 여러 CAN API는 프레임 정보를 실제값으로 자동 변환합니다. 이를 통해 실제 프레임 값을 신경쓸 필요가 없으므로 어플리케이션 개발이 간단해집니다.
'Computer > ETC' 카테고리의 다른 글
원격 데스크톱 연결 포트 변경하기 (0) | 2021.09.02 |
---|---|
원격 데스크톱, Microsoft 계정으로 로그인 안될때 (11) | 2021.05.21 |
(한글) 한/영 자동변환 끄기 (1) | 2020.03.12 |
CAN 통신 이해하기 (0) | 2019.03.15 |
장치관리자에서 디바이스 이름 변경하기 (7) | 2018.08.08 |
정보처리 - 데이터베이스 (0) | 2016.02.22 |
리틀엔디안(little endian)&빅엔디안(big endian) (0) | 2015.08.26 |
VS2013, 플러그인 없애고 싶은데... (0) | 2014.04.25 |