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: https://github.com/MarlinFirmware/Marlin/blob/1.1.x/.github/code_of_conduct.md

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 http://forums.reprap.org/list.php?415 or the Marlin Facebook Group https://www.facebook.com/groups/1049718498464482/.

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.

-->

Description

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
pwm
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
hysteresis
-end		-3	2	-3
-start		1	1	1
Stallguard thrs
DRVSTATUS	X	Y	Z
stst			X
olb
ola
s2gb
s2ga
otpw
ot
157C
150C
143C
120C
s2vsa
s2vsb
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?

marlin2configuration.zip

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:

 #if AXIS_IS_TMC(X)
    #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

  #endif

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

  #if AXIS_IS_TMC(Y)
    #define Y_CURRENT       800
    #define Y_CURRENT_HOME  Y_CURRENT
    #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
  #endif

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

  #if AXIS_IS_TMC(Z)
    #define Z_CURRENT       800
    #define Z_CURRENT_HOME  Z_CURRENT
    #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
  #endif

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

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

  #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
  #endif

  #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**
  #endif

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...