CAN 공부

JS·2024년 8월 12일

개인 proj

목록 보기
2/5
post-thumbnail

CAN

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

특징

  • CAN통신은 네트워크 기반의 프로토콜
  • 보쉬 사에서 개발
  • 차동신호를 이용한 1:N통신구조
    -CAN_H, CAN_L로 이루어진 꼬인 형태의 버스를 사용
    => 이 꼬인 형태를 트위스티드 페어라고 하는데 노이즈에 강한 특징이 있음
  • CAN BUS에서 다른 ECU(node)로 내려진 다리는 stub라고 불림
    => stub은 1m이상인 경우, 통신에 이상이 발생할 수 있음(자세한 이유를 찾아보자 추측으로는 1. stub가 단일 선 구조라서 2. 종단 저항 등 노이즈 대책이 없기 때문이 아닐까?)
  • 메세지 지향성 프로토콜
    => Node의 주소가 아닌 Message의 우선순위에 따라서 ID 활당 및 구분
    => 우선순위가 높을 수록 낮은 ID를 할당
  • 멀티 마스터 구조
    => 버스를 통제하는 마스터가 따로 존재하는 것이 아닌 ID의 우선순위에 따라서 BUS를 통제
    => BUS가 비워지는 즉시 message전송
  • 상호 보완적인 에러
    => 여러 에러감지 메커니즘이 상호작용
    => 에러가 감지되면 즉시 해당 메세지를 재전송
    => 문제가 있는 노드를 실시간 감지를 통해 비활성화
  • 120Ω의 종단저항을 양끝에 가짐
    => 반사파룰
  • 일반적인 CAN의 경우,최대 속도는 1Mbps but, 설계의 자유도를 높이고자 500kbps를 주로 사용

통신방식

  • 다중통신망(Multi Master Network)
  • CSMA(Carrier Sense Multiple Access)/CD + AMP(Collision Detection with Arbitration on Message Priority) 구조
    => BUS의 사용여부(IDLE, BUSY)를 반송파 감지를 통해 확인(CSMA)
    => 채널이 비어있을 경우, 패킷을 송출하며 채널이 사용중일 경우, 대기

=> 충돌을 감지하여 제어(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은 Node의 ID를 통해 통신
    => ID는 11 bit(CAN 2.0A: 표준 CAN) 또는 29 bit(CAN 2.0B: 확장 CAN)
    => ID의 숫자가 작을 수록 우선순위가 높음

CAN Message Format

  • 4 가지 프레임 타입을 정의
    => Data Frame: 일반적인 데이터 전송에 사용
    => Remote Frame: 수신할 Node에서 전송할 Node로 전송을 요청할 때 사용
    => Error Frame: Message에 Error가 있을 경우, System에 알리기 위해 사용
    => Overload Frame: Message 동기화 목적으로 사용

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의 끝을 알리는 목적

CAN-FD

  • 기존 CAN통신의 낮은 대역폭 문제를 극복하기 위해 나옴
  • 기존 데이터 길이가 8byte에서 64byte로 확장됨
  • 데이터 전송 속도 100kbps ~ 5Mbps
  • 최대 15Mbps
  • Baud Rate를 Data field에서 변경가능 (BRS bit 사용)


참고:
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/

0개의 댓글