CAN(Controller Area Network)통신은 차량내에서 Master를 따로 두지 않고 각 MCU 또는 장치끼리의 통신을 위한 네트워크이다.

특징
통신방식

=> 충돌을 감지하여 제어(CD, Dollision Detection) <-> 충돌을 회피 (CA, Collision Avoidance)
=> 충돌 감지의 경우, 송신 노드의 한 프레임의 최대 왕복 시간내에 다른 노드의 프레임이 전송을 시도할 때, 신호 에너지의 전압이 증가하는 것을 감지
=> 일반적인 CD의 경우, 충돌이 일어나면 다른 node에 jamming 신호를 보낸다 하던데 CAN도 그러는지 잘모르겠다
=> persistent mechanism은 BUS가 Free상태일 때의 mechanism임
- 1-Persistent CSMA
=> 충돌하지 않음을 가정하고 BUS가 free면 바로 접근하여 데이터 프레임 송출
=> 충돌 확률이 가장 높아 채널 사용율은 낮지만 대기시간은 적음, 유선 랜에서 사용
- nonpersistent CSMA
=> 반드시 충돌할 것이라 가정하고 Bus가 free상태이더라도 확률 분포에 따라 임의의 시간만큼 기다린 후 접근
=> 충돌 확률이 낮아 채널 사용률은 높지만 대기시간이 긺
- p-persistent CSMA
=> 충돌하지 않을 확률을 P로 두고 BUS에 접근하며, 남은 확률 (1-P)만큼은 단위 시간만큼 대기 후, BUS에 접근
=> 1-presisetnt와 nonpresistent의 중간형 즉, 1-presisetnt의 충돌 확률을 줄이고 nonpresistent의 대기 시간을 줄인 모델
CAN format

CAN Message Format
CAN Frame Field

SOF(Start of Frame): 첫번째 1 bit로 이루어져 있으며, Message의 첫부분임을 알림과 Node 동기화에 사용
Arbitation Field: 11 bit 또는 29 bit의 크기를 갖는 ID와 1비트의 RTR(Remote Transmission Request) bit로 구성
=> 여러 노드에서 Message의 전송이 동시에 일어날 경우 발생하는 충돌을 조정하는 데 사용
=> RTR bit의 값은 Data Frame(‘d’)과 Remote Frame(’r’)을 결정하는데 사용
Control Field: 2 bit의 IDE(IDentifier Extension) bit, 4 bit의 데이터 길이 코드(DLC, Data Length Code)로 구성
=> R0는 Reserved 비트(Extended CAN 2.0B R0, R1)
Data Field: 8bytes까지 사용 가능하며, 데이터를 저장하는 데 사용
=> 특정한 노드에서 다른 노드로 전송하는 데이터를 포함
CRC(Cyclic Redundancy Check) Field: SOF에서부터 Data Field까지의 bitstream을 이용해 생성한 15 bit의 CRC 시퀀스와 하나의 ‘r’비트의 CRC 델리미터로 구성
=> Message의 Error여부를 확인하는데 사용
ACK(ACKnowledge) Field: 1 bit의 ACK 슬롯과 하나의 ACK 델리미터(‘d’)로 구성
=> 임의의 Node에서 올바른 메시지를 수신하면 ACK field를 받는 순간 ACK 슬롯의 값을 ’d’로 설정해 Bus 상에서 계속 전송
EOF(End of Frame): 7개의 ‘r’ bit로 구성
=> message의 끝을 알리는 목적



참고:
https://m.blog.naver.com/suresofttech/221408852229
http://journal.iemek.org/UPFILE/PUBLICATION_FILE/J2012021/120601.pdf
https://m.blog.naver.com/techref/222003211905
https://www.fescaro.com/ko/archives/249/