# Error code list

**URL:** <https://forum.sovol3d.com/t/error-code-list/10210>\
**Category:** Sovol Zero\
**Tags:** homing, klipper, advice, firmware\
**Created:** [July 18, 2026, 9:05pm UTC](https://forum.sovol3d.com/t/error-code-list/10210 "2026-07-18T21:05:04Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Chriss](https://avatars.discourse-cdn.com/v4/letter/c/c37758/32.png) [@Chriss](https://forum.sovol3d.com/u/Chriss)\
**Post date:** [July 18, 2026, 9:05pm UTC](https://forum.sovol3d.com/t/error-code-list/10210/1 "2026-07-18T21:05:04Z")

</div>

Error code list that came with printer

 ![IMG_0830](https://canada1.discourse-cdn.com/flex030/uploads/sovolforum/original/2X/a/af9dee199c83e2bfe0fd460f1af0f984c200f8fd.jpeg)

---

<div class="post-metadata">

**Author:** ![Chriss](https://avatars.discourse-cdn.com/v4/letter/c/c37758/32.png) [@Chriss](https://forum.sovol3d.com/u/Chriss)\
**Post date:** [July 18, 2026, 9:06pm UTC](https://forum.sovol3d.com/t/error-code-list/10210/2 "2026-07-18T21:06:35Z")

</div>

Pic 2 not every one got this apparently I didn’t with mine

 ![IMG_0831](https://canada1.discourse-cdn.com/flex030/uploads/sovolforum/original/2X/f/ff7a5be8b41df2e26d63c1505a63406d3b3fcd0c.jpeg)

---

<div class="post-metadata">

**Author:** ![Lion](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.sovol3d.com/lion/32/5586_2.png) [@Lion](https://forum.sovol3d.com/u/Lion)\
**Post date:** [July 18, 2026, 9:53pm UTC](https://forum.sovol3d.com/t/error-code-list/10210/3 "2026-07-18T21:53:57Z")

</div>

Thanks, never seen it before.  
Do you think you can scan them & upload so users can download & print..??

---

<div class="post-metadata">

**Author:** ![MikeHides](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.sovol3d.com/mikehides/32/4372_2.png) [@MikeHides](https://forum.sovol3d.com/u/MikeHides)\
**Post date:** [July 18, 2026, 10:20pm UTC](https://forum.sovol3d.com/t/error-code-list/10210/4 "2026-07-18T22:20:41Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![rpcyan](https://avatars.discourse-cdn.com/v4/letter/r/34f0e0/32.png) [@rpcyan](https://forum.sovol3d.com/u/rpcyan)\
**Post date:** [August 15, 2026, 5:02pm UTC](https://forum.sovol3d.com/t/error-code-list/10210/5 "2026-08-15T17:02:39Z")

</div>

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

```bash
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.

---

<div class="post-metadata">

**Author:** ![MikeHides](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.sovol3d.com/mikehides/32/4372_2.png) [@MikeHides](https://forum.sovol3d.com/u/MikeHides)\
**Post date:** [August 15, 2026, 8:13pm UTC](https://forum.sovol3d.com/t/error-code-list/10210/6 "2026-08-15T20:13:30Z")

</div>

@rpcyan Nice update, thank you for the in-depth analysis and clarifications.

Cheers,  
-Mike
