[can_tech] CAN 통신 기초 익히기

New Jenice!·2024년 11월 3일
0

[Toy Project] can_tech

목록 보기
1/2
post-thumbnail

CAN이란?

  • CAN(Controller Area Network)은 차량 내에서 호스트 컴퓨터 없이 마이크로 컨트롤러나 장치들이 서로 통신하기 위해 설계된 표준 통신 규격
  • 차량 내 ECU들은 CAN 프로토콜을 사용하여 통신
  • CAN은 차량의 여러 ECU들이 증가하면서 기존의 UART 통신 방식으로는 한계가 생겨 개발된 버스 기반 통신 프로토콜이다

CAN의 장단점

  • 장점
    • 배선 간소화 및 비용 절감
    • ID를 통한 우선순위 기반 통신
    • Multi Master 통신
    • 차동 신호 방식을 사용하여 노이즈에 강한 통신
    • 고속 및 장거리 통신 (최대 1Mbps, 최대 1km)
  • 단점
    • 연결할 노드나 장치 수에 제한이 있음 (최대 64개 노드)
    • 전압 레벨이 달라 전기적 잡음 많음
    • 보안 취약

CAN 통신 방식

  • CAN은 CSMA/CD+AMP(Carrier Sense Multiple Access with Collision Detection and Arbitration on Message Priority) 방식을 사용하여 네트워크 내에서 다수의 노드가 동시에 데이터를 전송할 때 충돌을 방지하고 우선순위가 높은 메시지를 우선적으로 전송할 수 있도록 한다
    • CSMA: 각 노드는 전송을 시도하기 전 버스가 비어있는지 확인
    • CD: 동시에 여러 노드가 전송을 시도할 때 충돌을 감지하고 우선순위가 낮은 노드는 전송을 중지 시킴
    • AMP: ID를 이용하여 우선순위를 결정하고 충돌 발생 시 우선순위가 높은 메시지가 먼저 전송 (ID가 낮을수록 우선순위가 높음)
  • CAN은 Multi-Master 통신을 지원하며 네트워크 내 모든 노드가 송신할 수 있는 권한을 갖음

CAN Frame 구조

  • Data Frame: 실제 데이터를 포함하는 프레임
  • Remote Frame: 데이터 요청 프레임으로 특정 ID의 데이터를 요청할 때 사용하며 요청하는 데이터 길이만 설정
  • Error Frame: 오류 발생 시 네트워크에 알리는 프레임으로 오류가 감지되면 모든 노드에 에러 상태를 알림
  • Overload Frame: 데이터 처리 지연이 필요할 때 사용하는 프레임으로 이전 프레임과 다음 프레임 사이의 지연 시간을 설정
  • InterFrame Space: Data Frame과 Remote Frame을 이전 프레임과 분리하기 위해 사용

CAN Data Frame

  • Start of Frame(SOF)
    • 1bit, 프레임의 시작을 알리는 비트

  • Arbitration Field
    • Identifier(ID)
      • 11bit, 메시지의 우선순위와 내용을 식별하며 값이 낮을수록 우선순위가 높다
      • 11bit 모두가 recessive면 안됨
    • Remote Transmission Request(RTR)
      • 1bit, data frame에서는 항상 0으로 설정하며 remote frame에서만 사용

  • Control Field
    • 6bit, DLC 포함하며 최대 8byte까지 설정
    • DLC는 0~8까지 이진수와 동일하게 dddr = 1 이렇게 표현됨
    • d: dominant, r: recessive
  • Data Field
    • 0~8bit, 전송 데이터 포함된 필드로 최대 8byte 전송
    • 최상위 비트(MSB, Most Significant Bit)를 먼저 전송
  • Cyclic Redundancy Check(CRC)
    • 15bit, 오류 검출 필드
  • Acknowledgement(ACK)
    • 2bit, response 같은거, 수신 측에서 송신 측에 확인 메시지
  • End of Frame(EOF)
    • 7bit, 프레임의 끝을 알리는 비트

reference

profile
Embedded Software Engineer

0개의 댓글