CAN Protocol(2)
배경
제품명 AK10-9 모터 제어를 위해 CAN protocol 을 공부하였다.
CAN BUS 네트워크 동작원리
CAN은 다중통신망(Multi Master Network)이며 CSMA/CD+AMP(Carrier Sense Multiple Access/Collision Detection with Arbitration on Message Priority) 방식을 이용합니다. 먼저 CAN 노드에 메시지를 보내기 전에 CAN 버스라인이 사용 중인지를 파악합니다. 또한 메시지 간 충돌 검출을 수행합니다.
이 때 어떠한 노드로부터 보내진 메시지는 송신측이나 수신측의 주소를 포함하지 않습니다. 즉 주소지정방식으로 통신하지 않습니다. 대신 메시지의 처음부분에 CAN 네트워크상에서 각각의 노드를 식별할 수 있도록 각 노드마다 유일한 식별자(ID-11bits 또는 29bits)를 가지고 있습니다.
네트워크상에 연결된 모든 노드는 네트워크상에 있는 메시지를 수신한 후 자신이 필요로 하는 식별자의 메시지인 경우에만 받아들이고, 그렇지 않은 경우의 메시지는 무시합니다. 네트워크상(CAN 통신 라인)에 흘러 다니는 여러 노드의 데이터들이 동시에 사용자가 필요로 하는 노드로 유입되는 경우에는 식별자의 숫자를 비교하여 먼저 받아들일 메시지의 우선순위를 정하는데, 식별자의 숫자가 낮을수록 우선순위가 높습니다.
우선순위가 높은 메시지가 CAN 버스의 사용 권한을 보장받으며 이때 낮은 순위의 메시지는 자동적으로 다음 버스 사이클에 재전송이 되도록 합니다. 각 CAN 메시지는 11비트의 식별자(CAN 2.0A), 또는 29비트의 식별자(CAN 2.0B)를 가지며, CAN 메시지의 맨 처음 시작부분에 위치합니다. 이러한 식별자는 메시지의 형태를 식별시켜주는 역할과 메시지에 우선순위를 부여하는 역할을 합니다.
CAN 통신 프로토콜 규격
CAN 메시지에 있는 식별자(ID)의 길이에 따라 두 가지 모드로 구분됩니다.
- 표준 CAN(버전 2.0A): 11비트 식별자
- 확장 CAN(버전 2.0B): 29비트 식별자
ISO 규격에 따라 두 가지로 구분되며 통신 속도에서 차이가 있습니다.
- ISO 11898: 1Mbps 이상의 고속 통신 가능
- ISO 11519: 125Kbps 까지의 통신 가능
대부분의 CAN 2.0A 컨트롤러는 오직 표준 CAN 포맷의 메시지만 전송 및 수신이 가능하며, 확장 CAN 포맷(CAN 2.0B)의 메시지를 수신하더라도 그 메시지를 무시해 버립니다. 즉, CAN 2.0A 컨트롤러에서 보내온 메시지 데이터만 유효합니다. 그러나 CAN 2.0B 컨트롤러는 양쪽 메시지 포맷(CAN 2.0A, CAN 2.0B)에 대해 모두 송수신이 가능합니다.
CAN 메세지 포맷(구조)
CAN에서는 데이터 프레임(data frame), 리모트 프레임(remote frame), 에러 프레임(error frame), 오버로드 프레임(overload frame)의 4가지 프레임 타입을 정의하고 있습니다. 데이터 프레임은 일반적으로 데이터 전송에 사용되며, 리모트 프레임은 수신할 노드에서 원하는 메시지를 전송할 수 있는 송신 노드에게 전송을 요청할 때 사용됩니다. 에러 프레임은 메시지의 에러가 감지되었을 때 시스템에 알릴 목적으로 사용됩니다. 마지막으로 오버로드 프레임은 메시지의 동기화를 목적으로 사용됩니다. CAN 통신에서 데이터 송수신은 메시지 프레임을 사용하여 이루어집니다. 메시지 프레임의 구조는 다음과 같습니다.
Field | Description |
SOF (Start of Frame) |
한 개의 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 (Cyclic Redundancy Field) |
SOF에서부터 데이터 필드까지의 비트열을 이용해 생성한 15비트의 CRC 시퀀스와 하나의 ‘r’비트의 CRC 델리미터로 구성되어 있다. 이것은 메시지 상의 에러 유무를 검사하는데 사용된다. |
ACK (ACKnowledge Field) |
한 비트의 ACK 슬롯과 하나의 ACK 델리미터(‘d’)로 구성되어 있다. 임의의 노드에서 올바른 메시지를 수신하게 되면 ACK 필드를 받는 순간 ACK 슬롯의 값을 ’d’로 설정해 버스 상에서 계속 전송하게 된다. |
EOF(End Of Frame) | 7개의 ‘r’비트로 구성되어 메시지의 끝을 알리는 목적으로 사용된다. |
ECU(Electronic Control Unit)
ECU는 자동차에서 사용되는 많은 전자 제어 장치들을 지칭하는 말입니다. 여기에는 아래와 같은 장치들이 포함됩니다.
- Airbag Control Unit(ACU)
- Engine Control Unit(ECU)
- Tansmission Control Unit(TCU)
- Brake Control Unit(BCU)
- On-Board-Diagnostics(OBD)
ECU는 각종 센서에서 오는 정보를 토대로 최적의 결과를 판단하는 일을 합니다. 자동차의 성능이 점점 발전함에 따라 이제는 구동계 뿐만 아니라 각종 전자장치를 제어하는 역할까지 하고 있습니다. 과거 자동차엔 ECU가 30개미만으로 내장되어 있었지만, 최근엔 편의를 위한 장치들이 많아지면서 최대 100여개까지도 내장되고 있습니다.
CAN Controller, CAN Transceiver
차량용 네트워크의 백본망을 구성하고 있는 CAN프로토콜은 CAN Controller와 CAN Transceiver로 구현됩니다. CAN Controller는 내부 버퍼를 가지며 Transceiver에서 전달되는 수신 메시지에 대해 유효한 데이터인지 아닌지를 ID기반으로 판별한 후 유효한 데이터인 경우 MCU로 전달합니다. 송신 메시지의 경우 MCU에서 전송하고자 하는 데이터에 대해 CAN Transceiver로 전달합니다.
CAN Transceiver는 CAN 버스 혹은 MCU에서 전달되는 송수신 데이터를 전기적 신호로 변환합니다. CAN Transceiver는 MCU로부터 전달된 데이터를 CAN 통신용 데이터로 변환하며, CAN 버스에서 전달된 CAN 통신용 데이터를 MCU 송수신용 데이터로 변환합니다.
CAN_H, CAN _L
전기적으로 신호를 전송하는 역할을 하는 물리계층에서, CAN은 광섬유나 꼬인 2선(Twist Pair Wire)과 같은 다양한 종류의 매체를 사용하여 통신할 수 있습니다. 꼬인 2선 시그널링은 각 전선에 서로 다른 전압을 사용하여 버스 상에서의 노이즈를 줄입니다. 이때의 꼬인 2선을 각각 CAN_H(or CAN High)와 CAN_L(or CAN Low)라고 부릅니다.