본문으로 건너뛰기

CAN 오류 확인

이 문서는 CAN 네트워크의 일반적인 오류, 통신 이상 확인 및 CAN ID를 찾을 수 없는 경우의 확인 절차를 다룹니다.

적용 시나리오:

  • Klipper에 CAN0, CAN UUID 또는 CAN 네트워크 관련 오류가 발생하는 경우.
  • CAN 장치가 간헐적으로 오프라인이 되거나 검색되지 않는 경우.
  • CAN bytes_invalid, Timer too close 등의 문제를 확인해야 하는 경우.

CAN0 설정, CAN ID 검색 또는 배선 및 종단 저항 규칙에 대한 내용은 CAN 네트워크 설정 및 ID 검색 문서를 먼저 참조하세요.

일반적인 오류 판단

오류일반적인 원인처리 방법
OSError: [Errno 19] No such device호스트 컴퓨터에서 CAN 장치를 찾을 수 없음UTOC, USB 케이블, CAN 브리지 펌웨어 및 전원 공급 확인
can.CanError: Failed to transmit: [Errno 100] Network is downCAN0이 시작되지 않았거나 설정 오류CAN0 재설정 및 재시작
can.CanError: Failed to transmit: [Errno 105] No buffer space availableCAN 캐시 부족 또는 시스템 네트워크 큐 이상캐시를 1024로 확인하고, 필요한 경우 CAN0 재설정
mcu 'xxx': Invalid CAN uuidCAN UUID 오기재 또는 장치 오프라인UUID 재검색, 배선 순서, 전원 공급 및 종단 저항 확인
Serial connection closedKlipper가 설정을 찾았지만 연결이 끊어짐CAN 네트워크 품질, 배선 순서, 종단 저항 및 펌웨어 속도 확인
Duplicate canbus_uuid여러 MCU 구성이 동일한 CAN UUID 사용UUID 재검색, 각 [mcu xxx]가 고유한지 확인
Unknown canbus_uuid xxx구성의 CAN UUID가 현재 네트워크 검색 결과에 없음해당 MCU 구성을 주석 처리한 후 재검색 및 입력
Can not update MCU 'xxx' config as it is shutdownCAN MCU가 먼저 종료되어 후속 설정 업데이트 실패klippy.log를 위로 스크롤하여 첫 번째 연결 끊김 또는 종료 근본 원인 찾기

더 많은 Klipper 오류는 일반적인 오류 메시지를 참조하세요.

CAN 통신 오류 확인

전자기 간섭은 일반적인 원인입니다.

CAN 버스 통신 이상의 상당 부분은 전자기 간섭(EMI) 때문입니다. 3D 프린터 내부의 스테퍼 모터선, 히터선, 히트베드선은 큰 전류가 흐를 때 강한 전자기장을 생성합니다. CAN 통신선(CANH/CANL)이 이러한 강한 전선과 근접하여 평행하게 배선되면 간섭 신호가 CAN 버스에 결합되어 다음과 같은 현상이 발생할 수 있습니다:

  • 통신 시간 초과, MCU 간헐적 연결 끊김
  • CAN 장치 무작위 오프라인, canbus_query.py 스캔 불가
  • 귀환 과정에서 Timer too close 또는 Communication timeout 트리거
  • 인쇄 중 갑작스러운 종료, 로그에 명확한 하드웨어 오류 없음

간섭 확인 시 CAN 선과 강전선의 배선 레이아웃, 실드 접지, 종단 저항 완전성을 우선 확인하세요.

CAN bytes_invalid 카운터 지속적 증가

오류 메시지: klippy.log의 초당 통계 행 Statsbytes_invalid가 0이 아니고 지속적으로 증가합니다.

오류 원인: CAN 버스 메시지가 재정렬되었습니다(reordered messages). 이는 심각한 문제로 인쇄 과정의 모든 단계에서 불안정성과 무작위 오류를 유발합니다.

알려진 원인:

  • Linux 커널 버전이 v6.6.0 미만인 경우, gs_usb CAN 드라이버 재정렬 버그가 있습니다.
  • candlelight 펌웨어를 사용하는 USB-CAN 어댑터의 펌웨어 버전이 v2.0 미만입니다.
  • Klipper USB-to-CAN 브리지 모드 노드 펌웨어가 v0.12.0 미만입니다.

해결 방법:

  1. Linux 커널을 v6.6.0 이상으로 업그레이드하세요.
  2. candlelight USB-CAN 어댑터를 사용하는 경우 펌웨어를 v2.0 이상으로 업그레이드하세요.
  3. Klipper USB-to-CAN 브리지 모드를 사용하는 경우 브리지 노드에 Klipper v0.12.0+ 펌웨어를 플래싱했는지 확인하세요.
  4. bytes_invalid가 계속 증가한다면 근본 원인이 해결되지 않은 것이므로 커널 버전과 펌웨어 버전을 계속 확인해야 합니다.
  5. 참고: bytes_invalid 증가는 배선이나 종단 저항과 같은 하드웨어 문제로 인해 발생하는 것이 아니며, 소프트웨어/펌웨어 업데이트를 통해서만 수정할 수 있습니다.

CAN 버스 큐 부족으로 인한 Timer too close

오류 메시지: CAN 버스 통신 중 MCU 'xxx' shutdown: Timer too close 발생.

오류 원인: Linux 커널이 CAN 네트워크 인터페이스에 설정하는 기본 큐 길이(qlen)는 일반적으로 10으로, Klipper의 고주파 저지연 통신 요구에는 다소 작습니다. Klipper 공식 예제에서는 주로 txqueuelen 128을 사용하며, FlyOS-FAST는 1024로 사전 설정되어 있어 노드가 많거나 부하가 높은 시나리오에서 더 큰 여유를 제공합니다.

해결 방법:

  1. 현재 CAN 인터페이스 큐 길이 확인:
ip link show can0 | grep qlen
  1. 큐 길이를 임시로 늘립니다. 일반 시스템은 먼저 128을 테스트하고, FLY 시스템 또는 다중 노드 기계는 1024를 사용할 수 있습니다:
sudo ip link set dev can0 qlen 128
# 또는
sudo ip link set dev can0 qlen 1024
  1. 영구 설정: /etc/network/interfaces.d/can0txqueuelen 128 또는 txqueuelen 1024 매개변수를 추가합니다. systemd-networkd를 사용하는 경우 .link 파일에 TxQueueLength=를 설정합니다.

CAN 버스 노드 응답 없음

오류 메시지: CAN 장치가 갑자기 오프라인이 되고 canbus_query.py로 장치를 스캔할 수 없습니다.

일반적인 원인:

  • CAN 종단 저항이 없거나 올바르지 않음(CANH-CANL 사이에 정확히 두 개의 120Ω 저항이 있어야 함).
  • CANH/CANL 배선 느슨함, 압착 불량 또는 커넥터 접촉 불량.
  • CAN 선이 트위스트 실드 케이블을 사용하지 않거나 강전선과 평행하게 배선되어 전자기 간섭 유발 (가장 일반적이면서도 가장 발견하기 어려운 원인).
  • USB-CAN 어댑터 전원 공급 이상.

간섭 확인 중점 사항:

전자기 간섭으로 인한 CAN 통신 이상은 종종 "간헐적"이고 "무작위적"으로 나타납니다. 때로는 모든 것이 정상이다가 갑자기 연결이 끊어지고 전원을 껐다 켜면 다시 복구됩니다. 확인 시 다음 사항에 중점을 두어야 합니다:

  • 배선 레이아웃: CAN 통신선이 모터선, 히터선, 히트베드선과 드래그 체인 내에서 나란히 배선되어 있습니까? 고속 PWM 변조 모터 드라이버 신호와 히터 스위칭 노이즈는 가장 강력한 간섭원입니다.
  • 실드 접지: 실드 케이블 사용 시, 실드가 한쪽 끝만 접지되어 있습니까(호스트 컴퓨터 측만 접지)? 양쪽 끝을 접지하면 접지 루프가 형성되어 오히려 간섭을 유발합니다.
  • 종단 저항 위치: 종단 저항이 CAN 버스 물리적 끝단에 설치되어 있으며, 온보드 점퍼 캡, 딥 스위치 또는 완제품 터미널 인터페이스를 통해 활성화되어 있습니까?
  • CAN 선재 사양: 트위스트 페어 케이블(연선 간격이 수 센티미터를 넘지 않음)을 사용하고 있습니까? 평행선(비연선)은 공통 모드 간섭에 대한 억제 능력이 거의 없습니다.
  • 접지 완전성: 기계 전원, 케이스가 안정적으로 접지되어 있습니까? 접지되지 않은 기계의 금속 프레임은 대형 안테나 역할을 하여 환경 노이즈를 쉽게 포착합니다.

확인 방법:

전원 차단 작업

다음 하드웨어 확인은 프린터가 완전히 꺼지고 전원 공급 장치가 분리된 상태에서 수행해야 합니다: CANH/CANL 확인, 재배선, 실드 조정, 종단 저항 활성화/비활성화, CANH-CANL 저항 측정.

  1. CAN 버스에 정확히 두 개의 120Ω 종단 저항이 있는지 확인하고, 온보드 점퍼 캡, 딥 스위치 또는 완제품 터미널 인터페이스를 우선 사용합니다.
  2. CANH/CANL 배선이 견고한지, 커넥터가 완전히 삽입되었는지 확인합니다.
  3. 먼저 전원을 차단한 후 작업하세요. 멀티미터를 사용하여 CANH-CANL 간 저항을 측정합니다(정상 약 60Ω).
  4. 재배선: CAN 통신선을 강전선과 분리하여 배선하고, 최소 2-3cm 거리를 유지하며 평행을 피합니다.
  5. 실드 접지 확인: 실드선은 호스트 컴퓨터 측에서만 접지하고, 툴보드 측은 떠 있는 상태(미접지)로 둡니다. 전원 공급 장치를 분해하거나 주전원 접지선을 임의로 변경하지 마십시오.
  6. candump를 사용하여 CAN 버스 트래픽을 모니터링하고 다량의 오류 프레임(error frames)이 나타나는지 관찰합니다.
  7. 인쇄 속도/가속도를 임시로 낮추어 테스트하고, 문제가 사라지면 간섭이 모터 드라이버 강도와 양의 상관관계가 있음을 의미합니다.

ID 검색 불가 시 확인 순서

  1. ip -details link show can0을 실행하여 CAN0이 존재하고 사용 가능한 상태인지 확인합니다.
  2. 툴보드, 메인보드 펌웨어 CAN 속도가 호스트 컴퓨터 CAN0 속도와 일치하는지 확인합니다.
  3. 장치 ID가 printer.cfg에 이미 기록되어 있다면, 먼저 해당 구성을 임시로 주석 처리한 후, 약 10초간 전원을 차단했다가 다시 켜서 검색합니다.
  4. CAN-H와 CAN-L이 반대로 연결되었는지, 단선 또는 접촉 불량인지 확인합니다.
  5. CAN 네트워크 양쪽 끝에 각각 하나의 120Ω 종단 저항이 있는지 확인하고, 전체 기계의 전원을 차단한 후 CAN-H와 CAN-L 사이의 저항값이 약 60Ω인지 측정합니다.
  6. 툴보드 또는 메인보드에 정상적으로 전원이 공급되는지 확인합니다.
  7. 펌웨어 컴파일 시 올바른 통신 방식을 선택했는지 확인합니다.
  8. 검색 결과에 Application: CANBOOT 또는 Application: Katapult가 표시되면, 먼저 Klipper 펌웨어를 플래싱한 후 다시 검색하세요.

종단 저항 규칙

전원 차단 작업

종단 저항 점퍼 캡, 딥 스위치를 조정하거나 CAN 선을 다시 연결하기 전에 프린터를 완전히 끄고 전원 공급 장치를 분리하세요.

장치 유형종단 저항 요구 사항작업 설명
CAN 툴보드120Ω 종단 저항 필요온보드 점퍼 캡 또는 딥 스위치를 통해 활성화
메인보드 CAN 인터페이스120Ω 종단 저항 필요온보드 점퍼 캡 또는 딥 스위치를 통해 활성화
UTOC 변환 모듈일반적으로 120Ω 저항 내장추가 종단 저항 활성화 불필요

빠른 확인 순서

  1. 장치 확인: lsusb를 실행하여 1d50:606f가 보이는지 확인합니다.
  2. 구성 확인: ip -details link show can0을 실행하여 CAN0이 존재하고, 속도가 올바르며, 캐시가 1024인지 확인합니다.
  3. 하드웨어 확인: 완전히 전원을 차단한 후 CAN-H와 CAN-L을 측정하여 저항값이 약 60Ω인지 확인합니다.

모든 확인 후에도 여전히 이상이 있는 경우, USB 케이블, CAN 케이블, UTOC 또는 CAN 브리지 장치를 교체하여 교차 테스트를 시도해 볼 수 있습니다.

CAN 장치 펌웨어 업데이트 참고

이 섹션은 CAN 네트워크에 이미 연결되어 있고, CAN을 통해 메인보드 또는 툴보드 펌웨어를 업데이트해야 하는 시나리오를 위한 것입니다. 제품마다 펌웨어 이름과 컴파일 방식이 다르므로, 먼저 해당 제품의 튜토리얼에 따라 펌웨어를 컴파일하세요.

사전 준비

  1. 제품 튜토리얼에 따라 새 펌웨어를 컴파일합니다.
  2. 장치 CAN UUID를 검색할 수 있거나, printer.cfg에 해당 장치의 canbus_uuid:가 입력되어 있는지 확인합니다.
  3. Klipper 서비스를 중지합니다:
sudo systemctl stop klipper

업데이트 실행

아래 명령어의 <CAN_UUID>를 실제 장치 ID로 바꾸세요.

버전 설명

시스템 버전에 따라 해당 명령어를 선택하세요.

  • FlyOS-FAST 1.3.8 이상 또는 2026년 4월 9일 이후 Klipper를 업데이트한 시스템:
python3 ~/klipper/lib/katapult/flashtool.py -u <CAN_UUID>
  • 구버전 시스템, 즉 FlyOS-FAST 1.3.8 미만, 또는 2026년 4월 9일 이전에 Klipper를 업데이트한 시스템:
python3 ~/klipper/lib/canboot/flash_can.py -u <CAN_UUID>
참고

-u 뒤에는 반드시 공백이 하나 있어야 하며, 그 다음에 CAN UUID를 입력해야 합니다.

CAN Flash Success 메시지가 나타나면 일반적으로 플래싱이 성공한 것입니다.

Loading...

업데이트 후 작업

업데이트가 완료되면 Klipper를 재시작합니다:

sudo systemctl start klipper

업데이트 후 연결할 수 없으면 CAN ID를 다시 검색하고, printer.cfgcanbus_uuid:가 여전히 올바른지 확인하세요.

최종 점검 목록

CAN ID를 검색할 수 없거나 Klipper가 CAN 장치에 연결할 수 없는 경우, 다음 순서로 빠르게 확인하세요:

  1. can0이 시스템에서 인식됨.
  2. bitrate가 펌웨어 컴파일 시 설정한 CAN 속도와 일치함.
  3. qlen 또는 txqueuelen1024임.
  4. CAN-H와 CAN-L이 반대로 연결되지 않음.
  5. CAN 버스 양 끝의 종단 저항이 올바름.
  6. 툴보드 또는 메인보드에 정상적으로 전원 공급됨.
  7. 펌웨어 통신 방식 선택이 올바름.
  8. printer.cfg에서 실제 검색된 canbus_uuid:를 사용함.
  9. 동일한 [mcu]에서 serial:canbus_uuid:가 동시에 활성화되지 않음.
Loading...