Unable to read tmc uart 'stepper_x' register IFCNT

Basic Information:

Printer Model: Anycubic Chiron
MCU / Printerboard: trigorilla (atmega2560)
Host / SBC: Raspi Zero 2 W
klippy.log.zip (615.7 KB)

Describe your issue:

This is my 1st time using Klipper to control a 3D printer. I was following the standard installation procedure, but when I went to verify stepper motors klipper said the printer shutdown (though it did not visibly cycle the power) & threw an error “Unable to read tmc uart ‘stepper_x’ register IFCNT.”

I’m using the printer.cfg & other files from double-em (github).

Unsure if the pin values are accurate.
Don’t know where to double check their outputs.
Don’t know how to determine/guess what the correct values might be.

Let me know if there’s anything else you need to know or see for diagnostics.


I believe this is the board in my Chiron

Can you post a picture of the actual main controller board in your printer?

I’m a bit surprised that there are sockets in the board - the other Trigorilla boards I’ve seen had the TMC drivers soldered in.

Now - going to the sheet you posted, I don’t see any pin definitions for the stepper drivers (“STEP”, “DIR”, “EN” as well as “UART”). What resources do you have for that?

If I go by the note “- can be used as _SERIAL_RX_PIN for the TMC208…” leads me to wonder if you should be pulling that little expansion board as there may be some circuitry that’s affecting the processor’s ability to read the serial port.

They’re definitely sockets as pictured, but they gorilla glued glued all the driver boards into a long sausage.

Any resources I know of I’ve posted or mentioned previously. What kind of resources should I be looking for?

In your klippy.log you have your stepper motor pins defined like:

[stepper_x]
step_pin = PF0
dir_pin = !PF1
enable_pin = !PD4
microsteps = 32
rotation_distance = 40
endstop_pin = ^!PE5
position_min = 0
position_endstop = 0
position_max = 370
homing_speed = 60
homing_retract_dist = 0



[tmc2209 stepper_x]
uart_address = 0
uart_pin = PB5
run_current = 1.0
diag_pin = ^PB2
driver_sgthrs = 96
stealthchop_threshold = 999999
interpolate = False

Where did you get the STEP, DIR, EN and, more importantly, uart_pin values?

When I look around, there are a few stock ones:

But they seem to have a different set of pins for stepper_x Enable:

[stepper_x]
step_pin: PF0
dir_pin: !PF1
enable_pin: !PD7
microsteps: 16
rotation_distance: 40
endstop_pin: ^!PE5
position_min: -14
position_endstop: -14
position_max: 400
homing_speed: 100

So where did you get your information and how do you know it’s right for your board?

Yeah, I started with the files from double-em. But that was giving an endstop error. So I removed the virtual pin modifier. Then I changed the pin assignment to the port corresponding to the x_min_pin in the board diagram table. That’s working now.
The uart is changed because I was attempting other pins while trying to diagnose this problem. Many of the other posts about users getting this error code had some mention of uart pin misassignment. The value there is only the most recent guess.

EDIT: Looking at my current uart setting I posted & they match the settings in double-em’s tmc2209.cfg file. Seems anything I did change I’ve reverted back to double-em’s settings.

Good news…But,

Is there an authoritative reference for the MCU’s IO pin assignments? If there’s guessing involved, then it will take a while to figure out what exactly is wrong.

Is there:

  1. A definite identification of what the main controller board is with part number?
  2. A Schematic for the main controller board (We can pull off the correct pin connecttions from this)?
  3. A full pin assignment diagram - not the partial one you’ve posted above?

Without the information I’m requesting above, I don’t know if we can declare double-em’s .cfg files as being correct.

According to this blog I’ve got a trigorilla 1.0 board in the chiron.

These are the only markings on the rear of the board:

M02839C13502295

A quick search returned no hits for that number. Searched with & without “trigorilla.”

Sticker closeup:

Don’t put in “(DOT)” - having the link that you can just click on is helpful.

Anyway, when I look at the wiki and compare it to your photograph:

I cannot conclusively say that you have a Trigorilla 1.0 board:

The Trigorilla (1.0) as identified has the “TM” mark by the Trigorilla logo whereas yours has the Registered Mark (“®”) symbol. I don’t know how significant that is.


The goal of this exercise is to read the TMC220x registers and, looking at your photos, you haven’t added the UART communications lines.

Looking around, even though it’s a bit annoying because it’s Scribd, this is the best reference I have found for adding the UART communication lines to your TMC drivers:

How does this work for you?

This forum wouldn’t let me post the address. Flagged the post as spam. It did let me edit it back to the original link, though.

Found a copy that isn’t paywalled [PDF link] https://www.n-wells.co.uk/3DPrinting/Chiron/TMC2209%20UART%20Mode%20with%20the%20Trigorilla%20v1.0.pdf

Looks good - did you try modifying the driver modules as it shows?

did you try modifying the driver modules as it shows?

No, I have not modified the hardware yet.
Reading through this guide PDF it seems like UART communication will require irreversible hardware modification. I’m not comfortable performing surgery on the microelectronics of this printer. I’m not sure why I need UART control specifically. My goal is simply to clear the errors that appear during install & get this printer working. Now I’m weeks behind schedule & even if I did intend on frankensteining the chips it will take even longer to source, order, & receive the supplies needed to do it.

Is there a way to use Klipper without needing direct UART control?

They’re not “irreversible hardware changes”. I guess the modifications to the stepper motor driver modules are (with cutting the legs) but the board modifications don’t preclude it from being used in its original configuration.

Sure, you can just put in the TMC2209 modules and run in what Trinimic calls “STEP/DIR” mode.

There are four drawbacks to this:

  1. You cannot change the microsteps that are running on the TMC2209. With the two pins tied high the only way that you can change that is by cutting the legs off the stepper driver module (which you didn’t want to do for UART communication).
  2. You will have to adjust the small potentiometer on the top (or bottom with some modules) for the motor current. This can be done (I did it for years) but it’s a pain in the ass.
  3. You can’t specify the motor driver operating mode (ie “StealthChop” or “SpreadCycle”) and may end up with a noiser printer.
  4. You can implement sensorless homing on the printer.

My recommendation would be, if you want to get Klipper up running as quickly as possible then buy a new main controller board like the BTT Mini E3 V3 (I should really get a royalty every time I recommend this board) - it has the TMC2209s built in and is very easy to set up with Klipper.

In my opinion (based on helping several people get their printers running on Klipper) the Trigorilla boards are not suited for use with Klipper. Their circuitry seems to be somewhat unconventional and that’s based on what’s online as there is no official company documentation (like a user manual, schematic or complete pin drawing). They generally require some kind of modification for Klipper and you’ll find conflicting advice online.

If you want to get your printer running in the short time Klipper, especially with TMC2208s/TMC2209s (to take advantage of the UART communications) then ditch the Trigorilla and buy another board are well documented and the manufacturer supports them running on Klipper.

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.