Cannot enable TMC2209 UART on Creality 4.5.3 / CR-ERA V1.1.0.3 Motherboard

Basic Information:

Printer Model: Creality CR-6 SE
MCU / Printerboard: CR-ERA V1.1.0.3
Host / SBC: RPi4
klippy.log klippy.log.zip (24.6 KB)

Fill out above information and in all cases attach your klippy.log file (use zip to compress it, if too big). Pasting your printer.cfg is not needed
Be sure to check our “Knowledge Base” Category first. Most relevant items, e.g. error messages, are covered there

Describe your issue:

Hi all,

I’m trying to enable UART communication with the onboard TMC2209 drivers on my Creality CR-6 SE, which uses the Creality 4.5.3 / CR-ERA V1.1.0.3 motherboard (STM32F103).

What I know so far:

• The TMC2209 drivers are soldered onboard.
• The motherboard schematic (provided by Creality) shows:
PA1, PA2, and PA3 connected via 22 Ω resistors (R213, R212, R214) to a shared PDN_UART junction.
• The schematic and my physical probing confirm these UART pins are wired and active.

What’s not working:

• I’ve tested all combinations of uart_pin (PA1, PA2, PA3) with uart_address values 0–3 in Klipper, like this:

[tmc2209 stepper_x]
uart_pin: PA2
uart_address: 0
run_current: 0.8

Each attempt fails with the same error:

uart_pin = PA2 
uart_address = 0 # <- Z
uart_pin = PA2
uart_address = 1 # <- Y
uart_pin = PA2
uart_address = 2 # <- X
uart_pin = PA2
uart_address = 3 # <- E
TMC stepper_z failed to init: Unable to read tmc uart 'stepper_z' register IFCNT
TMC stepper_y failed to init: Unable to read tmc uart 'stepper_y' register IFCNT
TMC stepper_x failed to init: Unable to read tmc uart 'stepper_x' register IFCNT
TMC extruder failed to init: Unable to read tmc uart 'extruder' register IFCNT

VREF adjustment via the onboard potentiometer works, suggesting the drivers may still be in standalone mode, ignoring UART input.

Since “higher tier” tech support of Creality confirmed that

  • “The drivers on the board are TMC2209, as specified in the board specifications. In the original firmware, the drivers operate in UART mode.”

I suspect the issue might be one or both of the following:

• The MS1/AD0 and MS2/AD1 pins (used for assigning the UART slave address) may not be uniquely wired per driver
• The drivers may not boot into UART mode, possibly due to improper CFG pin configuration at startup.

My Questions:

  1. Has anyone successfully enabled UART on this specific Creality 4.5.3 / CR-ERA board in Klipper?
  2. Does Klipper require explicit address pin wiring for each TMC2209 driver to be unique even if using shared PDN_UART?
  3. Is there a way to verify if the driver is responding at all (maybe using IFCNT or a scope)?
  4. Could there be a conflict if the Creality firmware previously used stealthchop macros without true UART operation?

Any help or tips from those who have worked with this board or had similar issues would be greatly appreciated!

Do you have a link for this as well the pinout information?

Have you set the TMC2209s to UART mode?

Other than adding the tmc2209 section as shown in my post, how can I “set” the tmc2209s to UART mode specifically?

Attached are what they shared, the just sent me the picture (no link)

Google?

Thanks for the link.
Based on the communication I had with them, they are claiming that in the stock firmware, the TMC2209 is already operating in the UART mode.

So is it safe to assume that the wiring of the pins for TMC2209 is already done, and each of the drivers is getting a proper slave address? Otherwise, how can they claim that the stock firmware is already operating in UART mode?

AFAIK, the TMC2209 are delivered for standalone mode.

Ok, since these are already soldered to the motherboard and Creality is claiming it is UART in stock firmware, I am not gonna try soldering pins on a tiny SMD chip :slight_smile:
I am waiting for them to get back to me to hopefully provide more details. Meanwhile I thought maybe I am missing a config on the Klipper side, hence the question.

Wait!. I Assumed you have modules, not chips on the PCB

lol, it was the first item in my problem description

According to:

The drivers are in stand-alone mode and cannot be controlled by UART.

This seems to be supported by the fact that there are V_{ref} potentiometers soldered to the board. Why would a manufacturer add these components if there is no need, given that both Marlin and Klipper have been able to control TMCs via UART for a long time?

I have shared all of that with the Creality support and they still insist that it can/is operating in UART mode. Based on my tracings, in the older version of motherboard, 4.5.2, pins 9 and 10 of all 4 TMC2209 chips where connected to each other suggesting that UART was not possible since they cannot be assigned unique slave addresses due to the shorting of the pins.

However, for the newer motherboard that I have, there are 3 resistors connected to PA1, PA2 and PA3. The resistors then share a junction which I could only trace to a via hole on the PCB. This strongly suggests that the MCU is connected to a shared UART line, which matches with the schematic provided by Creality.

We can now ask a similar question: why bother designing a PCB with extra resistor network if it is not intended to for UART operation?

Then ask them to provide the necessary information, such as schematics and/or pin information. The available reference material, as linked above, shows something different.

They have been more helpful than what I was expecting. But now that I am getting to this level of detail, they are asking me why I need this informtion? :slight_smile:
Will update this thread if I hear back from them.

Well, have fun with them. This is typically their behavior: using and making money from open-source products while disclosing no information and violating the respective OSS licenses.

Even the Marlin firmware sources that they published here do not even set the TMCs as drivers, let alone provide any pins for UART, etc.

Honestly, the best thing would be for all communities, whether Marlin or Klipper, to stop supporting their products until they learn how to behave properly. The folks in these communities are doing the legwork for their brazen omissions, which is how they earn their money.

1 Like

Thank you for your in-depth research and detailed questions about the CR-6SE hardware. Here’s a step-by-step explanation of your queries:

  • Hardware configuration clarification
    TMC2209 default mode
    The CR-6SE is configured as a standalone mode at the factory TMC2209 is set by a hardware tension resistor on the MS1/MS2 pin (typical configuration: MS1=HIGH, MS2=LOW). The UART mode requires active initialization of the firmware.
    If you need to do some configuration on the machine, you can check out the open source website

I’m getting weird replies from them after they fully disclosed their MCU schematic with such details that I have shared in this post. Now, they are not willing to tell me how the MS1, MS2 pair driver configuration is wired. They just said typically they are connected to tension resistors with high-low values, leaving the fact that every TMC needs to have their own slave address.

It’s starting to look like the TMC2209 UART setup was only partially implemented. The PDN_UART routing is there, the firmware mentions UART features like StealthChop, but the board fails to provide the necessary MS1/MS2 per-driver configuration to make UART work. It’s possible the engineers didn’t fully understand the requirement for unique slave addresses and left all MS pins hardwired the same, unintentionally blocking UART from ever functioning correctly.
Because I tried all 42 combinations of UART addresses in Klipper and none worked!