자동차에서 각 ECU(Electronic Control Unit) 끼리 통신하는 기술 정도로만 알고 계셔도 CAN 통신의 절반
과거 1980년대까지 자동차는 대부분 기계식이었습니다. 그러다 점차 기술의 발전으로 인하여 자동차에 다양한 모듈(ECU) 들이 생겨났고 이러한 모듈들이 서로 통신하기 위해 비동기 직렬 통신 방식인 UART(Universal Asynchronous Receiver/Transmitter)를 사용
UART의 통신은 각 모듈이 1:1 통신을 해서 모듈이 추가될 때마다 더 많은 연결선이 필요
메르세데스-벤츠(Mercedes-Benz)는 이러한 문제점을 해결하기 위해서 보쉬(Bosch)에 차량용 네트워크를 만들어달라고 의뢰를
1985년에 보쉬는 CAN을 개발
1993년에는 ISO가 국제 표준 규격으로 제정하였습니다. 이렇게 CAN은 자동차 통신의 필수불가결 요소가 되었고 현재 제2세대
CAN 통신은 프레임이라고 하는 패킷(packet)으로 데이터를 전송
can frame
① SOF(Start Of Frame) 비트: 메시지의 시작을 의미하는 주요한 비트로 버스의 노드(node)를 동기화하기 위해 사용됩니다.
② Identifier(ID): 식별자로서 메시지의 내용을 식별하고 메시지의 우선순위를 부여합니다. CAN 메시지에 있는 ID의 길이에 따라서 표준 CAN과 확장 CAN 두 가지 양식(mode)으로 구분됩니다. 표준 CAN은 11 비트 식별자이고, 확장 CAN은 29비트 식별자로 구분됩니다.
③ Control: 데이터의 길이(DLC)를 의미합니다.
④ Data: 전달하고자 하는 내용을 의미합니다.
⑤ CRC: 프레임의 송신 오류 및 오류 검출에 사용됩니다.
⑥ ACK 비트(Bit): 오류가 없는 메시지가 전송되었다는 것을 의미하는 비트로서, CAN 제어기는 메시지를 정확하게 수신했다면 ACK(Acknowledgement) 비트를 전송합니다. 전송 노드는 버스 상에서 ACK 비트의 유무를 확인하고 만약 ACK 비트가 발견되지 않는다면 재전송을 시도합니다.
⑦ EOF(End of Frame) 비트: 프레임의 끝을 나타내고 종료를 의미합니다.
CAN 버스에는 전체 노드를 제어하는 주인(Master)이 없어서 CAN 버스에서 데이터를 쉽게 접근할 수 있습니다.
우선 CAN 제어기는 CAN 버스 선이 사용 다른 제어기에 의해서 사용 중인지 확인을 합니다. 만약 CAN 버스 선이 사용 중이지 않다면 모든 노드는 ID 값을 통해서 자신에게 필요한 메시지를 확인합니다. 이때 불필요한 메시지를 무시하게 되고 자신에게 필요한 메시지만 수신하게 됩니다. 앞에서 자동차의 ECU들은 고유한 ID 값을 가지고 있다고 했습니다. 다중 노드가 동시에 메시지를 CAN 버스에 전송하려는 경우에는 가장 낮은 ID 값을 가진 최우선 노드가 자동으로 버스에 접근하게 됩니다. (식별자 값이 1과 7일 경우 식별자 1의 우선순위가 더 높음) 우선순위가 높은 메시지가 CAN 버스의 사용 권한을 보장받을 수 있으며 낮은 순위의 다른 노드들은 대기해야 하며 자동으로 다음 버스 사이클에서 재전송을 수행합니다.
CAN Bus OSI Layer