CAN 오류 문제 해결
이 문서는 CAN 네트워크에서 발생하는 일반적인 오류, 통신 이상 문제 해결 및 CAN ID를 찾을 수 없을 때의 문제 해결 절차를 다룹니다.
적용 시나리오:
- Klipper에서 CAN0, CAN UUID 또는 CAN 네트워크 관련 오류가 발생하는 경우.
- CAN 장치가 간헐적으로 오프라인이 되거나 검색되지 않는 경우.
- CAN
bytes_invalid,USB CANBUS bridge,BUS-OFF, 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 down | CAN0이 시작되지 않았거나 설정 오류 | CAN0 재구성 후 재시작 |
can.CanError: Failed to transmit: [Errno 105] No buffer space available | CAN 버퍼 부족 또는 시스템 네트워크 큐 이상 | 캐시를 1024로 확인하고 필요한 경우 CAN0 재구성 |
mcu 'xxx': Invalid CAN uuid | CAN UUID 입력 오류 또는 장치 오프라인 | UUID 재검색, 배선 순서, 전원 공급 및 종단 저항 확인 |
Serial connection closed | Klipper가 구성을 찾았지만 연결 끊김 | 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 shutdown | CAN MCU가 먼저 종료되어 후속 구성 업데이트 실패 | klippy.log를 위로 스크롤하여 첫 번째 연결 끊김 또는 종료 근본 원인 찾기 |
USB CANBUS bridge 'mcu' is discarding! | USB-CAN 브리지 MCU의 CAN 하드웨어가 메시지 폐기 | canstat_mcu, bus_state, 전원 공급, 트랜시버 및 배선 하네스 확인 |
can state BUS-OFF / ERROR-PASSIVE | 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의 초당 통계 행 Stats에서 bytes_invalid가 0이 아니며 지속적으로 증가합니다.
오류 원인: CAN 버스 메시지가 재정렬되었습니다(reordered messages). 이는 심각한 문제로, 인쇄 과정의 모든 단계에서 불안정성과 무작위 오류를 유발할 수 있습니다.
알려진 원인:
- Linux 커널 버전이 v6.6.0 미만인 경우, gs_usb CAN 드라이버 재정렬 버그가 존재합니다.
- 펌웨어 버전이 v2.0 미만인 candlelight 펌웨어 기반 USB-CAN 어댑터를 사용하는 경우.
- Klipper USB-to-CAN 브리지 모드 노드 펌웨어가 v0.12.0 미만인 경우.
해결 방법:
- candlelight USB-CAN 어댑터를 사용하는 경우 펌웨어를 v2.0 이상으로 업그레이드하십시오.
- Klipper USB-to-CAN 브리지 모드를 사용하는 경우 브리지 노드에 Klipper v0.12.0+ 펌웨어를 플래시하십시오.
bytes_invalid가 계속 증가하면 근본 원인이 해결되지 않은 것이므로 커널 버전과 펌웨어 버전을 계속 확인해야 합니다.- 참고:
bytes_invalid증가는 배선이나 종단 저항과 같은 하드웨어 문제로 인해 발생하지 않습니다. 소프트웨어/펌웨어 업데이트를 통해서만 수정할 수 있습니다.
CAN 버스 큐 부족으로 인한 Timer too close
오류 메시지: CAN 버스 통신 중 MCU 'xxx' shutdown: Timer too close 발생.
오류 원인: Linux 커널이 CAN 네트워크 인터페이스에 설정하는 기본 큐 길이(qlen)는 일반적으로 10이며, 이는 Klipper의 고주파 저지연 통신 요구 사항에 비해 다소 작습니다. Klipper 공식 예제는 일반적으로 txqueuelen 128을 사용합니다. FlyOS-FAST는 1024로 미리 설정되어 있어 노드가 많거나 고부하 시나리오에서 더 큰 여유를 제공합니다.
해결 방법:
- 현재 CAN 인터페이스 큐 길이를 확인합니다:
ip link show can0 | grep qlen
- 큐 길이를 임시로 늘립니다. 일반 시스템은 먼저
128을 테스트하고, FLY 시스템 또는 다중 노드 기계는1024를 사용할 수 있습니다:
sudo ip link set dev can0 qlen 128
# 또는
sudo ip link set dev can0 qlen 1024
- 영구 설정:
/etc/network/interfaces.d/can0에txqueuelen 128또는txqueuelen 1024매개변수를 추가합니다. systemd-networkd를 사용하는 경우.link파일에TxQueueLength=를 설정합니다.
USB CANBUS bridge is discarding / bus_state=off
오류 메시지: USB CANBUS bridge 'mcu' is discarding!, canstat_mcu: bus_state=off, can state BUS-OFF, ERROR-PASSIVE, 이후 Timeout with MCU 'xxx' 또는 Serial connection closed 발생.
오류 원인: USB-CAN 브리지 MCU의 CAN 하드웨어가 더 이상 메시지를 정상적으로 송수신하지 못합니다. 단순한 txqueuelen 부족 문제가 아닌 경우가 일반적입니다. CAN 와이어 하네스 접촉 불량, 종단 저항 위치 오류, 트랜시버 또는 특정 노드 이상, 툴보드 전원 변동, 버스 길이 과다 또는 노드 수 과다로 인한 신호 마진 부족이 더 흔한 원인입니다.
진단 방법:
CANH/CANL을 확인하거나, 툴보드를 재연결하거나, 종단 저항을 조정하거나, CANH-CANL 저항을 측정하기 전에 프린터를 완전히 끄고 전원 공급을 차단하십시오. 전원이 켜진 상태에서 CAN 노드를 추가/제거하거나 툴보드 와이어 하네스를 연결/분리하지 마십시오.
klippy.log에서USB CANBUS bridge 'mcu' is discarding!전후의Stats행을 찾아canstat_mcu의bus_state,rx_error,tx_error,tx_retries를 기록합니다.bus_state가active에서off또는passive로 변경된 경우, Linux 큐 길이만 조정하지 말고 우선적으로 하드웨어 버스 문제로 진단하십시오.- 전원을 차단한 후 CAN 버스에 정확히 두 개의 종단 저항만 있고 물리적 버스의 양쪽 끝에 위치하는지 확인하십시오. 측정된 CANH-CANL 저항 값은 일반적으로
60Ω에 가까워야 합니다. - CAN 노드를 하나씩 줄여 테스트합니다: 먼저 메인보드와 하나의 툴보드만 유지한 다음, 노드를 점차 추가하여 특정 툴보드, 특정 와이어 하네스 또는 특정 분기가 연결될 때 이상이 발생하는지 확인합니다.
- 툴보드 전원 공급 및 커넥터 압착 상태를 확인합니다. 특정 툴보드가 리셋되면 브리지 쪽에서 먼저
discarding이 나타나고, 이후 다른 MCU가 시간 초과로 보고될 수 있습니다. - 다중 툴헤드 또는 긴 와이어 하네스 기계는 임시로 CAN 속도를 낮추거나, 여러 툴헤드를 두 개의 USB-CAN 어댑터로 나누어 교차 검증합니다.
- Klipper와 모든 CAN 노드 펌웨어를 업데이트한 후에도 문제가 재현되면, 우선적으로 완제품 CAN 케이블, USB-CAN 어댑터 또는 툴보드 트랜시버 모듈을 교체하여 교차 테스트합니다.
다중 CAN 노드 중 일부만 UUID 검색됨
오류 메시지: canbus_query.py가 일부 툴보드 UUID만 검색하거나, 동일한 CAN 버스에서 임의의 한두 노드는 정상이지만 세 번째 이상의 노드를 추가하면 모두 검색되지 않고, 연결 시간이 초과되거나, BUS-OFF가 발생합니다.
일반적인 원인:
- 추가된 툴보드가 Katapult / Klipper CAN 모드로 진입하지 않았거나, 펌웨어 CAN 속도가 호스트 컴퓨터의
can0와 일치하지 않습니다. - 특정 노드의 CANH/CANL이 반대로 연결되었거나, 압착 불량이거나, 트랜시버가 손상되어 연결 시 전체 버스가 마비됩니다.
- 종단 저항이 물리적 버스의 양쪽 끝에 위치하지 않거나, 툴보드, 허브 보드, 어댑터 보드에서 불필요한 종단 저항이 활성화되었습니다.
- 다중 툴헤드 와이어 하네스가 너무 긴 루프, 성형 분기 또는 임피던스 불연속을 형성하여 노드 수 증가 시 신호 마진이 부족합니다.
- 다른 배치의 툴보드가 다른 부트로더, Katapult 또는 Klipper 펌웨어를 사용하여 검색 상태가 일관되지 않습니다.
진단 방법:
CAN 노드를 추가/제거하거나, 종단 저항을 조정하거나, 와이어 하네스를 재압착하거나, CANH-CANL 저항을 측정하기 전에 프린터를 완전히 끄고 전원 공급을 차단하십시오.
- 호스트 컴퓨터 CAN 인터페이스와 하나의 대상 툴보드만 유지하여 단일 노드가 UUID를 검색할 수 있는지 확인합니다.
- 짧은 케이블, 포트 및 툴보드를 하나씩 교체하여 특정 노드 문제인지, 아니면 노드 수가 증가한 후에만 문제가 발생하는지 확인합니다.
- 각 툴보드의 부트로더, Klipper 펌웨어 통신 방식 및 CAN 속도를 확인하여 모든 노드가
can0와 일치하는지 확인합니다. - 각
[mcu xxx]의canbus_uuid가 고유한지 확인합니다. 장치에 이미 구성이 기록된 경우, 검색 전에 해당 MCU 구성을 임시로 주석 처리하고 Klipper를 재시작할 수 있습니다. - 전원을 차단하고 CANH-CANL 저항을 측정합니다. 약
60Ω이면 일반적으로 양쪽 끝에 각각 하나의120Ω종단 저항이 있음을 나타냅니다. 현저히 벗어나면 먼저 종단 저항을 처리하십시오. - 임의의 두 노드는 안정적이지만 세 개 이상이 불안정한 경우, 버스 토폴로지, 케이블 길이, 종단 위치 및 허브 보드 설명서를 우선적으로 확인합니다. 필요한 경우 두 개의 CAN 버스로 분할합니다.
CAN 버스 노드 응답 없음
오류 메시지: CAN 장치가 갑자기 오프라인이 되고, canbus_query.py로 장치를 스캔할 수 없습니다.
일반적인 원인:
- CAN 종단 저항이 없거나 올바르지 않습니다(CANH-CANL 사이에는 정확히 두 개의 120Ω 저항이 있어야 함).
- CANH/CANL 배선이 느슨하거나, 압착 불량이거나, 커넥터가 느슨합니다.
- CAN 와이어가 트위스트 페어 실드 케이블을 사용하지 않거나, 강력한 전원 와이어와 평행 배선되어 전자기 간섭을 유발합니다(가장 흔하고 가장 발견하기 어려운 원인).
- USB-CAN 어댑터 전원 공급 이상.
간섭 진단 핵심 사항:
전자기 간섭으로 인한 CAN 통신 이상은 종종 "간헐적"이고 "무작위적"으로 나타납니다. 때로는 모든 것이 정상이지만, 갑자기 연결이 끊어졌다가 전원을 껐다 켜면 다시 복구됩니다. 진단 시 다음 사항에 특히 주의해야 합니다:
- 배선 레이아웃: CAN 통신선이 드래그 체인 내에서 모터선, 가열선, 히트베드선과 나란히 배선되어 있습니까? 고속 PWM 변조 스테퍼 모터 드라이브 신호와 히터 스위칭 노이즈가 가장 강력한 간섭원입니다.
- 차폐 접지: 실드 케이블을 사용하는 경우 차폐가 단일 종단 접지되어 있습니까(호스트 컴퓨터 쪽에서만 접지)? 양쪽 종단 접지는 접지 루프를 형성하여 오히려 간섭을 유발합니다.
- 종단 저항 위치: 종단 저항이 CAN 버스의 물리적 끝단에 설치되고, 보드 온보드 점퍼 캡, 딥 스위치 또는 완제품 종단 인터페이스를 통해 활성화되었습니까?
- CAN 와이어 사양: 트위스트 페어 와이어(연선 간격이 수 센티미터를 넘지 않음)를 사용하고 있습니까? 평행 와이어(트위스트 페어 아님)는 공통 모드 간섭을 거의 억제하지 못합니다.
- 접지 완전성: 기계 전원 공급 장치와 외함이 안정적으로 접지되었습니까? 접지되지 않은 기계 금속 프레임은 대형 안테나 역할을 하여 환경 노이즈를 쉽게 포착합니다.
진단 방법:
다음 하드웨어 진단은 프린터가 완전히 꺼지고 전원 공급이 차단된 상태에서만 수행하십시오: CANH/CANL 확인, 재배선, 차폐 조정, 종단 저항 활성화/비활성화, CANH-CANL 저항 측정.
- CAN 버스에 정확히 두 개의 120Ω 종단 저항이 있는지 확인하고, 온보드 점퍼 캡, 딥 스위치 또는 완제품 종단 인터페이스를 우선적으로 사용하십시오.
- CANH/CANL 배선이 단단히 고정되었는지, 커넥터가 완전히 삽입되었는지 확인하십시오.
- 먼저 전원을 차단한 후 작업하십시오. 멀티미터를 사용하여 CANH-CANL 사이의 저항을 측정합니다(정상은 약 60Ω).
- 재배선: CAN 통신선을 강력한 전원선과 분리하여 배선하고, 최소 2-3cm 거리를 유지하며 평행을 피하십시오.
- 차폐 접지 확인: 실드선은 호스트 컴퓨터 쪽에서만 접지하고, 툴보드 쪽은 플로팅 상태로 두십시오. 전원 공급 장치를 임의로 분해하거나 주전원 접지를 변경하지 마십시오.
candump를 사용하여 CAN 버스 트래픽을 모니터링하고, 대량의 오류 프레임(error frames)이 나타나는지 관찰하십시오.- 인쇄 속도/가속도를 임시로 낮추어 테스트합니다. 문제가 사라지면 간섭이 스테퍼 모터 드라이브 강도와 양의 상관관계가 있음을 나타냅니다.
ID를 찾을 수 없는 경우 진단 순서
ip -details link show can0를 실행하여 CAN0이 존재하고 사용 가능한 상태인지 확인합니다.- 툴보드, 메인보드 펌웨어 CAN 속도가 호스트 컴퓨터 CAN0 속도와 일치하는지 확인합니다.
- 장치 ID가
printer.cfg에 이미 기록된 경우, 해당 구성을 임시로 주석 처리한 후 약 10초간 전원을 차단했다가 다시 켜서 검색합니다. - CAN-H와 CAN-L이 반대로 연결되었는지, 단선되었는지 또는 접촉 불량인지 확인합니다.
- CAN 네트워크 양쪽 끝에 각각 하나의
120Ω종단 저항이 있는지 확인하고, 기기 전원을 차단한 후 CAN-H와 CAN-L 사이의 저항을 측정하여 약60Ω인지 확인합니다. - 툴보드 또는 메인보드에 정상적으로 전원이 공급되는지 확인합니다.
- 펌웨어 컴파일 시 올바른 통신 방식을 선택했는지 확인합니다.
- 검색 결과에
Application: CANBOOT또는Application: Katapult가 표시되면, 먼저 Klipper 펌웨어를 플래시한 후 다시 검색하십시오.
종단 저항 규칙
종단 저항 점퍼 캡, 딥 스위치를 조정하거나 CAN 케이블을 다시 연결하기 전에 프린터를 완전히 끄고 전원 공급을 차단하십시오.
| 장치 유형 | 종단 저항 요구 사항 | 작업 설명 |
|---|---|---|
| CAN 툴보드 | 120Ω 종단 저항 필요 | 온보드 점퍼 캡 또는 딥 스위치를 통해 활성화 |
| 메인보드 CAN 인터페이스 | 120Ω 종단 저항 필요 | 온보드 점퍼 캡 또는 딥 스위치를 통해 활성화 |
| UTOC 유형 변환 모듈 | 일반적으로 120Ω 저항 내장 | 추가 종단 저항 활성화 불필요 |
빠른 진단 순서
- 먼저 장치 확인:
lsusb를 실행하여1d50:606f가 보이는지 확인합니다. - 그 다음 구성 확인:
ip -details link show can0를 실행하여 CAN0이 존재하고, 속도가 올바르며, 캐시가1024인지 확인합니다. - 마지막으로 하드웨어 확인: 완전히 전원을 차단한 후 CAN-H와 CAN-L 사이의 저항을 측정하여 약
60Ω인지 확인합니다.
모든 확인 후에도 여전히 이상이 있는 경우, USB 케이블, CAN 케이블, UTOC 또는 CAN 브리지 장치를 교체하여 교차 테스트해 볼 수 있습니다.
CAN 장치 펌웨어 업데이트 참고
이 섹션은 CAN 네트워크에 이미 연결할 수 있고, CAN을 통해 메인보드 또는 툴보드 펌웨어를 업데이트해야 하는 시나리오를 위한 것입니다. 제품에 따라 펌웨어 이름과 컴파일 방식이 다르므로, 먼저 해당 제품 튜토리얼에 따라 펌웨어를 컴파일하십시오.
준비 작업
- 제품 튜토리얼에 따라 새 펌웨어를 컴파일합니다.
- 장치 CAN UUID를 검색할 수 있거나,
printer.cfg에 해당 장치의canbus_uuid:가 이미 작성되어 있는지 확인합니다. - 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 메시지가 나타나면 일반적으로 플래시가 성공했음을 의미합니다.
업데이트 후 작업
업데이트가 완료되면 Klipper를 다시 시작합니다:
sudo systemctl start klipper
업데이트 후 연결할 수 없으면 CAN ID를 다시 검색하고 printer.cfg의 canbus_uuid:가 여전히 올바른지 확인하십시오.
최종 점검 목록
CAN ID를 검색할 수 없거나 Klipper가 CAN 장치에 연결할 수 없는 경우, 다음 순서로 빠르게 확인하십시오:
can0이 시스템에 의해 인식됩니다.bitrate가 펌웨어 컴파일 시 설정된 CAN 속도와 일치합니다.qlen또는txqueuelen이1024입니다.- CAN-H와 CAN-L이 반대로 연결되지 않았습니다.
- CAN 버스 양쪽 끝의 종단 저항이 올바릅니다.
- 툴보드 또는 메인보드에 정상적으로 전원이 공급됩니다.
- 펌웨어 통신 방식 선택이 올바릅니다.
printer.cfg에서 실제 검색된canbus_uuid:를 사용합니다.- 동일한
[mcu]에serial:과canbus_uuid:가 동시에 활성화되지 않았습니다.