liminfo

CAN Bus Reference

CAN 2.0/CANopen/J1939 프로토콜 레퍼런스

25개 결과

CAN Bus Reference 소개

CAN 버스 레퍼런스는 CAN 2.0(클래식), CAN FD(유연 데이터 속도), CANopen(애플리케이션 레이어), J1939(대형 차량), 하드웨어 사양, 분석 도구의 6개 카테고리로 구성된 Controller Area Network 프로토콜 종합 치트 시트입니다. 각 항목에 프로토콜 상세, 프레임 구조, 실용적인 설정 예제를 제공합니다.

CAN 2.0A 표준 프레임(11비트 ID)과 CAN 2.0B 확장 프레임(29비트 ID)의 구조, 비트 타이밍 파라미터, 중재 메커니즘, 오류 검출 방법(CRC, ACK, 스터프, 폼, 비트 에러), Error Active에서 Bus Off까지의 오류 상태 전이를 다룹니다. CAN FD 섹션에서는 최대 64바이트까지의 DLC 매핑과 이중 비트레이트 동작을 설명합니다.

상위 레이어 프로토콜로는 CANopen의 NMT, SDO(파라미터 접근), PDO(실시간 교환), Heartbeat, Object Dictionary 구조를 포함합니다. J1939 섹션은 PGN, 29비트 메시지 ID 구조, 주소 클레임, DM1 진단 메시지, Transport Protocol을 다룹니다. 하드웨어 항목은 종단 저항, 배선 사양(ISO 11898-2), 트랜시버 IC, DBC 파일 형식, SocketCAN Linux 명령어까지 제공합니다.

주요 기능

  • CAN 2.0A/B 프레임 구조 필드별 상세: SOF, Identifier(11/29비트), RTR, IDE, DLC, Data, CRC, ACK, EOF
  • 비트 타이밍 파라미터(Sync_Seg, Prop_Seg, Phase_Seg1/2, SJW)와 보레이트별 최대 버스 길이 표(125 kbps~1 Mbps)
  • CAN FD DLC-바이트 매핑(DLC 9~15은 12/16/20/24/32/48/64바이트)과 BRS 이중 속도 동작 상세
  • CANopen 프로토콜 스택: NMT 상태 머신, SDO 업로드/다운로드(인덱스/서브인덱스), PDO COB-ID 할당(TPDO/RPDO)
  • J1939 29비트 ID 구조(Priority, Data Page, PF, PS, SA), 주요 PGN 정의(EEC1, ET1, CCVS), DM1 DTC 형식(SPN/FMI/OC)
  • 하드웨어 사양: 120옴 종단 저항, ISO 11898-2 전압 레벨(dominant/recessive), DB9 핀배치, 트랜시버 IC 선택 가이드
  • DBC 파일 형식 문법: 메시지/시그널 정의(비트 위치, 길이, 바이트 순서, factor, offset, 범위)
  • SocketCAN Linux 명령어(ip link set, candump, cansend) 및 CAN FD dbitrate 설정 방법

자주 묻는 질문

CAN 2.0A와 CAN 2.0B의 차이점은 무엇인가요?

CAN 2.0A는 11비트 식별자의 표준 프레임으로 최대 2,048개의 고유 메시지 ID를 지원합니다. CAN 2.0B는 29비트 식별자(11비트 기본 + 18비트 확장)의 확장 프레임으로 5억 개 이상의 고유 ID를 지원합니다. IDE 비트로 구분하며(0=표준, 1=확장), 같은 버스에 혼재할 수 있습니다. 동일한 기본 ID에서는 표준 프레임이 중재에서 우선합니다.

CAN 버스 중재는 어떻게 작동하나요?

비파괴적, 우선순위 기반 비트 단위 중재를 사용합니다. 여러 노드가 동시에 전송할 때 버스 위에서 식별자의 각 비트를 비교합니다. Dominant 비트(논리 0)가 Recessive 비트(논리 1)를 덮어씁니다. 가장 낮은 식별자 값을 가진 노드가 중재에서 승리하여 전송을 계속하고, 나머지 노드는 수신 모드로 전환합니다.

CAN FD는 어떤 페이로드 크기를 지원하나요?

클래식 CAN이 0~8바이트로 제한되는 반면, CAN FD는 0~8, 12, 16, 20, 24, 32, 48, 64바이트를 지원합니다. DLC 0~8은 직접 대응하고, DLC 9~15는 각각 12, 16, 20, 24, 32, 48, 64바이트에 매핑됩니다. BRS(Bit Rate Switch) 메커니즘으로 데이터 구간에서 최대 8 Mbps까지 높은 속도를 사용할 수 있습니다.

CANopen에서 SDO와 PDO의 역할은 무엇인가요?

SDO(Service Data Object)는 인덱스와 서브인덱스로 Object Dictionary에 접근하여 파라미터를 읽고 쓰는 비실시간 설정용 프로토콜입니다. COB-ID 0x600+NodeID(요청), 0x580+NodeID(응답)를 사용합니다. PDO(Process Data Object)는 프로토콜 오버헤드 없이 실시간 데이터를 교환합니다. TPDO는 0x180+NodeID부터, RPDO는 0x200+NodeID부터 시작합니다.

J1939의 29비트 메시지 ID 구조는 어떻게 되나요?

Priority(3비트, 0~7 낮을수록 높은 우선순위), Reserved(1비트), Data Page(1비트), PF/PDU Format(8비트), PS/PDU Specific(8비트), SA/Source Address(8비트)로 구성됩니다. PF < 240이면 포인트투포인트(PDU1)로 PS가 목적지 주소이고, PF >= 240이면 브로드캐스트(PDU2)로 PS가 그룹 확장으로 PGN 계산에 사용됩니다.

CAN 버스에 120옴 종단 저항이 필요한 이유는 무엇인가요?

CAN은 차동 신호 방식을 사용하며 신호 반사 방지를 위해 버스의 물리적 양 끝에 임피던스 매칭이 필요합니다. 각 끝에 CAN_H와 CAN_L 사이에 120옴 저항을 연결합니다. 두 저항이 병렬이므로 버스 전원이 꺼진 상태에서 CAN_H-CAN_L 간 저항을 측정하면 약 60옴이 됩니다. 종단이 없으면 특히 높은 보레이트에서 통신 오류가 발생합니다.

DBC 파일 형식은 무엇에 사용되나요?

DBC(CAN Database) 파일은 CAN 메시지와 시그널 구조를 Vector CANdb++, PEAK PCAN-Symbol Editor 같은 도구에서 사용하는 표준 텍스트 형식으로 정의합니다. 메시지 정의(BO_)에 CAN ID, 이름, DLC, 전송 노드를 지정하고, 시그널(SG_)에 비트 위치, 길이, 바이트 순서, factor, offset, 값 범위, 단위, 수신 노드를 명시합니다.

Linux에서 SocketCAN으로 CAN 통신을 어떻게 설정하나요?

먼저 인터페이스 설정: "ip link set can0 type can bitrate 500000"과 "ip link set can0 up". "candump can0"으로 모든 메시지 수신, "cansend can0 123#DEADBEEF"로 ID 0x123 메시지 송신. CAN FD는 "ip link set can0 type can bitrate 500000 dbitrate 2000000 fd on"으로 설정합니다. SocketCAN은 candump, cansend, Wireshark에서 직접 사용할 수 있는 표준 소켓 API를 제공합니다.