Error code list that came with printer
Thanks, never seen it before.
Do you think you can scan them & upload so users can download & print..??
Did a quick translation in AI and compared images against below. I might of missed something, but over all translation looked clean. Shows a error in the codes as well, see bottom.
SOVOL ZERO — Screen Prompt Codes
| No. | Knob screen prompt code | Reasons and Problems |
|---|---|---|
| 1 | 101 x / 101 y / 101 z |
No trigger on %s after full movement |
| 2 | 102 |
Probe triggered prior to movement |
| 3 | 103 x / 103 y / 103 z |
Endstop %s still triggered after retract |
| 4 | 104 x |
Must home axis first X |
| 5 | 104 y |
Must home axis first Y |
| 6 | 104 z |
Must home axis first Z |
| 7 | 105 x |
Move out of range X |
| 8 | 105 y |
Move out of range Y |
| 9 | 105 z |
Move out of range Z |
| 10 | 106 |
Extrude below minimum temp |
| 11 | 107 |
Extrude only move too long |
| 12 | 108 |
Move exceeds maximum extrusion |
| 13 | 109 |
Pressure probe more than five times |
| 14 | 110 |
Exception in chamber_fan |
| 15 | 111 |
Invalid lis2dw id |
| 16 | 112 |
LDC1612 I2C bus busy or timeout error, please check the connection between the sensor module and the mainboard |
| 17 | 113 |
LDC1612 I2C bus error. There may have been internal or external interference during the communication |
| 18 | 114 |
Invalid ldc1612 id |
| 19 | 115 |
Invalid probe_eddy_current height |
| 20 | 116 |
Failed calibration – incomplete sensor data |
| 21 | 117 |
Failed calibration – frequency not increasing each step |
| 22 | 118 |
Must calibrate probe_eddy_current first |
| 23 | 119 |
probe_eddy_current sensor outage |
| 24 | 120 |
Unable to obtain probe_eddy_current sensor readings |
| 25 | 121 |
probe_eddy_current sensor not in valid range |
| 26 | 122 |
Communication timeout during homing |
| 27 | 123 |
Eddy current sensor error |
| 28 | 124 |
Must home before probe |
| 29 | 125 |
Exception in exhaust_fan |
SOVOL ZERO — Screen Error Codes
Error codes 1–15
| No. | Knob screen error code | Reasons and Problems |
|---|---|---|
| 1 | 1 |
Multiple unknown error reports |
| 2 | 2 |
Shutdown cleared when not shutdown |
| 3 | 3 |
sentinel timer called |
| 4 | 4 |
Invalid command |
| 5 | 5 |
Message encode error |
| 6 | 6 |
Command parser error |
| 7 | 7 |
config_reset only available when shutdown |
| 8 | 8 |
oids already allocated |
| 9 | 9 |
Can’t assign oid |
| 10 | 10 |
Invalid oid type |
| 11 | 11 |
Already finalized |
| 12 | 12 |
Invalid move request size |
| 13 | 13 |
Move queue overflow |
| 14 | 14 |
alloc_chunks failed |
| 15 | 15 |
alloc_chunk failed |
Error codes 16–53
| No. | Knob screen error code | Reasons and Problems |
|---|---|---|
| 16 | 16 |
update_digital_out not valid with active queue |
| 17 | 17 |
Scheduled digital out event will exceed max_duration |
| 18 | 18 |
Can not set soft pwm cycle ticks while updates pending |
| 19 | 19 |
Missed scheduling of next digital out event |
| 20 | 20 |
Can’t reset time when stepper active |
| 21 | 21 |
Invalid count parameter |
| 22 | 22 |
Stepper too far in past |
| 23 | 23 |
Can’t add signal that is already active |
| 24 | 24 |
ADC out of range |
| 25 | 25 |
Invalid spi config |
| 26 | 26 |
I2C Timeout |
| 27 | 27 |
I2C START READ NACK |
| 28 | 28 |
I2C_START NACK |
| 29 | 29 |
I2C NACK |
| 30 | 30 |
Scheduled pwm event will exceed max_duration |
| 31 | 31 |
Missed scheduling of next hard pwm event |
| 32 | 32 |
Invalid buttons retransmit count |
| 33 | 33 |
Set button past maximum button count |
| 34 | 34 |
Max of 8 buttons |
| 35 | 35 |
tmcuart data too large |
| 36 | 36 |
Invalid neopixel update command |
| 37 | 37 |
Invalid neopixel data_size |
| 38 | 38 |
Thermocouple reader fault |
| 39 | 39 |
Invalid thermocouple chip type |
| 40 | 40 |
angle sensor requires cs pin |
| 41 | 41 |
Invalid spi angle chip type |
| 42 | 42 |
HX71x gain/channel out of range 1–4 |
| 43 | 43 |
Not a valid input pin |
| 44 | 44 |
Not an output pin |
| 45 | 45 |
Not a valid ADC pin |
| 46 | 46 |
Rescheduled timer in the past |
| 47 | 47 |
Failed to send i2c addr |
| 48 | 48 |
Unsupported i2c bus |
| 49 | 49 |
Invalid spi bus |
| 50 | 50 |
Another CAN node assigned this ID |
| 51 | 51 |
Invalid PWM channel |
| 52 | 52 |
PWM already programmed at different speed |
| 53 | 53 |
Not a valid PWM pin |
Error codes 60–73
The printed list skips codes 54 through 59.
| No. | Knob screen error code | Reasons and Problems |
|---|---|---|
| 54 | 60 |
Lost communication with MCU |
| 55 | 61 |
Shutdown due to webhooks request |
| 56 | 62 |
ADC out of range |
| 57 | 63 |
Heater extruder not heating at expected rate |
| 58 | 64 |
Heater heater_bed not heating at expected rate |
| 59 | 65 |
TMC stepper_x reports error |
| 60 | 66 |
TMC stepper_y reports error |
| 61 | 67 |
TMC stepper_z reports error |
| 62 | 68 |
TMC extruder reports error |
| 63 | 69 |
Move queue overflow |
| 64 | 70 |
Missed scheduling of next digital out event |
| 65 | 71 |
Unable to write tmc spi stepper_x register |
| 66 | 72 |
Unable to write tmc spi stepper_x register |
| 67 | 73 |
Exception in hotend_fan |
Source-sheet oddity: error codes 71 and 72 both say stepper_x in the photographed document. I preserved that duplication exactly rather than guessing what code 72 was intended to say.
Since I now own two Zeros, one running 1.4.7 and one still on factory-original 1.3.7, I pulled the codes directly from the firmware.
That matters because the code list changed between firmware versions, which explains a lot of the disagreement between published lists and what people actually see on screen.
Codes by version
| Firmware | Codes | Difference |
|---|---|---|
| 1.3.7 / 1.3.8 | 23 | 101–109, 111–124. No 110 or 125. Has 118. |
| 1.4.1 / 1.4.2 | 25 | adds 110 (chamber_fan) and 125 (exhaust_fan) |
| 1.4.6 / 1.4.7 | 24 | removes 118 |
So if your list has 118 and your printer doesn’t, or your printer shows 110/125 and your list doesn’t, the list may simply be for a different firmware version.
Also, 1.3.8 is byte-identical to 1.3.7 apart from the version string. If you’re on 1.3.8, you’re effectively running the launch firmware.
A few things this clears up
71/72 is a typo in the printed sheet.
The sheet lists both as stepper_x. The firmware is unambiguous: 71 is stepper_x, 72 is stepper_y.
@MikeHides had already flagged the duplicate and correctly preserved the source instead of guessing.
54–59 aren’t missing codes.
Shutdown codes are generated as:
shutCode = 60 + index
So 60 is the lowest possible value. 54–59 are simply unreachable.
109 changed between firmware versions.
| Firmware | Message |
|---|---|
| 1.3.7 / 1.3.8 | Pressure probe more than five times |
| 1.4.1 onward | Toolhead probe more than ten times |
The printed sheet contains the 1.3.x wording exactly. It isn’t wrong, just old. Both the text and retry limit changed in 1.4.x, while the documentation did not.
Code 124
124 comes from probe_pressure.py, the load-cell module.
From 1.4.x onward, [probe_pressure] is no longer present in printer.cfg, so the module still ships but isn’t loaded. Later production also removed the load-cell hardware.
On a stock 1.4.x printer, 124 therefore can’t fire.
Shutdown codes
These are in klippy/klippy.py and are identical between 1.3.7 and 1.4.7.
| Code | Message |
|---|---|
| 60 | Lost communication with MCU |
| 61 | Shutdown due to webhooks request |
| 62 | ADC out of range |
| 63 | Heater extruder not heating at expected rate |
| 64 | Heater heater_bed not heating at expected rate |
| 65 | TMC ‘stepper_x’ reports error |
| 66 | TMC ‘stepper_y’ reports error |
| 67 | TMC ‘stepper_z’ reports error |
| 68 | TMC ‘extruder’ reports error |
| 69 | Move queue overflow |
| 70 | Missed scheduling of next digital out event |
| 71 | Unable to write tmc spi ‘stepper_x’ register |
| 72 | Unable to write tmc spi ‘stepper_y’ register |
| 73 | Exception in Hotend_fan |
Prompt codes
The line numbers below are from 1.4.7. {name} and {axis} are filled in at runtime, which is how you get things like 101 x or 103 z.
| Code | Message | Source | Version |
|---|---|---|---|
101 {name} |
No trigger on name after full movement | extras/homing.py:118 |
all |
| 102 | Probe triggered prior to movement | extras/homing.py:270 |
all |
103 {name} |
Endstop name still triggered after retract | extras/homing.py:220 |
all |
104 {axis} |
Must home axis first | kinematics/corexy.py:77 |
all |
105 {axis} |
Move out of range | kinematics/corexy.py:79 |
all |
| 106 | Extrude below minimum temp | kinematics/extruder.py:208 |
all |
| 107 | Extrude only move too long | kinematics/extruder.py:215 |
all |
| 108 | Move exceeds maximum extrusion | kinematics/extruder.py:230 |
all |
| 109 | five times (1.3.x) / ten times (1.4.x) | extras/z_offset_calibration.py:85 |
text differs |
| 110 | Exception in chamber_fan | extras/fan.py:90 |
1.4.1+ |
| 111 | Invalid lis2dw id | extras/lis2dw.py:107 |
all |
| 112 | LDC1612 I2C bus busy or timeout, check sensor-to-mainboard connection | extras/ldc1612.py:192 |
all |
| 113 | LDC1612 I2C bus error, internal or external interference | extras/ldc1612.py:195 |
all |
| 114 | Invalid ldc1612 id | extras/ldc1612.py:198 |
all |
| 115 | Invalid probe_eddy_current height | extras/probe_eddy_current.py:73 |
all |
| 116 | Failed calibration, incomplete sensor data | extras/probe_eddy_current.py:136 |
all |
| 117 | Failed calibration, frequency not increasing each step | extras/probe_eddy_current.py:181 |
all |
| 118 | Must calibrate probe_eddy_current first | extras/probe_eddy_current.py |
≤1.4.2 only |
| 119 | probe_eddy_current sensor outage | extras/probe_eddy_current.py:249 |
all |
| 120 | Unable to obtain probe_eddy_current sensor readings | extras/probe_eddy_current.py:301 |
all |
| 121 | probe_eddy_current sensor not in valid range | extras/probe_eddy_current.py:305 |
all |
| 122 | Communication timeout during homing | extras/probe_eddy_current.py:367 |
all |
| 123 | Eddy current sensor error | extras/probe_eddy_current.py:370 |
all |
| 124 | Must home before probe | extras/probe_pressure.py:142 |
stock 1.4.x can’t reach it |
| 125 | Exception in exhaust_fan | extras/fan.py:93 |
1.4.1+ |
A few useful distinctions
104 vs 105: same check, different failure. 104 means the axis isn’t homed. 105 means it is homed, but the requested move is outside its limits.
112 vs 113: both are I²C faults on the eddy sensor and both occur after the read has already been retried. 112 is the busy/timeout path, which points more strongly at the physical connection. 113 is the other bus-error path. If communication succeeds but the returned ID is invalid, you get 114.
118: on ≤1.4.2, an uncalibrated eddy sensor produces hard error 118. By 1.4.6, the same condition is only an advisory message with no tip code.
Check your own printer
cd ~/klipper
grep -rn "Tip code" klippy/ --include='*.py'
sed -n '214,217p' klippy/klippy.py
Sovol’s recovery image on the wiki is 1.3.7, and contains the same Klipper files, so the older code list can also be checked directly against Sovol’s published image.
@rpcyan Nice update, thank you for the in-depth analysis and clarifications.
Cheers,
-Mike

