Mrz 192021

Da nimmt man sich andere Projekte vor die bald entstehen und schon übersieht man, dass Prusa gestern eine neue Release Candidate Version raus gebracht hat. Wie immer ist dieses eine Vorab Version, so dass in naher Zukunft mit einem endgültigen Release gerechnet werden kann.

Und die Entwickler von Prusa wären nicht Prusa, wenn diese nicht wieder eine Menge Zeilen geschrieben hätten. Daher wie in gewohnter Marnier der Changelog zur aktuellen Version:


  • New „Print from SD“ menu
  • „Time Remaining“ function improved
  • Community translations
  • Faster and quieter XYZ calibration
  • PVB preheat preset
  • G-code „M204 T“ implemented
  • Optimizations for the MK3 filament sensor
  • DEDGE support enabled for TMC2130
  • Improved filament troubleshooting
  • Support for 0.8mm nozzles
  • Optimizations for print hosts (e.g. Octoprint)
  • Optimized code size and RAM usage
  • Bug fixes

This is the first release candidate of the upcoming firmware 3.10.0 with multiple optimizations to the code.

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. Note that this feature is still a „work in progress,“ and there might be some changes before the final release. 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.

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

Along with the community translations, the officially supported languages were updated.

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.

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.


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.

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.

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:

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.

Bug fixes

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

Kommentar verfassen