Useful or not, from you.
Marlin [BUG] [2.0.x] TMC Connection Error when using multiple TMC2208


Have you read Marlin's Code of Conduct? By filing an Issue, you are expected to comply with it, including treating everyone with respect:

Do you want to ask a question? Are you looking for support? Please don't post here. Instead please use the Marlin Firmware forum at or the Marlin Facebook Group

Before filing an issue be sure to test the 1.1 and/or 2.0 "bugfix" branches to see whether the issue is already addressed.



If I try to use multiple TMC2208 drivers (X, Y & Z) the LCD displays TMC Connection Error. M122 reports the following:

		X	Y	Z
Enabled		false	false	false
Set current	600	600	600
RMS current	1049	581	1049
MAX current	1479	819	1479
Run current	18/31	18/31	18/31
Hold current	9/31	9/31	9/31
CS actual		0/31	9/31	0/31
PWM scale	0	11	0
vsense		0=.325	1=.18	0=.325
stealthChop	false	true	false
msteps		256	16	256
tstep		0	max	0
threshold		98	98	658
[mm/s]		1613.52	100.85	48.06
OT prewarn	false	false	false
OT prewarn has
been triggered	false	false	false
off time		0	4	0
blank time	16	24	16
-end		-3	2	-3
-start		1	1	1
Stallguard thrs
stst			X
Driver registers:
		X	0x00:00:00:00	 Bad response!
		Y	0xC0:09:00:00
		Z	0x00:00:00:00	 Bad response!
Testing X connection... Error: All LOW
Testing Y connection... OK
Testing Z connection... Error: All LOW

I know the drivers are working because if I switch out the X or Z driver with the Y driver, the driver UART works. But if I use a driver in the X or Z position, those are returning 0x00:00:00:00. Even though the UART connection does not work, the drivers do drive the motors.

I'm using cb643d87df16dd54d6e7779fe8565c9be04ec951 compiled with PIO for the Fysetc F6, the original Watterott TMC2208 Silentstepsticks (jumper closed) and TMCStepper 0.2.3. The board allows for 'plug and play' use of the TMC2208, just one jumper on the board needs to be set (and the jumper on the stepsticks need to be closed).

I think it might be because of multiple drivers trying to use the same UART. But I do not know enough about this stuff at all. Or could the board be at fault?

That's a useful answer
Without any help

Having the same problem: Using an MKS Gen L with 5x TMC2208 in UART none of the drivers gets recognized, all drivers report ALL LOW. With 1.1.9 everything worked fine. I copied the pin definitions from my 1.1.9 pins_ramps.h file into my config_advanced like this:

    #define X_CURRENT       800        //MS (mA) RMS current. Multiply by 1.414 for peak current. up to 950 with 1.5A steppers
    #define X_CURRENT_HOME  X_CURRENT  // (mA) RMS current for sensorless homing
    #define X_MICROSTEPS     16    // 0..256
    #define X_RSENSE          0.11
    #define X_CHAIN_POS      -1    // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
    #define X_SERIAL_TX_PIN    40 //MS
    #define X_SERIAL_RX_PIN    63 //MS


  #if AXIS_IS_TMC(X2)
    #define X2_CURRENT      800
    #define X2_MICROSTEPS    16
    #define X2_RSENSE         0.11
    #define X2_CHAIN_POS     -1

  #if AXIS_IS_TMC(Y)
    #define Y_CURRENT       800
    #define Y_MICROSTEPS     16
    #define Y_RSENSE          0.11
    #define Y_CHAIN_POS      -1
    #define Y_SERIAL_TX_PIN    59 //MS
    #define Y_SERIAL_RX_PIN    64 //MS

  #if AXIS_IS_TMC(Y2)
    #define Y2_CURRENT      800
    #define Y2_MICROSTEPS    16
    #define Y2_RSENSE         0.11
    #define Y2_CHAIN_POS     -1

  #if AXIS_IS_TMC(Z)
    #define Z_CURRENT       800
    #define Z_MICROSTEPS     16
    #define Z_RSENSE          0.11
    #define Z_CHAIN_POS      -1
    #define Z_SERIAL_TX_PIN    19 //MS default 42
    #define Z_SERIAL_RX_PIN    11 //MS default 65

  #if AXIS_IS_TMC(Z2)
    #define Z2_CURRENT      800
    #define Z2_MICROSTEPS    16
    #define Z2_RSENSE         0.11
    #define Z2_CHAIN_POS     -1

  #if AXIS_IS_TMC(Z3)
    #define Z3_CURRENT      800
    #define Z3_MICROSTEPS    16
    #define Z3_RSENSE         0.11
    #define Z3_CHAIN_POS     -1

  #if AXIS_IS_TMC(E0)
    #define E0_CURRENT      800
    #define E0_MICROSTEPS    16
    #define E0_RSENSE         0.11
    #define E0_CHAIN_POS     -1
    #define E0_SERIAL_TX_PIN   42 //MS default 44
    #define E0_SERIAL_RX_PIN   65 //MS default 66

  #if AXIS_IS_TMC(E1)
    #define E1_CURRENT      800
    #define E1_MICROSTEPS    16
    #define E1_RSENSE         0.11
    #define E1_CHAIN_POS     -1
    #define E1_SERIAL_TX_PIN   44 //MS default -1
    #define E1_SERIAL_RX_PIN   66 //MS default -1**

you can see I changed some pins to make all 5 drivers work but I made sure all RX pins are interrupt capable and since they have worked with Marlin 1.1.9 but with Marlin 2.0 none of them reports a connection. I tried fiddling with the TX_BUFFER_SIZE and ADVANCED_OK as suggested by @tmaniac and even with RX_BUFFER_SIZE but it did not change anything.

Running the drivers in standalone mode now for the time being to make use of Marlin 2.0 but I'd like to be able to use HYBIRD_THRESHOLD etc. some time...