SKR 1.3 with TMC 2208 drivers, dual-endstop


Just did a power on test with SKR 1.3 controller and TMC2208 drivers for the dual-endstop firmware. I was kind of surprised that it all worked first time.

Now, let me qualify that a little, I have no limit switches installed nor belts. But, both X and X2, Y and Y2, and Z all rotated smoothly and almost silently.

The graphic screen also worked.

All I did is to download the Marlin-MPCNC_Rambo_T8_16T_LCD_DualEndstop code, then modify

the firmware for SKR 1.3 board, env for LPC1768, the pins (renaming E0 to an unused pin (bed heater), E0 to E1, E1 to E2), and make the TMC2208 mods suggested in a printer upgrade on Youtube.

TMC2208 in UART mode.




Very cool! I have one of these boards as well as two SKR Pro v1.1 boards to play with. Really want to move to 32bit with the MPCNC!

Could you share your firmware files pre-build?

1 Like

Let me see if I can find the ones that I have edited, I assume they will have different dates from the originals…not sure how to get them to you. Perhaps zip them and attach.

This compiles and runs here. There are probably a lot more things that need to be configured… (165 KB)


Thank you! Saves me some time for sure!

I was going to skip right over the SKR v1.3 and jump into the SKR Pro v1.1 boards that I have for both my printer (heavily modified original gen Tevo Tarantula) and my MPCNC, but without a functioning eeprom, I’m waiting for some kind of official word out of BigTreeTech on how to work around it while keeping UART/SPI working happily with the newer Pro boards.

1 Like

Ok, Glen, I need a little help here.

I copied link, and need to modify it for my drivers and such.

when i tried to load it say the source code is not there, nothing to compile.

what am I missing.

I copied your bin file installed it and finally got it to load the firmware from the sd card.

I need to change to 8825 drivers for one thing, otherwise i think it looks just like Ryans except for the axis steps per unit his shows, 200, 200, 800, 200

can you tell me how to get the source code right or possibly make those changes and create a bin file like the one you posted??

is platform io , with Atom a good way to edit??

Thanks Spike

You need to merge these changes with the regular source code.

Glen I tried to get this working, I am having problems with the e pin assignment.

could you give a path,

it says y dual stepper drivers requires y2 pins (and an extra E plug)

what do I change, found the pins file.

need to turn off the TMC too, not sure where, using drv8825 drivers

Thanks Spike


Are you familiar with the Marlin Bugfix 2.0 ? Anyway I have to assume that you can build the binary file from the source code using Atom and Platform IO. I believe the TMC2208 selection is in configuration.h file. It lists all the stepper driver options there. For dual endstop, you need two X and two Y drivers. We use E1 for X1 and E2 for Y1. I changed the files I already included to make a new extruder E2 from the original E1 definitions. Then I copied the E0 definitions into E1, and used the bed heater pin for all E0 pin definitions.

I can confirm that my Z worked backwards, so I changed the direction of the Z axis. I can also confirm that Y worked correctly right away. I have not tied the belts to X yet.

I have decided to reprint all the parts, because I failed to accurately calibrate my Ender 5 before I started. Everything looked good, but you cannot go by that! I finally got my PETG CHEP cube within 0.001" on all dimensions.

I am a newbie, but will help as much as I can.


1 Like

I loaded the bin on my 1.3 with 2208’s and can manually send code but my touch screen isn’t talking to the board. Guess I’ll have to add something to get that working. 2208’s came already setup for UART mode which was nice. Running a KINGPRINT MKS TFT28 for the touchscreen with the teaching tech firmware on the screen.


My SKR Pro comes in on Thursday. Would love to get it working so I can take advantage of the higher amperage of the 5106s I am putting in. I will do my best to help out where I can and hopefully we can get an “official” configuration of Marlin to put up on the github page for others to use. Glen, please keep us informed if you make any progress and I will do the same.

Forgot to mention that as far as 32 bit goes, I have been running my MPCNC on an MKS Sbase 1.3 for about a year running smoothieware in the GRBL compatible mode. It worked great until a recent move that somehow damaged the board. I didn’t have to do anything special to the firmware besides set it up for CNC use in the config. Worked with a laser attachment as well. Also, before people ask, I will see if I have the config saved somewhere but I already used the sdcard for a different project and removed it from there.

I got my SKR 1.3 working correctly with the drivers ( 2208 v3 ) in standalone mode but when I switched them over to UART I cannot get X or Y to move even though Z, E1 and E2 work fine. Pretty dang annoying since soldering those tiny jumpers is a huge pain in the arse. Glen, I tried your config files and ran into the same problem in UART mode. I am hoping that I just missed something ( it is 3:30am so quite possible that I did ).

Mind taking a quick look at my config?


// Steppers
#define X_STEP_PIN P2_02
#define X_DIR_PIN P2_06
#define X_ENABLE_PIN P2_01
#ifndef X_CS_PIN
#define X_CS_PIN P1_17

#define Y_STEP_PIN P0_19
#define Y_DIR_PIN P0_20
#define Y_ENABLE_PIN P2_08
#ifndef Y_CS_PIN
#define Y_CS_PIN P1_15

#define Z_STEP_PIN P0_22
#define Z_DIR_PIN P2_11
#define Z_ENABLE_PIN P0_21
#ifndef Z_CS_PIN
#define Z_CS_PIN P1_10

#define E0_STEP_PIN P2_05
#define E0_DIR_PIN P2_05
#define E0_ENABLE_PIN P2_05
#ifndef E0_CS_PIN
#define E0_CS_PIN P2_05

#define E1_STEP_PIN P2_13
#define E1_DIR_PIN P0_11
#define E1_ENABLE_PIN P2_12
#ifndef E1_CS_PIN
#define E1_CS_PIN P1_08

#define E2_STEP_PIN P0_01
#define E2_DIR_PIN P0_00
#define E2_ENABLE_PIN P0_10
#ifndef E2_CS_PIN
#define E2_CS_PIN P1_01




#define X_DRIVER_TYPE TMC2208
#define Y_DRIVER_TYPE TMC2208
#define Z_DRIVER_TYPE TMC2208
//#define X2_DRIVER_TYPE TMC2208
//#define Y2_DRIVER_TYPE TMC2208
//#define Z2_DRIVER_TYPE TMC2208
//#define Z3_DRIVER_TYPE TMC2208
// #define E0_DRIVER_TYPE TMC2208
#define E1_DRIVER_TYPE TMC2208
#define E2_DRIVER_TYPE TMC2208
//#define E3_DRIVER_TYPE TMC2208
//#define E4_DRIVER_TYPE TMC2208
//#define E5_DRIVER_TYPE TMC2208



Driver registers: X 0xC0:0C:00:00 Y 0xC0:0C:00:00 Z 0xC0:0C:00:00 Testing X connection... OK Testing Y connection... OK Testing Z connection... OK

Hopefully I can find some answers. Once I get this working I plan on attempting to start from scratch on the newest Marlin 2.0 Bugfix branch so it is up to date and then I will share with everyone for SKR 1.3 standalone and UART with 2208s, and SKR Pro 1.0 with 5106s.

Have you looked at the pins.h for your board? We did some juggling in the RAMPS and RAMBO versions to disable E0 and bring E1,E2 down. So there might be missing settings for the uarts on E1,E2. It’s also possible you’re in the wild, where no one has tried configuring UARTs on 5 drivers before, and someone missed a line of code.

The first section of code I pasted was from the pins_BIGTREE_SKR_V1.3.h file. I accidentally had it under the wrong header. I a using Glen’s pins example which sets up E1 and E2 while setting E0 to unused pins ( the bed heater ).

I was not aware that there could be issues with running all 5 drivers under UART. I may just have to run them in standalone mode which is probably fine but it would be fun to get UART working.

OK Update, I am an idiot :wink: When I switched to UART I set the microstepping to 128 which means it was moving 1.5 mm when I was testing it to move 10. So, the X and Y drivers work. However, as M122 shows, it looks like Marlin is not doing anything with E1 and E0 in UART mode and I think they are still running in standalone mode.

Yeah, so is there more work like that to do later in the file for the serial lines?



  • TMC2208 stepper drivers
  • Hardware serial communication ports.
  • If undefined software serial is used according to the pins below
    //#define X_HARDWARE_SERIAL Serial
    //#define X2_HARDWARE_SERIAL Serial1
    //#define Y_HARDWARE_SERIAL Serial1
    //#define Y2_HARDWARE_SERIAL Serial1
    //#define Z_HARDWARE_SERIAL Serial1
    //#define Z2_HARDWARE_SERIAL Serial1
    //#define E0_HARDWARE_SERIAL Serial1
    //#define E1_HARDWARE_SERIAL Serial1
    //#define E2_HARDWARE_SERIAL Serial1
    //#define E3_HARDWARE_SERIAL Serial1
    //#define E4_HARDWARE_SERIAL Serial1

// Software serial
#define X_SERIAL_TX_PIN P4_29
#define X_SERIAL_RX_PIN P1_17

#define Y_SERIAL_TX_PIN P1_16
#define Y_SERIAL_RX_PIN P1_15

#define Z_SERIAL_TX_PIN P1_14
#define Z_SERIAL_RX_PIN P1_10

#define E0_SERIAL_TX_PIN P1_09
#define E0_SERIAL_RX_PIN P1_08

#define E1_SERIAL_TX_PIN P1_04
#define E1_SERIAL_RX_PIN P1_01