Firmware 3.9.0-FINAL for Original Prusa i3 MK3S & MK3  

Page 1 / 3
Jakub Dolezal

Hi guys,

this a final release of the firmware version 3.9.0. This version was thoroughly tested and is dedicated to all Prusa owners.

  • Linear Advance 1.5
  • Automatic E-jerk conversion
  • Screen brightness adjustment
  • Filament sensor recognition
  • New G-code files sorting
  • Toggle and Translations
  • MMU2S selector blade activated
  • Show current Z offset in reset dialog before first layer calibration
  • Unknown Z coordinate displayed
  • Safer moves in Z-axis, if the position is unknown
  • Heating disabled during MBL
  • MINTEMP value lowered
  • MINTEMP error differentiated
  • Laser filament sensor sensitivity fix
  • Flickering “Statistics” screen fixed
  • Tone timer re-enabled
  • Nozzle crash protection improved
  • MMU runout for unknown filament fixed
  • Belt test improvements
  • Decoupling XYZ relative and E relative
  • Other changes
  • Fixed bugs
  • GitHub templates

This is the final release of the firmware 3.9.0, a direct successor to the 3.8.1. Introducing new features, improved functionality, and bug fixes. These release notes are a summary of the previous releases BETARC1RC3.

This release includes:

  • 409 commits to the code
  • 108 pull requests
  • 66 closed issues
  • cooperation of 14 developers

Special thanks to our community and the most active users @leptun@wavexx@3d-gussner@nikkolade@vintagepc @smurfix for discovering/reporting various issues and helping with fixing and testing them. Special thanks to @awenelo and @carlin57 for helping with the French translation. We really appreciate your cooperation.

Detailed description

Linear Advance 1.5

One of the biggest contributions from the community is the support for Linear Advance 1.5, which is also backward compatible with the previous version. In case you have a G-code with Linear Advance 1.0, the printer will analyze the code and convert the values automatically.


This graph is showing the function used for converting LA 1.0 and 1.5


Linear Advance 1.5 (LA15) has been introduced in the 3.9.0-BETA release and it was further improved in the RC1 and RC3 releases. One of the major fixes is addressing issue #2543 reported by user @nikkolade. The release 3.9.0-RC1 was causing print issues (mainly an inconsistency in quality) compared to the stable 3.8.1.

The cause of this issue was in the implementation of the linear advance function. And while fixing it, the developers have discovered that it is partly present in the latest stable release 3.8.1 as well. Further research revealed that it is also responsible for rare scenarios, in which the material was missing at the start of a path of an object's support, which negatively affected the support quality.

Another problem was with the acceleration while using a factor K=15. With this value, the printing speeds were lowered significantly because after the conversion to the LA15, the K factor value was close to zero (3E-9) and the firmware responded incorrectly.

Last addition to the Linear Advance 1.5 and PrusaSlicer profiles. To keep the profiles compatible with both FW 3.9.x+ and older firmware versions, this release accepts a G-code where the K factors are specified in pairs. The old firmware 3.8.1 picks up the last M900 Kxx (this will remain as the old Linear Advance 1.0 K factor value), while the new firmware 3.9.0 has a smarter algorithm. When the new FW encounters M900 Kxx with xx < 10 it automatically switches to Linear Advance 1.5 mode, accepting only xx < 10 from now on.

However, if a custom filament profile is used and the user wants to update these to be compatible with new and old firmware, it is important that the M900 Kx.xx LA1.5 value MUST be placed BEFORE the M900 Kyy LA1.0 value.

Otherwise, the FW3.9.0+ firmware will switch to LA1.0 conversion mode and ignore the 2nd M900 Kx.xx value as it K is <10 and so invalid in this mode.

Example of K factor in the G-code:

M900 K0.12
M900 K45

Firmware 3.8.1 behavior:
The firmware will pick up the second (last) value (K45)
Firmware 3.9.0 behavior:
The firmware will use the first (LA15) value K0.12

To make this compatible with MMU G-codes, which may set different K factors for different materials, M900 K0 resets the Linear Advance mode.

A new M900 Kxx with either new or old values may be accepted then and the firmware will act accordingly. In general, the M900 K0 resets the LA and it is recommended to have it at the end of every G-code.

A special note regarding the calibration prints created under LA 1.0. The automatic conversion to the LA 1.5 might not bring the same print results compared to the previous version. This is because the automatically converted K factors (LA 1.0 to LA 1.5) can differ from the ideal K factors for LA 1.5. It is highly recommended to reslice the calibration object having the LA 1.5 values already in the G-code.

In general, it is recommended that the user switches to the new profiles whenever possible. Even some community profiles are already LA 1.5 compatible and will produce better print results.

For custom profiles, starting this firmware there are three options:

  1. Use the new LA15 K values to achieve the best print results
  2. Use the old LA10 K values, which will be auto-converted to LA15
  3. Use both K values to create profile compatible with the old and new firmware

All the issues mentioned above are addressed in this release, the quality of the supports is now improved and the conversion function has been further tweaked to achieve optimal print results.

Automatic E-jerk conversion

With the introduction of Linear Advance 1.5 to the firmware, it was also necessary to convert the values of the E-jerk, originally used for Linear Advance 1.0. Based on internal testing, it was decided to set the conversion of the E-jerk parameter from 1.5 to 4.5. If there is a different E-jerk value in the G-code file, the printer uses the function shown in the graph below to convert the value correctly.


Old profiles with very low e-jerk might still result in a very slow print. Resetting the E-jerk to the standard values in the "Print Settings, Machine limits" menu will fix such an issue.

Screen brightness adjustment (MK3/MK3S)

Starting this release, certain printer models are capable of adjusting the brightness of the screen, which is convenient if the printer is used in a darker environment. The user can adjust the following parameters:


Screen Backlight ON



Screen Backlight OFF


In the menu head to Settings -> Brightness

This feature is available for printers manufactured in the second half of 2019. For older printers, you have to replace the LCD screen and also in some cases the Einsy board (you must have Einsy 1.1a or newer). Selected parts can be obtained in the official e-shop, spare parts section.

Filament sensor recognition (MK3S)

Over the lifetime of the MK3 and MK3S, we have introduced several iterations of the sensor responsible for filament checks. The MK3 was using a laser sensor, which was later replaced with another generation in the MK3S, which uses a steel ball and a lever-arm to trigger the sensor. In the latest iteration of the sensor with the red PCB introduced last year (2019), we have added one feature, which will be activated starting this release.

The printer will be able to recognize that the connection with the sensor was interrupted (e.g. broken wire or disconnected cable) and take appropriate action based on the settings in the Menu > Settings > HW setup > FS action

  1. Pause - pause the print, show an onscreen message and wait for the user
  2. Continue - ignore the issue and continue printing

To ensure correct operation, the printer needs to recognize the sensor first. As explained above, this will work only for the MK3S and only for the red PCB sensor, which is revision 0.4.

Right now there are two options for the MK3S:

  1. The printer is equipped with the unsupported revision 0.3 or older
  2. The printer is equipped with the supported revision 0.4 or newer*
    *Currently, there are no plans for another revision of the filament sensor.

The process is fully automatic and the printer enables the new feature for the revision 0.4 only when all of the following conditions are met:

  1. The printer is in an idle state (e.g. not printing, not heating up, …)
  2. Only if the InfoScreen (home screen) is displayed
  3. The sensor state is either “Unknown” or “Older version”
  4. In the settings menu, the Filament sensor is set to “ON”
  5. The correct voltages were measured (conditions: no filament: 4.2-4.6 V, inserted filament: 0.3-0.5 V)

As soon as the new sensor is detected and the conditions are met, the printer will display the following message in the lowest row of the LCD screen: “FS v0.4 or newer”

In the Support > Voltages menu, a new value will now be displayed regardless of the version of the sensor: “IR: x.xxV”. This value represents the actual voltage measured on the pin of the filament sensor.

In the Support > Fil. sensor menu, information about the revision of the sensor will be displayed. Currently, three possible states are defined:

  1. 0.3 or older
  2. 0.4 or newer
  3. unknown status

There is a new submenu in Settings > HW settings > Fsensor Detection. Where the sensor revision recognition can be triggered manually for the MK3S printer, the MK3S with the MMU2S unit must run the Selftest.

The recognition process is as follows:


Note that if the procedure fails at any point, it stops completely and has to be started again by the user.

The measured values of the voltages during the process can be read from the serial connection:

  • “Measured filament sensor high level: xxx V”
  • “Measured filament sensor low level: xxx V”

In a very rare scenario, in which the user decides to downgrade the 0.4 sensor to an older revision, it is necessary to run the procedure manually, to inform the printer about the change.

A specific behavior is set after a factory reset is performed, which resets all the stored values including the filament sensor version. Upon the start there are two possible ways:

  1. The initial Wizard has been completed correctly. In this scenario, the filament sensor is checked and regardless of the version it is set "0.3 or older". If the printer has version 0.4 installed, it will be automatically changed later on as soon as the five conditions for starting the automatic detection explained above are met.

  2. The initial Wizard has been skipped. In this scenario, the printer is unable to make the initial check and therefore it stays in an "unknown state". The user can run the verification process by doing the Selftest from the menu, which will have the same results as finishing the initial Wizard. An alternative option for the MK3S without the MMU2S unit is to run the "Fsensor Detection" directly and fully complete the recognition.

Attention for those using a printer with a modified filament sensor (i.e. with a LED). Since we are unable to test every possible modification to the original hardware, please verify the behavior is correct. In case of any issues, this detection algorithm can be disabled in the source code.

New G-code files sorting

Until now, G-code files on the SD card were sorted based on the time when each file was created and the system was ignoring any modification to it. Another issue was discovered later on, while using only the “modification time” parameter for sorting the files.

If an old G-code file was copied to the SD card, it wasn't placed at the very top due to the sorting logic. This final release fixes all possible scenarios by checking both the “modification” and “creation time” parameters and selecting the most recent one.

Toggle and Translations

The code responsible for displaying the toggle menus was rewritten in order to enable faster switching and lower the requirements on the CPU. Toggle menus were previously hardcoded into the firmware, this is now changed to enable easier translations.

MMU2S selector blade activated

Part of the MMU2S unit is a selector equipped with a blade, which if needed will cut the tip of the filament unloaded from the extruder. Until now the cutting function wasn't enabled.

To start using this function, make sure you have:

  • Firmware 1.0.6 installed in the MMU2S unit
  • Firmware 3.9.0 installed in the MK3S/MK2.5S

The printed parts for the selector (mmu2-blade-holder and mmu2-selector-finda) were updated to provide a better grip of the blade and are available for download here.

Show current Z offset in reset dialog before first layer calibration

In the case of rerunning the First Layer Calibration, the printer first checks if the value of Live Adjust Z is stored in the EEPROM. Before the process is started, the user is asked to confirm, whether the calibration should start from the current value of the Live Adjust Z or reset this value to zero (factory defaults).

Unknown Z coordinate displayed

In a situation when the printer doesn't know the exact Z-axis position (e.g. after the power on) a question mark is displayed on the screen next to the Z coordinate.

There was also an issue with displaying the “?” instead of the correct Z-axis coordinate caused by the behavior of the black Delta PSU. This is now fixed.

Safer moves in Z-axis, if the position is unknown (MK3/MK3S) #1768

Additionally, in a situation when the printer doesn't know the exact Z-axis position (e.g. after the power on) a stall guard is activated to stop the movement immediately if the obstacle (heatbed) is detected.

Language dictionary size increased

The original design of the memory blocks in the external FLASH expected files smaller than 64 KB. However, while increasing the number of functions and respective text strings, the size of some language dictionaries required a bigger space allocation. After successfully refactoring this part of the code, this limit is no longer present.

Heating disabled during MBL

The Pulse-width modulation (PWM) of the heated bed created an electromagnetic field, which had a negative impact on the P.I.N.D.A. sensor during the mesh bed levelling (MBL) procedure. To increase the reliability of the measurements, heating is temporarily disabled when the sensor is above each of the measured points during the MBL.

MINTEMP value lowered (MK3/MK3S)

Based on the feedback from the community and internal testing, the minimal operational temperature was lowered from 15°C to 10°C (59°F to 50°F).

Note that for the MK2.5S and MK2.5 the lowest allowed temperature is still 15°C as the readings below this value are inconsistent.

MINTEMP error differentiated

Previously the firmware displayed a message “MINTEMP FIXED” after a successful recovery in an environment with low temperature. New firmware distinguishes between “MINTEMP HOTEND FIXED” and “MINTEMP BED FIXED”.

Laser filament sensor sensitivity fix (MK3)

The sensitivity of the laser filament sensor on older MK3 printers was improved to be more reliable and prevent false filament runout detections with problematic filaments, such as pink PLA or transparent green HG100. Advanced statistics are now available in the sensor menu of MK3 printers.

Flickering “Statistics” screen fixed

The screen displaying the statistics was flickering during the print due to an error in the code responsible for refreshing the screen. The error is now fixed.

Tone timer re-enabled

The function responsible for the tone playback was broken in the previous release. It is now fixed and available at timer4 (timer2 is used as a system_timer) both for Einsy (MK3S/MK3) and MiniRambo (MK2.5S/MK2.5).

Nozzle crash protection improved (MK3/MK3S)

Starting this release, the firmware has the StallGuard functionality for the Z-axis enabled also during the self-test procedure. If the P.I.N.D.A. sensor is set too high and the nozzle starts crashing into the heatbed, the StallGuard is activated and motion of the Z-axis immediately stopped to prevent any possible damage. A warning message “Bed leveling failed. The sensor didn't trigger. Debris on nozzle? Waiting for reset.” is then displayed on the screen.

Note, that this function is available only on the boards with the Trinamic drivers (MK3/MK3S). Older printers like MK2.5 and MK2.5S won't support it.

MMU runout for unknown filament fixed

This fix addresses the issue with the printer soft-resetting in case a filament runout is detected while the current filament is unknown. This can happen due to the following reasons:

  • User performed a load to the nozzle and an event caused a power cycle (power panic during MMU print)
  • User turned off the printer and continued printing with the same filament the next day

Since the currently loaded filament is unknown, the printer cannot reliably retract it and move the selector to the next one if the SpoolJoin function is enabled, nor can it be marked as fully depleted. After trying several automatic procedures, it was decided to trigger M600 in such scenarios and require the user's attention to verify the state of the filament.

This fixes issues #2464#1993#2301#2500, and kudos to user @vintagepc for his contribution!

Belt test improvements (MK3/MK3S)

The belt test feature is providing approximate values indicating, whether the belts are properly tensioned. There were some scenarios, in which the test didn't finish correctly.

This release fixes all of them, namely: #2472#2356#2484#968#2547 and again kudos to @vintagepc.

Also, until now the status was refreshed only after running the Selftest. Based on the feedback from the community it is now as a standalone test available at all times. To run it, go to the Menu->Support->Belt status ( #1060 #1937).

Decoupling XYZ relative and E relative

Until now the Prusa-Firmware was preventing the user from using relative XYZ motion (for Z-hop) at the same time with absolute extrusion. This behavior was fixed and also switched at the same time to be more inline with the Marlin 2.0 standard (changing the XYZ relativity also affects the extruder).

The users however reported that some calibration G-codes stopped working with the RC1 release. It turns out those G-codes needed the axis to be decoupled just like previously in Prusa-Firmware and not be directly inline with Marlin 2.0. The second change, which came with RC2, which decoupled the XYZ relativity from the extruder completely, eliminating both mentioned issues simultaneously.

Other changes

Sheet's name displayed on the status screen

#2146 #2093

The name of the currently selected steel sheet is now displayed on the home screen for a better overview (if two or more sheets are calibrated).

Enable print fan to speed up while “waiting for a cooldown” procedure


While waiting for the hotend to cool down, the printer activates the print fan in order to speed up the cooling phase.

M350 for all axes

The G-code M350 (micro-stepping) is now implemented for all axes, previously only for the extruder.

Bug fixes

Heater running and extruder not parked at print's end

In some scenarios at the end of the print, the heater was still running and the extruder wasn't parked at the correct location.

F.I.N.D.A. sensor always triggered

The F.I.N.D.A. sensor on some MMU2S units was always triggered, even if no filament was present.

Infinite Loop

G-code M601 was in specific scenarios causing an endless loop.

Fixed planner for Octoprint MMU2S power panic improved

Fixed planner for Octoprint MMU2S after a power panic, which caused incorrect reconnection to the printed object.

Filament runout

The filament runout for MMU2S doesn't work properly.

Stop print

Stop print during print with MMU2S causes a filament runout.

GitHub templates

We have improved the procedure while creating an issue on the GitHub, the page is now equipped with several templates to address all possible issues.

  • BUG

While starting a new issue please take your time, select and fill in the most appropriate one. It will speed up the entire process.


Supported printers:

  • Original Prusa i3 MK3S MMU2S
  • Original Prusa i3 MK3S
  • Original Prusa i3 MK3
  • Original Prusa i3 MK2.5S MMU2S
  • Original Prusa i3 MK2.5S
  • Original Prusa i3 MK2.5

Download link:

Note that MK3S, MK3, MK2.5S and MK2.5 are different printers! Each has its own firmware file!!!

Firmware flashing guide:

Please report any bug here:


As always, we wish you happy printing and look forward to your feedback!

This topic was modified 6 months ago 2 times by Jakub Dolezal
Assembly manuals / Knowledge Base
The guy behind Prusa assembly manuals......
Posted : 26/05/2020 7:52 am
markus.i2 liked
Eminent Member

Hi , 

I downloaded the current one from the main website .

Since then on the main lcd screen it has a "?" Next to the Z position .

Which i thought this was meant to clear.

Unfortunately i thought it was a update since my printer arrived recently , when i did not have this .


Posted : 26/05/2020 1:43 pm
Noble Member
Posted by: @kenatno10

Hi , 

I downloaded the current one from the main website .

Since then on the main lcd screen it has a "?" Next to the Z position .

Which i thought this was meant to clear.

Unfortunately i thought it was a update since my printer arrived recently , when i did not have this .


it will still always show that if Z is uncalibrated (e.g. you have not homed yet). It's meant to tell you the printer's displayed Z value may not reflect where the gantry actually is.

Posted : 26/05/2020 2:25 pm
Martin Stoufer
Estimable Member

That selector Blade URL for the new piece is invalid.

Posted : 27/05/2020 12:16 am
tg73 liked
New Member

I have a MK3 and have upgraded with the MK3 to MK3S upgrade kit. Before going forward with the new firmware I would like to verify that the MK3S version is the one I should use.


Posted : 28/05/2020 7:20 pm
Martin Stoufer
Estimable Member

Charles, yes. This is the one you should use. Do not use the Mk3S/MMU2s bundle. I believe there is MMU stuff linked into that hex binary that will not be good for your setup.

Posted : 28/05/2020 10:31 pm
New Member


Martin - thanks for the speedy reply!

Posted : 28/05/2020 10:34 pm
Active Member

I upgraded my firmware to 3.9.0 today, and now my printer is stuck in startup mode. Stats:

Prusa MK3

Windows 10

PrusaSlicer 2.2.0

Update file used: prusa3d_fw_MK3_3_9_0_3421.hex

I've searched the forum, but don't see anyone else with this problem with the MK3. Printer was working flawlessly yesterday, now I can't get it to work. This is from Pronterface:

echo: 3.9.0-3421
echo: Last Updated: May 18 2020 17:11:59 | Author: (none, default config)
Compiled: May 18 2020
echo: Free Memory: 1646 PlannerBufferBytes: 1792
echo:Hardcoded Default Settings Loaded
CrashDetect ENABLED!
Sending 0xFF
Error:volume.init failed
[ERROR] Error:volume.init failed

Sending 0xFF
Error:volume.init failed
[ERROR] Error:volume.init failed

Any help?

Posted : 29/05/2020 3:13 am
Active Member

The new firmware does NOT automatically heat up the hot end when doing filament changes (at least when paused mid-print), and has just resulted in ruining my entire hot end!


Posted : 29/05/2020 10:31 am
Active Member
Posted by: @martin-s61

Charles, yes. This is the one you should use. Do not use the Mk3S/MMU2s bundle. I believe there is MMU stuff linked into that hex binary that will not be good for your setup.

Why on earth isn't this stated on the download pages? If I 'upgraded' my MK3 to a MK3s, I would naturally assume it is now a MK3s!

Posted : 29/05/2020 10:34 am
Active Member

hello I have a problem with the installation of this firmware 3.90,

it installs, but I cannot change the language, which always remains in English, if I try to change the language it returns me to the menu of the choice of the language in a loop, and it exits only if I select the English language.

Posted : 29/05/2020 10:34 am
Trusted Member

Hi, just had a strange one, put beta version of 3.9 in and all was good.

came to print a new extruder door, i chose to use Prusa slicer instead of my usual Cura.

had also to put new update for the slicer which was 1.16 all good.

put the SD card in to the printer and it tells me i have got to put the 3.9 FW in!

could it be that the final release if different some how?

I will put the new 3.9 full release in,but have never seen this before, and i have updated at least 5 or 6 times.

is this something new?

any ideas, at least i can carry on printing

Posted : 29/05/2020 12:25 pm
Noble Member

I turned off the nag message with a simple change to the start-up gcode, thanks to a response here.

Posted : 29/05/2020 1:14 pm
Eminent Member

Hi , 

I have had to replace the filament tube after a jam , along with the nozzle.


I have reset all xyz , z settings and also done the home setting.

Checked the z and bed level with a spirit level after moving the printer around to remove the extruder assy.

Still get Z 10? for example on intial switching on of the printer.



Posted : 29/05/2020 2:15 pm
Trusted Member


Spent a hour on the forun looking how to get rid of the message but could not find it

You say you found it on here, can you give me a link please 



Posted : 29/05/2020 2:34 pm
Eminent Member

No , 

I sure that i read that the update was a cure for this , however since i foolishly flashed over the factory installed version (same number) , this has happened .

Posted : 29/05/2020 2:55 pm
Trusted Member



go to Settings -> HW Setup -> Checks -> Firmware


or make sure you have the latest config updates and the latest firmware


or modify the startup gcode for the printer

Posted : 29/05/2020 3:20 pm
Trusted Member


Ok thanks, but i just have put in the full and not the beta, it has stopped it

did not change any codes and used the same sd card and file.

The only thing i can think of is there must be a line of code in the FW that tells it which version it is.


may be you programmers out there can tell me if this is the case, for me that is way over my head


Posted : 29/05/2020 3:32 pm
Noble Member


Here's the direct link to the thread.

There are two solutions posted.  I did the first, edit the start-up gcode.

Posted : 29/05/2020 3:38 pm
Trusted Member


It's the highlighted line in the startup gcode pic posted above.  To disable it completely use the settings, also posted above.

Posted : 29/05/2020 3:38 pm
Page 1 / 3

Please Login or Register