앤디 블로그
  • 모두
  • 아키텍처
  • 기술
  • 자바
  • 스프링
  • 인프라
  • 카프카
  • 데이터베이스
  • 컨퍼런스
  • 개발 문화
책
짧은 글
  • 모두
  • ISOBUS
이력서
  • 모두
  • 아키텍처
  • 기술
  • 자바
  • 스프링
  • 인프라
  • 카프카
  • 데이터베이스
  • 컨퍼런스
  • 개발 문화
책
짧은 글
  • 모두
  • ISOBUS
이력서
  • 통신과 CAN 기초

    • 소개
    • CH1. 통신의 기초
    • CH2. CAN 통신 입문
    • CH3. CAN 물리 계층
    • CH4. CAN 데이터 프레임
    • CH5. CAN 중재와 우선순위
    • CH6. CAN 에러 처리
    • CH7. CAN FD
  • SAE J1939

    • CH8. J1939 입문
    • CH9. J1939 메시지 구조
    • CH10. J1939 주소 체계
      • 1. 소스 주소 (SA)
        • SA 값 범위
        • 예약된 주소 (일부)
      • 2. NAME (64비트)
        • NAME 필드 구성
      • 3. 주소 클레임 절차
        • 절차 단계 요약
        • 타이밍 규칙
      • 4. Commanded Address
        • 메시지 구조
        • 동작 방식
        • 사용 사례
      • 다음 챕터
    • CH11. J1939 Transport Protocol
  • ISOBUS (ISO 11783)

    • CH12. ISOBUS 개요
    • CH13. 네트워크 아키텍처
    • CH14. 네트워크 관리
  • Virtual Terminal (VT)

    • CH15. VT 기초
    • CH16. VT 오브젝트 풀
    • CH17. VT 명령어
  • Task Controller (TC)

    • CH18. TC 기초
    • CH19. TC 프로세스 데이터
    • CH20. TC DDOP
  • 심화 및 실습

    • CH21. 기타 기능
    • CH22. 종합 실습
  • 부록

    • 용어 사전
    • PGN/SPN 목록
    • DDI 목록
    • 트러블슈팅
    • 참고 자료

J1939 주소 체계

학습 목표

  • 소스 주소(SA)의 범위와 예약 주소의 의미를 설명할 수 있다.
  • 64비트 NAME의 각 필드 구성과 역할을 이해한다.
  • 주소 클레임 절차의 단계별 흐름과 충돌 해결 방식을 설명할 수 있다.
  • Commanded Address(PGN 65240)의 동작 원리를 이해한다.

1. 소스 주소 (SA)

J1939 네트워크에서 모든 ECU는 소스 주소(Source Address, SA)를 가진다. SA는 8비트 값으로, 29비트 CAN ID의 하위 8비트(비트 7~0)에 위치한다.

┌─────────────────────────────────────────────────┐
│           29-bit CAN Identifier                  │
│  [28:26] P  [25] R  [24] DP  [23:16] PF          │
│  [15:8] PS (DA or Group Ext)  [7:0] SA           │
└─────────────────────────────────────────────────┘

SA 값 범위

범위의미
0 ~ 253일반 사용 가능 주소
254 (0xFE)Null Address — 주소 클레임 전, 또는 클레임 실패 시
255 (0xFF)Global Address — 브로드캐스트 수신 전용

예약된 주소 (일부)

SA장치
0 (0x00)Engine #1
3 (0x03)Transmission #1
23 (0x17)Instrument Cluster #1
33 (0x21)Cab Controller — Primary
128 (0x80)Task Controller (ISOBUS)
130 (0x82)Virtual Terminal (ISOBUS)

예약 주소는 우선권을 가지지 않다. 주소 클레임 경쟁에서 NAME 값이 작은 쪽이 이기며, 예약 주소라도 더 작은 NAME을 가진 장치가 있으면 양보해야 한다.

graph LR
    subgraph 29bit_CAN_ID
        P["Priority<br>(3bit)"]
        R["Reserved<br>(1bit)"]
        DP["Data Page<br>(1bit)"]
        PF["PDU Format<br>(8bit)"]
        PS["PDU Specific<br>(8bit)"]
        SA["Source Address<br>(8bit)"]
    end
    P --> R --> DP --> PF --> PS --> SA
    style SA fill:#ffd700,stroke:#b8860b,color:#000

2. NAME (64비트)

NAME은 J1939 네트워크에서 ECU를 전 세계적으로 고유하게 식별하는 64비트 구조체이다. 주소 클레임 시 충돌이 발생하면 NAME 값을 비교해 우선순위를 결정한다. NAME 값이 수치적으로 더 작은 장치가 주소를 획득한다.

NAME 필드 구성

packet-beta
  0-0: "AAC"
  1-3: "IG"
  4-7: "VSI"
  8-14: "VS"
  15-15: "Rsvd"
  16-23: "Function"
  24-28: "FI"
  29-31: "EI"
  32-42: "Manufacturer Code"
  43-63: "Identity Number"
필드비트 수위치 (MSB 기준)설명
Arbitrary Address Capable (AAC)1bit 631이면 자동 주소 재할당 가능
Industry Group (IG)3bit 62~600=Global, 2=Agricultural
Vehicle System Instance (VSI)4bit 59~56동일 시스템 여러 개 구분
Vehicle System (VS)7bit 55~49시스템 유형 (예: 트랙터)
Reserved1bit 48항상 0
Function (F)8bit 47~40장치 기능 (예: 엔진 제어)
Function Instance (FI)5bit 39~35동일 기능 여러 개 구분
ECU Instance (EI)3bit 34~32동일 장치 내 ECU 구분
Manufacturer Code11bit 31~21제조사 코드 (SAE J1939 등록)
Identity Number21bit 20~0제조사 내 일련번호

NAME 예시 (16진수):

NAME = 0x0000000060000000
       └─────────────────┘
         Industry Group = 3 (Agriculture),
         Arbitrary Address Capable = 0,
         Function = 0 (Engine),
         Manufacturer Code = 0,
         Identity Number = 0

3. 주소 클레임 절차

J1939 장치는 네트워크에 연결되면 Address Claimed 메시지(PGN 60928, 0xEE00)를 브로드캐스트하여 주소를 선점한다. 같은 주소를 사용하려는 장치가 있으면 NAME 비교를 통해 충돌을 해결한다.

sequenceDiagram
    participant ECU_A as ECU A (NAME=0x100)
    participant BUS as CAN Bus
    participant ECU_B as ECU B (NAME=0x200)

    Note over ECU_A,ECU_B: 전원 ON

    ECU_A->>BUS: Address Claimed (SA=23, NAME=0x100)
    ECU_B->>BUS: Address Claimed (SA=23, NAME=0x200)

    Note over BUS: SA 충돌 감지

    ECU_A->>ECU_A: 상대 NAME(0x200) > 내 NAME(0x100)<br>→ 내가 승리, SA=23 유지
    ECU_B->>ECU_B: 상대 NAME(0x100) < 내 NAME(0x200)<br>→ 내가 패배

    alt AAC=1 (자동 재할당 가능)
        ECU_B->>BUS: Address Claimed (SA=24, NAME=0x200)
        Note over ECU_B: 새 주소 SA=24로 클레임 성공
    else AAC=0 (자동 재할당 불가)
        ECU_B->>BUS: Cannot Claim Address (SA=0xFE)
        Note over ECU_B: Null Address로 동작 (제한적 기능)
    end

절차 단계 요약

  1. 전원 ON — ECU가 사용할 SA를 선택 (선호 주소 또는 저장된 주소)
  2. Request for Address Claimed 수신 — 다른 장치가 네트워크 조회를 요청할 수 있음
  3. Address Claimed 전송 — 선택한 SA와 자신의 NAME을 PGN 60928으로 브로드캐스트
  4. 충돌 감지 — 같은 SA로 다른 NAME이 수신되면 충돌
  5. NAME 비교 — 더 작은 NAME 값을 가진 장치가 해당 SA를 획득
  6. 패자 처리
    • AAC=1: 다른 SA를 선택하여 재클레임
    • AAC=0: Cannot Claim (SA=0xFE) 전송 후 수신 전용 동작

타이밍 규칙

항목값
클레임 후 대기 시간250ms (다른 장치 응답 대기)
요청 후 응답 시간최대 1250ms

4. Commanded Address

Commanded Address는 외부 장치가 특정 ECU에게 주소를 강제로 지정하는 메커니즘이다. PGN 65240 (0xFED8)을 사용한다.

메시지 구조

PGN 65240 (Commanded Address)
┌────────────────────────────────────────┐
│ Byte 1~8 : 대상 NAME (64bit)           │
│ Byte 9   : 새로운 SA (8bit)            │
└────────────────────────────────────────┘

동작 방식

sequenceDiagram
    participant MASTER as 관리 장치 (예: 진단기)
    participant BUS as CAN Bus
    participant ECU as 대상 ECU (NAME=0xABCD)

    MASTER->>BUS: Commanded Address<br>(NAME=0xABCD, New SA=0x10)
    BUS->>ECU: Commanded Address 수신

    ECU->>ECU: 내 NAME(0xABCD) 일치 확인
    ECU->>BUS: Address Claimed (SA=0x10, NAME=0xABCD)
    Note over ECU: SA=0x10으로 변경 완료

사용 사례

상황설명
공장 설정제조 라인에서 장치에 고정 SA 부여
네트워크 재구성시스템 통합 시 주소 충돌 사전 방지
진단/유지보수특정 SA로 장치를 강제 이동

Commanded Address를 수신한 ECU는 반드시 Address Claimed 메시지로 응답해야 한다. ECU가 새 주소를 클레임할 수 없는 경우 Cannot Claim을 전송한다.


핵심 정리

  • SA는 8비트이며 0~253이 일반 사용 가능, 254=Null, 255=Global(브로드캐스트)이다.
  • SA는 29비트 CAN ID의 하위 8비트에 위치한다.
  • NAME은 64비트 구조체로 장치를 전 세계적으로 고유 식별하며, 값이 작을수록 우선순위가 높다.
  • 주소 클레임(PGN 60928)은 전원 ON 후 발생하며, 충돌 시 NAME 비교로 승자를 결정한다.
  • AAC=1인 장치는 충돌 패배 후 다른 주소로 자동 재클레임할 수 있다.
  • Commanded Address(PGN 65240)는 외부에서 ECU의 주소를 강제 지정하는 방법이다.

다음 챕터

  • 다음 : J1939 Transport Protocol
Prev
J1939 메시지 구조
Next
J1939 Transport Protocol