본문으로 건너뛰기

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호스트 PC에서 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 네트워크 품질, 배선 순서, 종단 저항 및 펌웨어 속도 확인

더 많은 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 변조 모터 드라이브 신호와 히터 스위칭 노이즈가 가장 강력한 간섭원입니다.
  • 차폐 접지: 차폐선을 사용하는 경우, 차폐가 한쪽 끝(호스트 PC 측에서만)에 접지되어 있습니까? 양쪽 끝 접지는 접지 루프를 형성하여 오히려 간섭을 유발합니다.
  • 종단 저항 위치: 종단 저항이 CAN 버스의 물리적 끝단에 설치되어 있으며, 온보드 점퍼 캡, 딥 스위치 또는 완제품 종단 인터페이스를 통해 활성화되었습니까?
  • CAN 케이블 사양: 꼬임선(연선 간격이 수 센티미터를 넘지 않음)을 사용하고 있습니까? 평행선(비꼬임)은 공통 모드 간섭을 거의 억제하지 못합니다.
  • 접지 무결성: 기계 전원, 외함이 확실하게 접지되어 있습니까? 접지되지 않은 기계 금속 프레임은 대형 안테나 역할을 하여 환경 노이즈를 쉽게 포착합니다.

진단 방법:

전원 차단 작업

다음 하드웨어 진단은 프린터가 완전히 전원이 차단되고 전원 공급 장치가 분리된 상태에서만 수행하십시오: CANH/CANL 확인, 배선 재배치, 차폐 조정, 종단 저항 활성화/비활성화, CANH-CANL 저항 측정.

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

ID를 찾을 수 없는 경우의 진단 순서

  1. ip -details link show can0을 실행하여 CAN0이 존재하고 사용 가능한 상태인지 확인하십시오.
  2. 툴보드, 메인보드 펌웨어 CAN 속도가 호스트 PC의 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...