mcu에서 serial, i2c 등과 같이 가장 많이 쓰이는 통신방법중의 하나이다.
1. CAN (Controller Area Network)이란 차량 내에서 호스트 컴퓨터 없이 마이크로 컨트롤러나 장치들이 서로 통신하기 위해 설계된 표준 통신 규격이다. 차량 내 ECU (Electronic control unit)들은 CAN 프로토콜을 사용하여 통신한다. 초기에는 차량 네트워크용으로 개발되었으나 최근에는 차량뿐만 아니라 산업 전 분야에 폭넓게 적용되고 있으며, 기본적인 시스템 구성은 아래와 같다.
CAN의 등장 배경으로는 자동차 기술이 점차 발전함에 따라 차량 내부의 다양한 모듈(ECU)들이 생겨나게 되었고 서로 통신하기 위해서 비동기 직렬 통신 방식인 UART를 사용하였다. 그러나 ECU의 수량이 계속 증가함에 따라 연결선 또한 증가하여 복잡해지고 공간을 많이 차지하게 되며 무게를 증가시키는 등 자동차 원가 상승을 초래하게되었다. 그래서 이런 문제를 해결하기 위해 벤츠가 보쉬에게 의뢰하여 CAN 통신이 1985년 개발되게 되었다.
2. CAN 특징
1) 메시지 지향성 프로토콜(Message-Oriented Protocol)
-. CAN은 노드의 주소에 의해 데이터가 교환되는 것이 아니라 메시지에 ID(IDentifier)를 할당하고, 이 ID를 이용해 메시지를 구별하는 방식을 사용한다. 즉, 임의의 한 노드 A가 메시지를 전송했다면, A를 제외한 나머지 노드들은 A가 전송한 메시지를 ID 기반으로 자신에게 필요한지 판단하고 필요하다면 받아들이고, 아니라면 무시한다.
2) 보완적인 에러 감지 메커니즘
-. CAN은 다양한 에러 감지 메커니즘이 상호 보완적으로 에러를 감지하기 때문에 높은 안정성을 보장하며 메시지 전송 시, 에러가 감지되면 자동으로 해당 메시지를 재전송하는 기능이 있어 에러 회복 시간이 짧다.
3) 멀티 마스터 통신 방식
-. CAN을 기반으로 한 네트워크에는 노드의 마스터, 슬레이브가 정해져 있는건 아니다. 모든 노드가 마스터가 될수도 슬레이브가 될수도 있다. 버스가 비어 있을 때(idle)라면 어느 노드든지 마스터로써 메시지 전송이 가능하다. 만약 CAN 버스에서 두 개의 노드가 메시지를 동시에 전송하려고 하면 ID 우선순위에 따라 전송이 된다. 우선순위가 높은 메시지(더 낮은 ID 번호가 더 높은 우선순위를 가짐)가 먼저 전송이 된다.
4) 결점 있는 노드의 감지와 비활성화
-. CAN은 버스의 상태를 항상 모니터링하기 때문에 실시간으로 결함이 있는 노드를 감지해 해당 노드를 비활성화해 네트워크의 신뢰성을 보장한다.
5) 간단한 구조 및 전기적 노이즈에 강함
-. 꼬인 2선(Twist Pair Wire, CAN_H, CAN_L)의 간단한 구조를 이용한 통신으로 전기적 노이즈에 매우 강하다.
6) 저렴한 가격 및 구성의 용이성
-. 여러 반도체 제조업체가 다양한 CAN 컨트롤러와 트랜시버를 개발 및 판매하고 있어 저렴하고 조달이 용이하다.
7) 고속 및 원거리 통신
-. 일반적으로 500k~1M bps(최대) 속도로 통신 가능하며, 최대 1000m까지 원거리 통신이 가능하다.
3. CAN 메시지 형태는 아래와 같고 통신 버전에 따라 ID 길이가 다르다. 11bits: CAN 2.0A(표준), 29bits: CAN 2.0B(확장)
4. CAN 2.0A는 CAN 2.0B의 메시지를 수신 불가능하지만 CAN 2.0B는 CAN 2.0A, CAN 2.0B 둘다 수신 가능하다.
5. CAN 메시지 종류
1) 데이터 프레임: 일반적으로 데이터 전송에 사용
2) 리모트 프레임: 수신 노드에서 메시지 전송이 가능한 송신 노드에게 전송을 요청할 때 사용
3) 에러 프레임: 메시지의 에러가 감지 되었을 경우 시스템에 알릴 목적으로 사용
4) 오버로드 프레임: 메시지의 동기화 목적으로 사용
6. CAN 메시지 상세 구조(데이터 프레임)
항목 |
설명 | |||||
SOF |
한 개의 dominant 비트로 구성되어 있으며, 메시지의 처음을 지시하고 모든 노드의 동기화를 위해 사용된다. | |||||
Arbitration Field |
11비트 또는 29비트의 크기를 갖는 ID와 1비트의 RTR(Remote Transmission Request) 비트로 구성된다. 이 영역은 둘 이상의 노드에서 메시지의 전송이 동시에 일어날 경우 발생하는 메시지 간의 충돌을 조정하는데 사용된다. RTR비트의 값은 데이터 프레임인지(‘d’) 리모트 프레임인지(’r’)를 결정하는 데 사용된다. | |||||
Control Field |
2비트의 IDE(IDentifier Extension) 비트, 4비트의 데이터 길이 코드(DLC, Data Length Code)로 구성된다. R0는 Reserved 비트(Extended CAN 2.0B R0, R1)이다. | |||||
Data Field |
8bytes까지 사용 가능하며, 데이터를 저장하는 데 사용된다. (특정한 노드에서 다른 노드로 전송하는 데이터를 포함). | |||||
CRC |
SOF에서부터 데이터 필드까지의 비트열을 이용해 생성한 15비트의 CRC 시퀀스와 하나의 ‘r’비트의 CRC 델리미터로 구성되어 있다. 이것은 메시지 상의 에러 유무를 검사하는데 사용된다. | |||||
ACK |
한 비트의 ACK 슬롯과 하나의 ACK 델리미터(‘d’)로 구성되어 있다. 임의의 노드에서 올바른 메시지를 수신하게되면 ACK 필드를 받는 순간 ACK 슬롯의 값을 ’d’로 설정해 버스 상에서 계속 전송하게 된다. | |||||
EOF |
7개의 ‘r’비트로 구성되어 메시지의 끝을 알리는 목적으로 사용된다. |
@ 다음은 UART/USART 통신에 대해서 알아보자.
https://t-shaped-person.tistory.com/246
'MCU' 카테고리의 다른 글
[mcu] UART/USART 통신 개요 (0) | 2024.05.12 |
---|