CAN(Controller Area Network)
CAN 통신이란
CAN(Controller Area Network)이란, 차량 내에서 호스트 컴퓨터 없이 마이크로 컨트롤러나 장치들이 서로 통신하기 위해 설계된 표준 통신 규격 입니다.
ECU(Electronic Control Unit) 들은 CAN 프로토콜을 사용하여 통신한다.
- 프로토콜 : 컴퓨터나 네트워크 장치들이 서로 통신할 때 따르는 규칙의 집합
CAN 기본 시스템 구성
CAN BUS의 기본 레이아웃은 두 개의 꼬인 전선으로 구성되며, 이는 끝단에서 종료된다. 이러한 구조는 다수의 전자제어장치(ECU) 또는 필요한 모든 시스템이 이 전선에 연결 될 수 있게 한다. 즉, CAN Network의 장치의 수에 제한이 없다는 것을 의미한다.
CAN은 데이터를 네트워크에 연결된 모든 노드에게 제공하는 방식인 브로드캐스팅(Brodcasting)을 사용한다. 정보가 필요한 사람들은 그것을 활용하고, 필요가 없는 사람들은 무시하는 방식이다. 각 각의 노드들은 자신들이 필요한 데이터를 수락하고 나머지는 무시한다. 여기서 데이터는 우선 순위에 따라 작동하며, 모든 노드는 '마스터(Master)'로 기능한다. 이 말은 마스터-슬레이브 통신의 구조가 아닌 모든 노드가 동등하게 역할을 한다.
CAN 특징
1. 메세지 지향성 프로토콜(Message-Oriented Protocol)
CAN은 노드의 주소에 의해 데이터가 교환되는 것이 아닌 메세지 우선수위에 따라 ID(Identifier) 를 할당하고, 이를 이용하여 메세지를 구별하는 방식을 사용한다. 한 개의 노드가 X라는 메세지를 전송하면 전송을 진행했던 노드를 제외하고는 ID가 메세지의 필요성을 판단하여 받아들이고, 필요가 없으면 무시한다.
2. 보완적인 에러 감지 메커니즘
CAN은 다양한 에러 감지 메커니즘을 상호 보완적으로 에러를 감지하기 때문에 높은 안정성을 가진다. 또한, 메세를 전송할 때 에러를 감지하면 자동적으로 해당 메세지를 즉시 재전송하는 기능이 있어 다른 프로토콜에 비해 에러 회복 시간이 짧다.
3. 멀티 마스터 능력
CAN을 기반으로 한 네트워크에는 버스를 점유하기 위한 감독자 노드(Bus Master)가 필요가 없다. 위에 말했듯이 모든 노드가 버스 마스터가 되고 버스가 비어있을 때(idle)라면 언제든 메세지 전송이 가능하다. 모든 노드는 버스가 비워지는 즉시 메세지를 전송하고, 만약 CAN버스에 두 개의 노드에서 동시에 메세지를 전송할려고 하면 우선순(식별자, ID)에 따라 각 각 전송된다. 우선 순위가 높은 메세지가 낮은 메세지보다 더 먼저 전송된다라고 생각하면 된다.
4. 결점이 있는 노드 감지와 비활성화
CAN은 버스의 상태를 항상 모니터링을 진행하기 때문에 실시간으로 결함이 있는 노드를 감지해 해당 노드를 비활성화함으로써 네트워크의 신뢰성을 보장한다.
5. 전기전 노이즈에 강함
꼬인 2선(Twist Pair Wire, *CAN_H, CAN_L)을 이용하여 전기적으로 차별되는 통신을하여 전기적 노이즈에 매우 강하다.
| 출처 : https://www.fescaro.com/ko/archives/249/
CAN의 프레임 구조
1. SOF(Start Of Frame)
메세지의 시작점을 알리는 주요한 비트로 버스의 노드(node)를 동기화 하기 위해 사용한다. Falling Edge(1->0)을 기준으로 버스에 있는 다른 노드들이 동시에 비트 길이 계산을 시작하여 비트를 인식한다.
2. Identifier(ID)
식별자로서 메세지의 내용을 식별하고 메세지의 우선 순위를 부여하는 중요한 비트다. CAN 메세지에 있는 ID의 길이에 따라서 표준 CAN과 확장 CAN 두 가지 양식(mode)로 구분된다. CAN은 11비트 식별자고. 확장 CAN은 29비트 식별자로 구분한다.
여기서 RTR은 Data Frame이냐 Remote Frame이냐를 알려주는 것으로 Data Frame은 Dominant(0)의 값을 Remote Frame은 Recessive(1)의 값을 가진다.
3. Control
IDE(비트) 값을 통해 프레임이 '0'이면 Standard Frame인지, '1'이면 Extended Frame인지 확인하고, DLC를 통해 메세지의 길이를 알려준다. Data Frame은 Remote Frame 정보를 요청하는 것을 거절하는 것으로 이미 정보를 싣고 가고 있다라는 의미이다. Remote Frame은 정보를 요청하는 의미이다.
r이 가지는 의미는 예약 비트로 CAN-FD인지를 알려주는 비트이다
4. Data
실직적인 데이터 필드가 존재하는 곳으로, CAN의 경우 8Byte(32bit)의 값이 실려 전송될 수 있다.
5. CRC
변형되는 데이터가 없는 지 확인하는 공간으로 프레임의 송신 오류 및 오류 검출에 사용된다.
6. ACK
메세지의 수신을 잘 진행되었다는 것을 버스에 있는 다른 노드들에게 알려주는 필드로 오류가 없는 메세지가 전달되었다는 의미를 가진다. 잘 전송 되었다면 ACK 비트를 전송하고 잘 전송되지 않을 경우 ACK를 보내지 않아 전송 노드는 버스상에서 ACK비트 유무를 확인하고 없으면 재전송을 시도한다.
ACK가 도미넌트(0)이면 CRC가 정상, 리세시브(1)일 경우 비정상
7. EOF
프레임의 끝을 나타내고 종료를 의미한다.
| 출처 : https://m.blog.naver.com/techref/221999446630
| 출처 : https://velog.io/@happy5368/CAN-%ED%86%B5%EC%8B%A0-f83ri3xo