Mai 072021

Da wollte ich gerade Feierabend machen und sehe, dass es eine neue stabile Firmware von Prusa gibt. Diese liegt derzeit in Version 3.10.0 zum Download bereit.

Und wieder einmal haben die Entwickler alles gegeben und so einen Changelog habe ich schon lange nicht mehr gesehen. Ich weiß gar nicht, ob man diesen hier komplett rein kopieren kann. Viel muss ich dazu nicht sagen, denn das Update ist einfach zu groß. Ein Lob an die Entwickler von meiner Seite!


  • New „Print from SD“ menu
  • „Time Remaining“ function improved
  • Community translations
  • Faster and quieter XYZ calibration
  • PVB preheat preset
  • Satin sheet profiles
  • G-code „M204 T“ implemented
  • Optimizations for the MK3 filament sensor
  • DEDGE support enabled for TMC2130
  • Improved filament troubleshooting
  • Support for 0.8mm nozzles
  • Support for a GD external FLASH chip
  • Optimizations for print hosts (e.g. Octoprint)
  • Optimized code size and RAM usage
  • Scaling extruder motor current based on speed
  • File listing adjusted for remote printing software
  • Host Long File Name (LFN) improvements
  • Z offset during M600 reverted
  • Factory reset menu extended
  • G-code documentation updated
  • Translations updated and checked
  • Reservation in the EEPROM for job ID tracking
  • Bug Fixes

This is the final release of firmware 3.10.0, which introduces improved functionality and several bug fixes. These release notes include information provided in the previous releases RC1 and RC2.

Before we describe all the new features, improvements and changes, we would like to thank the entire Prusa community members for their feedback – especially all active members who helped us test and debug this firmware release. Your input is very much appreciated!

This release required:

  • 4500+ printing hours during our in-house testing
  • 867 commits to the source code
  • 80 pull requests
  • 11 contributors (5 of them external)

New “Print from SD” menu

The „Print from SD“ menu was rewritten entirely. It is much more responsive when many files need to be displayed. This was accomplished by caching the file positions in memory during sorting. The menu isn’t blocking anymore, so G-code commands can still be processed while the filename is scrolling on the screen. This should improve host software functionality and compatibility.

When the „FlashAir“ mode is enabled (for SD cards with Wi-Fi) in the settings menu, a new menu button appears above the files and folders. It causes the menu to sort all items in the current directory again. This is useful when a file uploaded to the FlashAir card doesn’t appear on the uppermost line – the user doesn’t have to reset the printer or disconnect and reconnect the card.

Sorting is improved compared to the previous firmware releases. In general, Alphabetical sorting is now 10-15 % faster. Sorting of the files by time-stamp is now almost 2-4x faster.

„Time Remaining“ function improved

Until now, the firmware was only able to display how much time remains until the print is finished. There were multiple suggestions from the community on further improvements. Starting this release, the developers have implemented the first stage. However, to make the function work correctly, the PrusaSlicer dev team also needs to publish a new release because the G-code instructions must be updated.

Once both firmware and PrusaSlicer are updated, the „remaining time“ will work the following way. The printer will switch every 5 seconds between „remaining-printing-time“ and „time-to-next-color-change.“ Therefore the user will be informed in advance when the next filament change is expected.

G-code M73 has been extended with two parameters: C (for normal mode) and D (for stealth mode). Until now, the PrusaSlicer produced pairs of lines in the form of (example):

M73 P15 R30

Once this feature is fully implemented, the code will look as follows:

M73 P15 R30 C15 

This means a color change is planned in 15 minutes in normal mode. In case you would like to try this feature now, you can edit the G-code manually using the code mentioned above. Adjust the parameter „C“ according to your model’s requirements.

Also, if the printer receives G-code “M73 C0”, it disables switching between “Time to finish” and “Time to color change”. However, this caused an issue during the last minute before the color change, when the printer stopped switching between these two values completely.

To avoid this scenario, the firmware was further adjusted. It is advised for the slicer software to use a floating-point value for the last minute before the color change (e.g. M73 C0.1) which is technically greater than zero and enables the function to work correctly.

Community translation

Thanks to the modifications to the part of the system responsible for storing the language dictionaries on the printer (XFLASH), the firmware can now extend the library of the official languages by loading new translations made by the community.

Our first addition is Dutch, which is fully translated thanks to @3d-gussner and @vintagepc. To select this language and other new translations in the future, please head to the LCD menu -> Settings -> Select language -> Community made. In this release, the only option is „Nederlands.“

Community made

We welcome everyone to join us and localize the printer to their native language. In case you would like to translate and maintain the translations, contact us at We appreciate community members, who already signed up and we will contact them shortly with instructions.

Faster and quieter XYZ calibration

As noted in the previous release notes, the algorithm behind the XYZ calibration was almost completely rewritten, but developers are still looking for improvements. This release brings a bit faster, more precise, and also quieter calibration. The algorithm has both improved acceleration handling and a more robust scan (circle search).

Another improvement to the XYZ calibration is the skew analysis. Previously, the user was informed on the screen about the measured skew. Starting with this firmware release, the calibration values can also be accessed over the serial line for advanced diagnostics if anything goes wrong.

During extensive internal testing of the XYZ calibration, it was discovered that in certain rare scenarios the data provided by the sensor are not handled correctly. The developers have improved the algorithm and if this scenario happens, the scan of the recent calibration points is automatically repeated.

PVB preheat preset

In the preheat preset menu a new entry for PVB filament has been added, with temperatures 215 °C / 75 °C. To learn more about PVB material, visit the blog article.


Satin sheet profiles

The developers have modified the default sheet profile list. It takes effect on new printers delivered with firmware 3.10.0, or after the Sheet profile reset and Factory reset with “All data” is executed on this firmware release or later.

Two new sheet names (Satin 1 and Satin 2) were introduced and “Custom 3” and “Custom 4” have been removed. As there are only 8 sheet profiles, only “Custom 1” and “Custom 2” remain at the end of the list. It is important to note that all profiles have the same default settings and the only difference is in the name.

The new default sheet profile list is as follows:
Satin 1
Satin 2

You can edit the default names of the sheets via LCD Menu -> Settings -> HW Setup -> Steel Sheets -> [sheet name] -> Rename.

Kudos to @awenelo for this pull request. Fixes enhancement request #3051.

G-code „M204 T“ implemented

Another extension of the G-code support is an implementation of „M204 T“, which enables separate acceleration control of travel moves (now separated from the print moves). With this change, the syntax and behavior of M204 are now identical to Marlin 2.

A separate travel acceleration setting allows reducing the number of instructions required while printing. Resetting the acceleration just for travel moves is no longer required and can be done a single time during the print.

M204 has two forms:

  • the legacy format:
M204 S[print-acc] T[retract-acc]
  • the newer format:
M204 P[print-acc] R[retract-acc] T[travel-acc]

The distinction is made based on the presence of the P parameter. If P is included in the G-code, the new format is used. To keep backward compatibility, the „M204 S[acc]“ will set both print and travel acceleration, which is identical in behavior to existing firmware versions. M500 and M503 will now also report settings using the „new format.“

For more information, see the PR #2838

Optimizations for the MK3 filament sensor

The PAT9125 on the MK3 is attached to the hardware SDA/SCL pins, however, it was using a software two-wire interface (TWI) implementation.

The code now includes the PAT9125_I2C configuration option (enabled by default) to use the hardware TWI module in 400kHz fast mode instead. The change saves a few bytes in all variants while also improving the performance of optical filament sensor checks in the MK3.

For more information, see the PR #2814

DEDGE support enabled for TMC2130

The Trinamic driver TMC2130 supports Double Edge stepping (DEDGE) where both the rising and falling edge of the step pin count as a step instead of requiring a full cycle.

Using DEDGE is beneficial – it removes one extra toggle for each step pulse (plus a delay, in some circumstances), saving a few µs in hot code paths while stepping.

This release introduces 2 macros to step: STEP_NC_HI and STEP_NC_LO. In legacy mode, both perform as their name implies. In DEDGE mode instead, STEP_NC_HI inverts the line, while STEP_NC_LO becomes a no-op. Both modes are still fully supported, but DEDGE is now enabled by default in all supported variants. The macros are specialized for each axis and still respect INVERT_?_AXIS as defined in the variant file.

Additionally, the firmware introduces a few constant definitions for the delays required by the TMC2130 and uses them when appropriate instead of hard-coding delays:

  • step pauses (2µs minimum)
  • direction changes (100µs minimum)

Existing code that was manipulating the pins directly has been changed to use either the macros or the helper functions defined in tmc2130.h. We also fixed the behavior of TMC2130_INTPOL_* (which was previously ignored) in the variant files.

Note that this feature will only be present on MK3, MK3S and MK3S+ printers.

For more information see the PR #2789

Improved filament troubleshooting

When using the Settings->Move->Extruder menu the filament sensor is now temporarily ignored.

Thanks to this change, it is now possible to use the Move menu to control the extruder while trying to perform a manual filament swap, (e.g. when trying to clear a filament clog or when untangling a stuck flexible filament). There is no need to use the filament-change procedure, which was sometimes used by the users instead to fix the issue.

For more information, see the PR #1758

Support for 0.8mm nozzles

A new 0.8mm nozzle preset has been added to the firmware in the “HW setup” section. The user can set the printer to verify whether the G-code was sliced correctly for the selected nozzle diameter. Currently available sizes are 0.25, 0.4, 0.6 and 0.8 mm.

Support for a GD external FLASH chip

As mentioned in the previous firmware releases, the Covid-19 virus is negatively impacting worldwide supplies, and to be able to ship the printers continuously without any significant delay, we have started to look for alternative verified suppliers of the most critical parts.

In this release, we are extending system support for external FLASH chip GD25Q20CEIGR from company GigaDevice to ensure our production of Einsy boards remains unrestricted. For the user, there is no impact on the functionality of the printer, everything remains the same.

Optimizations for print hosts (e.g. Octoprint)

To improve the experience while printing using a remote host, there are several changes and optimizations in this release.

G-code M155 support

The firmware introduces support for an M155 G-code (Automatically send temperatures) which creates the same output as M105 (Get Extruder Temperature), but it provides it automatically without the need to periodically receive M105 G-code from Octoprint or other serial devices.

Added G-code M123 to show fan speed tacho and PWM values

Extended Capabilities in G-code M115
Added parameter C to G-code M155 to de-/activate auto report output using a bitmask

SD card status send automatically

Previously the firmware didn’t always properly report the current SD card status over the serial line. This is now fixed and the firmware reports three statuses: Insert, Eject and Error.

LCD status over UART

When the LCD status changes, the printer will send an „LCD status changed“ message to the serial line.

Add printer sleep information to the M115

Extended printer status information by reporting „Print paused“ on the serial line as a response to an M115 G-code.

Serial number in EEPROM

It was impossible to retrieve the serial number from the 32u2 IC when the USB cable was unplugged. With this fix, the serial number is cached to EEPROM at startup to have it available at all times even if the USB is not powered. This should also allow a connected RPi to be able to retrieve it.

Printer state in INFO string

Extending printer status information by „Print paused“ in serial line as a response for received M115 G-code.

IP address in the Support menu

Previously, when an IP address was assigned to the host/printer, it was displayed on the status screen. However, it was often rewritten by other status information from the system seconds later. In this release, the IP address will be also displayed in the LCD menu -> Support Menu. In case the FlashAir SD card is used, both IP addresses will be displayed.

The host must send it to the printer in the following format:
M552 P192.168.1.14
Note that the IP address is used as an example – yours might be different. The printer remembers the IP address until the restart.

Pause/Resume functions improved

Until this release, the host and the printer weren’t always correctly synced while a Print/Pause/Resume/Stop was applied either in the host interface or directly on the printer using the knob. Now, the user can control the printer from both places without the risk of a print failure. The printer and the host are actively communicating and exchanging information.

Examples of the shared information:

  • print: // action:pause
  • print: // action:resume

Support for G-codes with thumbnails

There have been significant improvements to how fast G-code files are processed (almost 10x increase) when reading from the SD card, specifically when processing comment lines. This allows for a fast skipping of large comment blocks (especially PNG thumbnails) throughout the file.

This has resulted in several improvements:

  • Sliced G-codes for 8bit printers can now contain thumbnails
  • The file check right before the start of an SD print is much faster
  • More of the (limited) CPU power is now available for other tasks like stepping the motors, linear advance and other core runtime features

The firmware is now able to skip through commented lines at speeds reaching 170 KB/s (the raw read speed of the SD card in SPI mode has a maximum of approximately 250 KB/s). The average PNG thumbnail is less than 100 kB, so skipping over this should take less than a second.

Of course, it is possible to generate many big thumbnails in the G-code. In such a situation, starting the print will take several seconds (based on the size of comment lines you put in). However, it will not crash anymore.

Existing Octoprint plugins which extract thumbnails from the G-code should still work, as there were no changes to the G-code format.

M601/M602 confirmation statuses fixed

Fixed missing “Ok” in M601 and double “Ok” in M602 on the serial line.

Optimized code size and RAM usage

By removing string literals from RAM, the memory usage was decreased below 6 KB. As a result, firmware 3.10.0 can now perform better under certain scenarios.

A lot of old code that was related to serial output or LCD rendering was improved. There were many cases where PROGMEM wasn’t used or string literals were used for a single character. Some locations were updated to use the appropriate function for generating many spaces on the LCD, as opposed to saving a string consisting only of spaces to PROGMEM.

The developers have also refactored some of the serial messages to use fewer function calls (resulting in reduced flash usage). Similarly, some of them were packed to a single printf_P call.

Scaling extruder motor current based on speed

The developers have discovered that using StealthChop without the “current feedback” feature of the TMC2130 has a positive effect on the extruder motor temperature. Multiple tests on our farm have shown that the temperature can be lowered by up to 10° C.

WARNING: This feature was tested only for the motors provided by Prusa Research. We cannot guarantee that this current amplification can be applied to other 3rd party motors as they might get damaged due to a current spike. For this very reason, the feature is disabled for all printers and has to be manually enabled at the user’s risk.

To enable this feature, enter the experimental menu. Go to LCD menu -> Settings -> HW Setup, then scroll to any menu item and hold the knob for 2-3 seconds. After a “click” sound, the display will flash once and the “experimental menu” will appear as the last item in the list.

File listing adjusted for remote printing software

The file listing provided by the M20 G-code was adjusted to comply with the needs of the remote printing software like OctoPrint.

Examples of the listing when using plain G-code M20, or M20 with the parameter “L”:

Begin file list
TEST1.GCO 1234
End file list

M20 L:

Begin file list
DIR_ENTER: /TESTFO~1/ "test folder"
LFNFIL~1.GCO 1234 "LFN file.gcode"
End file list

For Prusa Connect, the firmware was extended by a “T” parameter, which lists timestamps of the files. Both “L” and “T” parameters can be also used at the same time. The timestamp is a combination of both the date and time into a single integer ((date << 16) | time) and printed as a hex value. More information about the design is available at link1link2

Examples of the listing, while using single parameter “T” and combination of “L” and “T”:
M20 L T:

Begin file list
TEST1.GCO 1234 0x52936b00 "TEST1.GCO"
DIR_ENTER: /TESTFO~1/ "test folder"
LFNFIL~1.GCO 1234 0x52936b08 "LFN file.gcode"
End file list

M20 T:

Begin file list
TEST1.GCO 1234 0x52936b00
LFNFIL~1.GCO 1234 0x52936b08
End file list 

Host Long File Name (LFN) improvements

Under the hood, the SD FAT implementation in the firmware only uses 8.3 DOS filenames. This is fine when they’re internal to the firmware, but this has the side effect of requiring Host software to work with 8.3 filenames (SFN) exclusively. To address this limitation, a few changes to existing G-codes are proposed. If these G-codes are used correctly, the Host software can build the full file tree with both SFN and LFN, while also knowing how to start an SD print with M23 (which still requires SFN).
The affected G-code commands are M20 and M27. More info about what was changed can be found in these two pull-requests:

Z offset during M600 reverted

This change restores the minimum extruder height for filament purge during M600 from the current value of 50 mm back to 27 mm used in the previous release FW 3.9.3 for the convenience of the user.

Factory reset menu extended

The factory reset menu is extended in this release with a new “Service prep” option, which was requested by the Prusa Service department. Just before a repaired printer is sent back to the customer, this option is activated. The printer is then ready to guide the user through the “after-service” unpacking procedure.

This procedure is similar to another option from the menu called “Shipping prep”. The only difference is that “Service prep” does not clear the print statistics. The „All data“ parameter was moved into the last parameter position (after the Service prep parameter).

G-code documentation updated

This update brings updates to several G-codes (M20, M73, M123 and M155), the documentation was updated accordingly.

Translations updated and checked

All language versions of the firmware were updated and verified using new scripts, which check for the proper text wrapping according to the size of the LCD screen. As a result, the text readability is improved.

Reservation in the EEPROM for job ID tracking

For the host software, there is now a reserved space in the EEPROM to track/identify the print job. Even if the SD card or Raspberry Pi becomes unresponsive, the job ID will prevail. The 4-bytes variable in EEPROM is named „EEVAR_HOST_JOBID“. Host software can manipulate the EEPROM variable via D3 commands.

Bug Fixes

Incorrect G-code reading from a buffer

There was a bug in the new G-code reading code, which could stop the print in progress. In some scenarios, the system would insert a new line ‚\n‘ into the current cached block of the G-code file and change the G-code line syntax. Kudos to @lhecker for reporting the issue and providing a good test case (fixes issue #3077).

M120 and M121 disabled

From now on, G-codes M120 and M121 have been disabled as they do not function correctly and cause issues when used in the G-code file. If necessary, advanced users can enable them in the FW code and recompile.

Crash detection during MBL

Normally, if prior to Mesh Bed Leveling (MBL) a crash on the Y-axis is detected, the MBL is repeated again and print coordinates are verified, then a purge line is printed. In some scenarios starting firmware 3.9.0 (previous releases are not affected), the purge line was incorrectly placed in the center of the sheet, now this is fixed and the purge line is correctly placed in the front-left position.

M0/M1 Stop/Halt not displaying text/waiting for input fixed

Fixes M0 and M1 commands:

  • G-code M1 must have a string, while in M0 it is optional
  • G-codes M0/M1 were moved to the beginning of the parser to allow reading “M1” first instead of M1nn.

The parser would not be able to „find“ M1nn command if the query was “M1 “ instead of “M1” (space behind) to be able to „stop/halt“ without sending a string and displaying the default message.

  • Use G-code M0 as there are no M0nn G-codes the parser can identify M0 without additional space needed as in M1
  • M0/M1 with parameters P or S will NOT show any text as mentioned in #2055 (comment)

In Octoprint, M0 or M1 should not be in „Pausing commands“ as these are NOT pause commands – they stop/halt/sleep the printer. Addressing few requests from #2055. Thanks to @vojtech-pavlik and his PR #1900, which we merged with a few improvements.

It is important to note that G-code M0/M1 stops/halts the printer! If you need a pause, please use M601.

Sensor info screen blocking the function of filament IR sensor fixed

Now the function of the filament sensor is not blocked during print if in Support->Sensor info screen is displayed. If the printer is idle the filament sensor actions are disabled while in the ‘Support->Sensor info’ menu. This allows the user to troubleshoot this sensor (broken wire, etc).
Fixes issue #1971

Move Z up before XYZ calibration

The X-axis is now raised up prior to the XYZ calibration to prevent scratching the bed, sheet, and nozzle.

Firmware retract (G10/G11) fixed

When using firmware retract (as controlled by M207/M208), G10 would previously save an incorrect offset, resulting in an incorrect “unretract” move on the subsequent G11. The offset is now saved correctly, fixing the behavior of G10/G11.

For more information, see PR #2572

Babystep insertion fixed

This functionality prevents the user from entering Live Z (through long-press or via the menu) while performing mesh bed leveling, homing, or performing individual Z probes via G30. These actions interfere with each other and can result in an incorrect mesh or Z offset.

The firmware now restricts this by setting/checking for the mesh_bed_leveling/homing flag when relevant. The code around Babystep insertion was also cleaned up (notably, the alternative to BABYSTEP_LOADZ_BY_PLANNER was broken and has been removed).

For more information, see PR #3006

Opening file causing wrong serial output fixed

Opening a file from the LCD menu would open the file twice. This behavior is normal. However, the first time the file was opened, the wrong filename was displayed in the serial output, possibly confusing the host software. Now, this bug is fixed.

SD card (re)print bug in Octoprint fixed

When the user started a Print From SD Card from Octoprint in the RC1 or RC2 firmware release, the print finished successfully, but it would immediately start again. This would result in crashes and homing failures due to printed material still being present on the heatbed. This issue did not occur on the previous stable release 3.9.3, and has been corrected in this final release.

Fixes issue #3102

Kommentar verfassen