[Sticky] 3.10.0 Firmware for MK3, MK3S, MK3S+
- 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.
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."
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 [email protected]. 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:
You can edit the default names of the sheets via LCD Menu -> Settings -> HW Setup -> Steel Sheets -> [sheet name] -> Rename.
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:
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 LFNFIL~1.GCO 1234 End file list
Begin file list TEST1.GCO 1234 "TEST1.GCO" DIR_ENTER: /TESTFO~1/ "test folder" DIR_EXIT 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 link1, link2
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" DIR_EXIT LFNFIL~1.GCO 1234 0x52936b08 "LFN file.gcode" End file list
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.
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
Please report any bug here:
How to flash the firmware:
As always, we wish you happy printing!
Did anyone notice the extruder stepping getting noticeably louder in stealth mode after activating "Scaling extruder motor current based on speed". Might be my ears or a bad example I picked, so I'm just checking.
What is the "official" EEPROM write spec? How many times can you write the job variable block/bytes before you can expect the chip to fail?
I upgraded to 3.10.0 recently and now I'm missing the top line of my display. Is that by design or did I goof something? Install claims to have proceeded correctly. I'm actually printing something now, so I guess it's okay?
Luckily - I haven't installed 3.10 yet ... lol. It can't be intentional ... the top line generally has useful information. And, if it really were a new "feature" there will be more posts about it coming to your favorite forum real soon.
I just did the upgrade ... Mk3 only - so far the top line (showing nozzle setpoint and temp) is still there ... but my print is only in preheating phase.
I will come back and add a new post if it changes to a blank - because I'll be at the computer posting bug report over at GitHub.
I've powered off/on the printer a couple of times with no change. I'm guessing I just need to reinstall if possible and see what happens. FYI, this is 3.10.0-4481 version. Used the MK3S/MK3S+ firmware.
I'll wait to reflash until someone says it's a good idea.
Thanks for chiming in on this, guys.
Mid print, I see four lines.
Not having the nozzle temp showing is a problem. I would reset (power cycle), then reflash the printer. If the top line still isn't showing, I'd ensure the two LCD cables are firmly inserted at both ends. If the line still isn't showing, then I'd do a full and complete printer firmware reset (reset all - so its back at a factory new state [read the manuals on how to do this correctly - it is easy to do incorrectly]). A full reset will require a complete 'as if new' setup and calibration.
Heck, I might try flashing an older version of firmware before I did the full reset part.
ps: why a full and complete factory reset? If the firmware flash corrupted EEPROM, and it happens, there is no way to know and no way to fix it except by a full data reset.
I've gone as far as writing down all of the settings I've entered via menus on paper so that recovery is a lot easier.
Back to my question from above... It's not a problem with my ears. I checked with the devs and yes, with the "E Cool" feature there is a "clicking" when the E-motor does rapid speed changes due to retractions etc.
I went ahead and reflashed and the display came back. I'd actually printed 2-3 jobs before reflashing without issue, so it must've just been sunspot activity or something that flipped a bit. Everything looks kosher now.
Thanks for helping with this! This community is awesome!