# Setting Junction Deviation in firmware has no effect

I have built a 3D printer with Marlin bugfix-2.0.x forked from github.

I am attempting to set the default value for junction deviation so that I don't have to change it through the printer's screen/interface every time I power cycle the printer, but what I thought would set it properly isn't doing the trick.

My thought was that uncommenting this in Configuration_adv.h would work:

#define JUNCTION_DEVIATION_MM 0.02


I have tried setting this define inside of and outside of the default if block in which it appears, just to make sure the issue wasn't because I didn't have something else set, and I get the same behavior when this define statement is either protected or unprotected by an if

Also, the default if block is this:

#if ENABLED( JUNCTION_DEVIATION )
#define JUNCTION_DEVIATION_MM 0.02
#endif


Uncommenting #define JUNCTION_DEVIATION leaves me with a compiler error telling me that I don't need to do that, so I'm not seeing anything that I am supposed to enable to get it to use the JUNCTION_DEVIATION_MM setting. In other words, I can't actually enable "JUNCTION_DEVIATION" any more, so I HAVE to break the JUNCTION_DEVIATION_MM setting out of the if but it still has no effect.

After setting this parameter, when I power cycle the printer, the junction deviation is set to 0 (although one touch of the adjustment knob makes it jump to 0.010, so I think that what is displayed as "0" may actually mean "unset"), which is causing a significant stop/start jerk on every angle change until I manually set the junction deviation.

My current Configuration.h and Configuration_adv.h are taken from this Marlin fork.

In case it matters, I'm running this on an SKR V1.3 with TMC2208 drivers at 24V.

Any ideas what I'm missing? I'm sure it's something simple, I just haven't found it.

UPDATE: Still no solution after 10 days. Here is additional information from another forum where I posted this request:

Did you run M502 and M500 after updating your firmware?

I dug into this a little more, and I am either running into a bug, or I'm simply not understanding what I'm supposed to be seeing.

I send this command:

M205 J0.020

Then verify that junction deviation is set correctly (it is) Then this:

M500

And that responds with:

Settings Stored (616 bytes; crc 51371)

Then I send this:

M503

And the report for M205 is missing the setting I just confirmed to have changed and been working:

... M205 B20000.00 S0.00 T0.00 ...

And power cycling or resetting the controller leads to the same result: Junction Deviation is reset to 0.

Shouldn't I see "J0.020" in the M205 line immediately after changing the setting, and verifying that it works?

• After a few months of dealing with this, I have simplified the test cases, and I have come to believe that it's a bug in the SKR 1.3. I'm waiting for a new SKR 1.4 to arrive, and if the problem exists there as well, I'm submitting a bug report on github. Will update this question when that's done. Jan 3 '20 at 2:22
• There is a bug in the Marlin code/SKR board preventing storing any alterations after the firmware is loaded (to the SD card). There is a PR on Marlin that fixes it, but it has not been merged into Marlin yet.
– 0scar
Jan 3 '20 at 21:01
• @0scar It doesn't look like that pull request has been merged yet, but I merged the changes from the Marlin bugfix-2.0.x branch for the first time in about 1.5 months, and the problem has been resolved. Confirmed on an SKR V1.3 and an SKR V1.4 (the problem may not have ever existed on the latter). I'm not sure which commit did the trick. If you post an answer, I'll accept it as the solution. Thanks! Jan 14 '20 at 19:39

## 2 Answers

I've bought an SKR Pro V1.1 which is suffering from the same problem. It has actually to do with a shortcoming or design flaw (of the "HAL" or "Hardware Abstraction Layer" addressing of SPI devices) of Marlin and access to the SD card; I quote:

The problem: On board SD-Card on SKR-PRO 1.1 can't be used.

After the SD card has been inserted, the firmware binary is loaded into memory, and all access to the SD card is gone. The initial connection is by hardware design of the SKR boards.

Basically, there is a bug in the Marlin code/SKR boards preventing storing (to the SD card) any alterations after the firmware is loaded. There is a PR on Marlin that fixes it, but it has not been merged into Marlin yet.

There are 2 options,

1. Every change to the firmware has to be compiled and uploaded to the board by placing a hex (firmware.bin) on the SD card;
2. Compile a firmware version from the sources from the fore mentioned PR.

For the SKR, to store the new Marlin definitions it is necessary to send the comand M502 to restore to the factory settings (will use the configuration on the SD card) and send the comand M500 to save the configurations.

• Thanks, but restoring settings isn't required to set or store a setting. This was a bug between Marlin and the SKR, and it has been resolved in Marlin. Nov 19 '20 at 18:46