CAN은 지능형 디바이스를 네트워크로 연결하는 고정밀 시리얼 버스 시스템이다.
열악한 환경, 산업 및 자동차 애플리케이션에서 견고하고 유연한 성능을 위해 설계된 직렬 통신 버스이다.
전선의 전압차를 이용하며, 서버와 클라이언트가 존재하지 않는다.
ID값이 낮을수록 우선순위를 갖는다.
노드를 제어하는 Master가 없어 Can Bus에서 데이터에 접근한다.
통신속도는 500k ~ 1Mbps의 범위를 가지며 Bit Rate가 높을수록 데이터 전송 속도가 빨라지며, 데이터 전송에 소요되는 시간이 짧아지게 된다. 그러나 Bit Rate가 높을수록 통신이 불안정해질 가능성이 있습니다. 따라서 시스템 구성이나 통신 거리 등을 고려하여 적절한 Bit Rate를 선택하여야 한다.
CAN은 여러 CAN 디바이스간 통신을 위한 경제적이며 안정적인 네트워크를 제공한다. 전자 제어 유닛(ECU)이 시스템의 모든 디바이스에 대한 아날로그 및 디지털 입력을 가져야 하는 것이 아니라 단일 CAN 인터페이스만 가지면 된다. 전체 비용이 절감되며 무게도 줄어듭니다.
브로드캐스트(Broadcast) 란, 자신의 호스트가 속해 있는 네트워크 전체를 대상으로 패킷을 전송하는 일대다 통신방식 이다. 브로드캐스트는 로컬 랜 상에 붙어있는 모든 네트워크 장비들에게 보내는 통신이다
네트워크의 각 디바이스에는 CAN 컨트롤러 칩이 있고 지능적이다. 네트워크의 모든 디바이스는 전송되는 모든 메시지를 볼 수 있으며 각 디바이스는 메시지가 중요한지, 제거해도 되는지 결정한다. 이 구조에서는 최소한의 영향으로 CAN 네트워크를 수정할 수 있다. 네트워크를 수정하지 않고도 비전송 노드를 추가할 수 있다.
모든 메시지에는 우선순위가 있으므로 두 개의 노드가 동시에 메시지를 전송하면 우선순위가 높은 메시지가 먼저 전송되고 낮은 우선 순위의 메시지는 전송이 연기된다. 비파괴적이며 가장 높은 우선순위 메시지가 방해받지 않고 전송될 수 있게 한다. 네트워크가 결정성 있는 타이밍 제약을 충족할 수 있다.
CAN 통신에는 우성(dominant) 비트와 열성(recessive) 비트가 있다.

데이터를 전송하는 노드가 2개 이상일 경우 충돌이 발생할 수 있다.
둘이 동시에 보내는 비트 값이 같으면 문제가 되지 않는다.
두 노드가 서로 동시에 0을 보내면 네트워크상에서 0이 지나가며, 둘 다 1이면 1이 지나간다.
그러나 두 노드가 동시에 보내는 비트가 다르다면 네트워크 상에는 우성 비트인 0이 지나가게 된다.
낮은 CAN ID를 갖는 프레임에게 오류나 지연 없이 데이터를 전송하게 된다.
경쟁에서 진 높은 CAN ID를 갖는 프레임은 우성 메시지의 전송이 끝난 후 6 비트를 전송할 수 있는 시간을 추가로 기다린 후 재전송을 자동으로 시작한다.
CAN 스펙에는 각 프레임의 내용의 에러를 확인하도록 CRC(Cyclic Redundancy Code)가 포함되어 있다. 에러가 있는 프레임은 모든 노드에 의해 무시되며, 에러 프레임을 전송하여 네트워크에 에러를 신호할 수 있다. 전역 및 로컬 에러는 컨트롤러에 의해 구분되며 너무 많은 에러가 감지되면 개별 노드가 에러 전송을 중지하거나 네트워크에서 완전히 연결을 끊을 수 있다.
CAN 통신에서는 데이터를 전송하는 모든 장치가 동등한 권한을 가지며, 멀티 마스터 및 멀티 슬레이브 구조의 버스 기반 통신 프로토콜을 사용한다.
모든 장치가 동등한 권한을 가져 데이터를 주고받는 과정에서 충돌이 발생할 수 있어 충돌을 방지하기 위해 충돌 감지 및 재전송 기능이 구현되어 있다.
데이터를 CAN프레임 형태로 전송한다.
CAN 프레임은 ID(Identifier), 데이터 및 제어 정보로 구성되어 있으며, 데이터를 주고받는 과정에서 충돌이 발생하는 것을 방지하기 위해 각각의 장치는 전송 전 버스의 상태를 모니터링하고, 데이터 전송 중 충돌이 발생한 경우 다시 전송을 시도한다. 이렇게 충돌 감지 및 재전송 기능을 통해 CAN 통신은 안정적인 통신을 보장한다.

데이터 전송 용도로 사용한다
SOF(Start Of Frame): 한 개의 dominant 비트로 구성되어 있으며, 메시지의 처음을 지시하고 모든 노드의 동기화를 위해 사용된다.
Arbitration Field (중재 필드): 비트 또는 29비트의 크기를 갖는 ID와 1비트의 RTR(Remote Transmission Request) 비트로 구성된다. 이 영역은 둘 이상의 노드에서 메시지의 전송이 동시에 일어날 경우 발생하는 메시지 간의 충돌을 조정하는 데 사용된다. RTR비트의 값은 데이터 프레임인지("d") 리모트 프레임인지('r')를 결정하는 데 사용된다.
Control Field (제어 필드): 2비트의 IDE(IDentifier Extension) 비트, 4비트의 데이터 길이 코드(DLC, Data Length Code)로 구성된다. RO는 Reserved 비트(Extended CAN 2.0B RO, RI)이다.
Data Field (데이터 필드): 8bytes까지 사용 가능하며, 데이터를 저장하는 데 사용된다(특정한 노드에서 다른 노드로 전송하는 데이터를 포함).
CRC(Cyclic Redundancy Check) 필드: SOF에서부터 데이터 필드까지의 비트열을 이용해 생성한 15비트의 CRC 시퀀스와 하나의 비트의 CRC 델리미터로 구성되어 있다. 이것은 메시지 상의 에러 유무를 검사하는데 사용된다.
ACK(ACKnowledge) 필드: 한 비트의 ACK 슬롯과 하나의 ACK 델리미터('d')로 구성되어 있다. 임의의 노드에서 올바른 메시지를 수신하게 되면 ACK 필드를 받는 순간 ACK 슬롯의 값을 'd'로 설정해 버스 상에서 계속 전송하게 된다.
EOF(End Of Frame, 프레임종료): 7개의 '비트로 구성되어 메시지의 끝을 알리는 목적으로 사용된다.

데이터 버스 상에 다른 노드로부터의 데이터 전송 요구를 알리는 프레임이다.
Aribitration Field의 RTR 값이 1이면 해당 메시지 프레임이 리모트 프레임임을 인지한다.

Bus Error가 검출되었음을 알리는 프레임이다.
Bit Error: 전송된 Bit의 상태를 Bus 상에서 관측하여 다른 경우 발생한다. 단 ACK Field, Arbitration Field의 경우는 제외한다.
Stuff Error: 같은 값을 가지는 Bit가 연속해서 6개 이상인 경우 발생한다.
CRC Error: 수신된 CRC 값이 수신단에서 계산된 값과 다르면 발생한다.
Form Error: 각 Field의 Fixed Bit Form에 위배될 때 EOF, Interframe Space, ACK/CRC delimiter에서 Dominant Bit가 관측될 때 발생한다.
Acknowledgement Error: 송신단에서 ACK Slot동안에 Dominant Bit을 관측하지 못하는 경우 발생한다.

수신된 데이터의 처리에 시간이 더 필요함을 알리는 프레임이다.
수신단의 내부 상태가 Next Data Frame/Remote Frame의 전송 지연을 필요로 하는 경우에 발생한다.
Intermission Field에서 Dominant Bit가 검출된 경우에 발생한다.
Overload Flag : 6개의 연속된 Dominant Bits
Superposition : Overload Frame의 Dominant Bit가 Intermission Field에서 감지되어 타 Node에서 Overload Frame 전송
Overload Delimiter : 6개의 연속된 Recessive Bits
CANopen은 CAN 기반 통신 포로토콜이다.
CANopen은 산업 기계 등의 장치(노드) 간 기성 상호 운용성을 가능하게 하므로 유용하다. 컨트롤러 네트워크를 위한 고성능 프로토콜로 자동화 및 제어 분야에서 널리 사용되며 산업 자동화 분야에서는 거의 표준으로 자리 잡고 있다.
CANopen은 Controller Area Network(CAN) 프로토콜 위에서 동작하며, 네트워크상의 다양한 장치들 간의 통신을 위해 설계되었다.
다양한 통신 속도를 지원하며, 다양한 기능을 갖춘 객체 모델을 제공한다.
데이터 전송 신뢰성, 실시간 처리 및 고도의 유연성을 제공하며, 이를 통해 다양한 제어 시스템에서 사용할 수 있다.
간단하고 유연한 구조를 가지고 있으며, 쉬운 사용 및 확장성을 제공한다. 이를 통해 제조업체들은 빠르고 효율적으로 제어 시스템을 개발하고 구축할 수 있다.
로봇 공학, 의료, 자동차 분야에서 많이 사용되고 있다.
CAN은 이더넷의 경우와 마찬가지로 물리층의 버스 액세스 제어 방식은 CSMA/CD(Carrier Sense Multiple Access/Collision Detection)이다.
CSMA/CD
CSMA/CD은 이더넷에서 장치가 매체에 접속하는 것을 관리하는 방법을 말한다.
CSMA/CD 방식에서 충돌에 의한 전송 타이밍의 정확도, 효율의 저하에 대한 문제가 있었다. 이런 문제는 상위 프로토콜의 존재를 배제한 상황이며 상위 프로토콜이 형태, 타이밍에 따라 확정적인 시스템이 된다. 상위 프로토콜의 구조가 Master-and-Slave 방식 또는 Request-and-Reply 방식에서는 전송데이터의 충돌이 발생하지 않는다.
Request-and-Reply으로는 높은 효율의 실시간 네트워크를 구성할 수 없다. Request-and-Reply 방식은 버스상의 각 노드에서 같은 종류의 데이터를 요청하는 경우 Request Message 전송에 따른 비효율성이 존재하고 슬레이브 노드가 비주기적 이벤트를 전달할 때 특히 유효하지 않다. 이와 같이 제어분야에서 실시간 네트워킹을 위해 표준화된 프로토콜중의 하나가 CANopen이다.
실시간은 무조건 빠르다는 의미보다는 예측 가능한 순서 또는 우선순위에 따라 데이터를 효율적으로 처리하거나 필요한 시간 내에 데이터 처리를 시작하는 의미를 가잔다
CANopen은 통신주기설정, 실시간 데이터 전송, 통신 프로파일 제공, 빠른 오류 처리 등의 기능을 제공하며 실시간성을 더하고 있다.
CANopen은 각 노드 및 데이터 객체에 대한 통신 주기를 설정할 수 있으며, 특정 데이터를 주기적으로 전송하거나 요청하여 실시간 응용 프로그램의 요구 사항을 충족시킬 수 있다.
CANopen은 실시간 데이터를 주고받는 데 사용되므로, 제어 시스템과 같은 응용 분야에서 감시 및 제어 신호를 실시간으로 교환할 수 있다.
CANopen은 실시간 통신을 지원하기 위해 표준 통신 프로파일을 제공하는데, 이러한 프로파일은 실시간 요구 사항을 충족하기 위한 통신 패턴을 정의한다.
CANopen은 통신 오류를 빠르게 감지하고 처리하는 기능을 제공해 시스템이 예기치 않은 상황에 대응할 수 있도록 한다.

OSI 모델은 다양한 통신 기술 전반에 걸쳐 통신 기능을 표준화한 개념 모델이다. 하위 계층은 기본 통신을 설명하는 반면 상위 계층은 긴 메시지의 분할 및 메시지 시작, 표시, 응답 및 확인과 같은 서비스를 설명한다.
CAN 버스는 두 개의 가장 낮은 계층(1: 물리적, 2: 데이터 링크)을 나타낸다. 이는 CAN이 11비트 CAN ID , 원격 전송(RTR) 비트 및 64 데이터 비트(상위 계층 프로토콜과 관련된 필드)를 사용하여 프레임 전송을 간단하게 가능하게 한다는 것을 의미한다.
CAN 개방 장치는 세 부분으로 나눌 수 있다.

통신 인터페이스와 프로토콜 소프트웨어는 버스를 통해 통신 객체를 전송하고 수신하는 서비스를 제공한다. 개체 사전은 이 장치에 사용되는 모든 데이터 유형, 통신 개체 및 응용 프로그램 개체를 설명한다. 응용 프로그램 소프트웨어의 인터페이스이다.

한 노드(예: 제어 인터페이스)는 애플리케이션 마스터 또는 호스트 컨트롤러 역할을 한다. 슬레이브(예: 서보 모터)로부터 데이터를 전송/요청한다. 이는 진단이나 상태 관리 등에 사용된다. 표준 애플리케이션에는 0-127개의 슬레이브가 있을 수 있다.
단일 CANopen 네트워크에는 동일한 데이터 링크 레이어를 공유하는 다양한 호스트 컨트롤러가 있을 수 있다.

클라이언트는 서버에 데이터 요청을 보내고 서버는 요청된 데이터로 응답한다.
고객의 CAN 메세지와 서버의 응답 CAN 메세지는 항상 8바이트의 데이터를 포함한다.

생산자 노드는 소비자 노드에서 소비되는 데이터를 네트워크에 브로드캐스트한다. 생산자는 요청 시(풀 모델) 또는 특정 요청 없이(푸시 모델) 이 데이터를 보낸다.
브로드캐스트(Broadcast) 란, 자신의 호스트가 속해 있는 네트워크 전체를 대상으로 패킷을 전송하는 일대다 통신방식 이다. 브로드캐스트는 로컬 랜 상에 붙어있는 모든 네트워크 장비들에게 보내는 통신이다.

CANopen 통신을 이해하려면 CANopen CAN 프레임을 분해해야 한다.
11비트 CAN ID는 COB-ID (통신 개체 식별자 )라고 하며 두 부분으로 나뉜다.
기본적으로 처음 4비트는 기능 코드와 같고 다음 7비트는 노드 ID를 포함한다.
흔히 쉽게 생각할 수 있는 Request-and-Reply 방식으로 Client-Server모델로도 알려져 있다. 마스터는 슬레이브 노드에서 Read/Write를 위한 요청을 하고 해당 슬레이브 노드는 이에 응답하는 방식이다. 개별 노드의 모든 오브젝트는 SDO를 이용하여 액세스 할 수 있다.
Producer-Consumer 모델로 마스터와 슬레이브는 주기적 또는 비주기적으로 서로 약속된 오브젝트를 전송하는 것이다.
PDO 메시지는 최대 8바이트까지 하나 이상의 오브젝트들을 전송할 수 있다.주로 서보드라이브의 경우 엔코더의 위치정보와 상태를 주기적 또는 비주기적으로 전송하고 마스터의 경우 목표 이동지점 등의 서보 드라이브에 전달할 때 용이하다.
PDO의 주기적 전송은 전송을 하는 노드(Producer)에서 직접 주기적으로 전송하거나 SYNC 프로토콜에 의해 동기화 된다. 비주기적 전송은 오브젝트의 값이 변할 때마다 전송하는 방식이다. 통상 각 노드는 4개씩의 송수신 PDO 메시지를 구성 할 수 있다.

많은 노드에서 매우 빈번하게 PDO가 전송되는 경우 버스 상에서의 충돌의 발생 확률이 높아지고 데이터 수집의 동시성이 보장되지 않으므로 SYNC 프로토콜을 이용하여 데이터의 동시성과 버스 액세스의 효율을 높인다.
개별 노드는 SYNC 메시지를 수신할 때마다 PDO를 전송에 대한 결정을 한다. 각 노드의 PDO는 1개 또는 그 이상의 SYNC 메시지에 대응하여 응답하도록 설정할 수 있다. 예를 들어 1번 노드의 PDO1은 1개의 SYNC 메시지에 응답하게 하고 2번 노드의 PDO1은 2개의 SYNC 메시지를 받을 때마다 전송을 하게 설정할 수 있어 노드별 PDO별 전송 빈도의 수를 조절할 수 있다. SYNC 메시지의 발생은 일반적으로 제어 구성상 마스터가 담당하지만 특정 슬레이브 노드에서 발생시킬 수 있다

버스상의 노드의 네트워크 상태 및 오류 파악에 적용되는데 노드의 Boot-up, Reset 등의 제어 및 확인을 할 수 있으며 PDO 동작의 유무를 결정한다. 상기 프로토콜이 이외에 정확한 시간동기를 위한 Time Stamp Object Protocol과 오류를 알리는 Emergency Object Protocol 이 있으나 본 설명에서는 생략하기로 한다.