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 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 네트워크 품질, 배선 순서, 종단 저항 및 펌웨어 속도 확인 |
더 많은 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 드라이버 재정렬 버그 존재.
- candlelight 펌웨어를 사용하는 USB-CAN 어댑터, 펌웨어 버전이 v2.0 미만인 경우.
- Klipper USB-to-CAN 브리지 모드 노드 펌웨어가 v0.12.0 미만인 경우.
해결 방법:
- Linux 커널을 v6.6.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=를 설정합니다.
CAN 버스 노드 응답 없음
오류 메시지: CAN 장치가 갑자기 오프라인이 되고 canbus_query.py로 장치를 스캔할 수 없습니다.
일반적인 원인:
- CAN 종단 저항이 없거나 올바르지 않음(CANH-CANL 사이에 120Ω 저항이 정확히 두 개 있어야 함).
- CANH/CANL 배선 느슨함, 압착 불량 또는 커넥터 느슨함.
- CAN선이 꼬임 차폐선을 사용하지 않거나 강전선과 평행 배선되어 전자기 간섭 발생 (가장 흔하고 발견하기 어려운 원인).
- USB-CAN 어댑터 전원 공급 이상.
간섭 진단 핵심:
전자기 간섭으로 인한 CAN 통신 이상은 종종 "간헐적"이고 "무작위적"으로 나타납니다. 때로는 모든 것이 정상이고, 때로는 갑자기 연결이 끊어졌다가 전원을 껐다 켜면 다시 복구됩니다. 진단 시 다음 사항에 중점을 두어야 합니다:
- 배선 레이아웃: CAN 통신선이 트레일 내에서 모터선, 가열선, 히트베드선과 나란히 배선되어 있습니까? 고속 PWM 변조 모터 드라이브 신호와 히터 스위칭 노이즈가 가장 강력한 간섭원입니다.
- 차폐 접지: 차폐선을 사용하는 경우, 차폐가 한쪽 끝(호스트 PC 측에서만)에 접지되어 있습니까? 양쪽 끝 접지는 접지 루프를 형성하여 오히려 간섭을 유발합니다.
- 종단 저항 위치: 종단 저항이 CAN 버스의 물리적 끝단에 설치되어 있으며, 온보드 점퍼 캡, 딥 스위치 또는 완제품 종단 인터페이스를 통해 활성화되었습니까?
- CAN 케이블 사양: 꼬임선(연선 간격이 수 센티미터를 넘지 않음)을 사용하고 있습니까? 평행선(비꼬임)은 공통 모드 간섭을 거의 억제하지 못합니다.
- 접지 무결성: 기계 전원, 외함이 확실하게 접지되어 있습니까? 접지되지 않은 기계 금속 프레임은 대형 안테나 역할을 하여 환경 노이즈를 쉽게 포착합니다.
진단 방법:
다음 하드웨어 진단은 프린터가 완전히 전원이 차단되고 전원 공급 장치가 분리된 상태에서만 수행하십시오: CANH/CANL 확인, 배선 재배치, 차폐 조정, 종단 저항 활성화/비활성화, CANH-CANL 저항 측정.
- CAN 버스에 정확히 두 개의 120Ω 종단 저항이 있는지 확인하고, 온보드 점퍼 캡, 딥 스위치 또는 완제품 종단 인터페이스를 우선 사용하십시오.
- CANH/CANL 배선이 견고하게 연결되었는지, 커넥터가 완전히 삽입되었는지 확인하십시오.
- 먼저 전원을 차단한 후 작업하십시오. 멀티미터를 사용하여 CANH-CANL 사이의 저항을 측정합니다(정상 약 60Ω).
- 배선 재배치: CAN 통신선을 강전선과 분리하여 배선하고, 최소 2-3cm 거리를 유지하며 평행을 피하십시오.
- 차폐 접지 확인: 차폐선은 호스트 PC 측에서만 접지하고, 툴보드 측은 플로팅 상태로 두십시오. 전원 공급 장치를 임의로 분해하거나 주 전원 접지선을 변경하지 마십시오.
candump를 사용하여 CAN 버스 트래픽을 모니터링하고, 많은 수의 오류 프레임(error frames)이 나타나는지 관찰하십시오.- 인쇄 속도/가속도를 임시로 낮추어 테스트하고, 문제가 사라지면 간섭이 모터 드라이브 강도와 양의 상관관계가 있음을 의미합니다.
ID를 찾을 수 없는 경우의 진단 순서
ip -details link show can0을 실행하여 CAN0이 존재하고 사용 가능한 상태인지 확인하십시오.- 툴보드, 메인보드 펌웨어 CAN 속도가 호스트 PC의 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:가 동시에 활성화되지 않았습니다.