Robohouse ’26 Library
Contents

Appendix B

TMC2209 register cheat sheet

about 2 minutes

AddressNameR/WPurpose
0x00GCONFRWi_scale_analog b0, en_spreadcycle b2, shaft b3, index_step b6, mstep_reg_select b7
0x01GSTATR+clearreset / drv_err / uv_cp flags
0x02IFCNTRIncrements on each successful write; use to verify the UART
0x03SLAVECONFWReply delay
0x06IOINRLive state of the input pins; also chip version
0x10IHOLD_IRUNWIHOLD b0–4, IRUN b8–12, IHOLDDELAY b16–19
0x11TPOWERDOWNWDelay before dropping to hold current
0x12TSTEPRMeasured time between steps (larger = slower)
0x13TPWMTHRSWStealthChop → SpreadCycle crossover velocity
0x14TCOOLTHRSWLower velocity limit for StallGuard and CoolStep
0x22VACTUALWInternal step generator — spin the motor without STEP pulses
0x40SGTHRSWStallGuard threshold; stall when SG_RESULT ≤ 2 × SGTHRS
0x41SG_RESULTRLoad measurement, 0–510; high = light load
0x42COOLCONFWCoolStep SEMIN, SEMAX, SEDN, SEUP
0x6AMSCNTRMicrostep counter position
0x6CCHOPCONFRWTOFF b0–3, vsense b17, MRES b24–27, intpol b28
0x6FDRV_STATUSRSG_RESULT b0–9, CS_ACTUAL b16–20, ot b25, otpw b26, stealth b30, stst b31, plus short and open-load flags
0x70PWMCONFRWStealthChop configuration
0x71PWM_SCALERCurrent StealthChop scaling — useful diagnostic

MRES encoding (note it counts down): 0 = 1/256, 1 = 1/128, 2 = 1/64, 3 = 1/32, 4 = 1/16, 5 = 1/8, 6 = 1/4, 7 = 1/2, 8 = full step.

Standalone MS1/MS2 microstep table: (MS2, MS1) = (0,0) → 1/8, (0,1) → 1/2, (1,0) → 1/4, (1,1) → 1/16.

UART addressing: MS1 is address bit 0, MS2 is address bit 1. Four drivers maximum per UART line.

Datagram formats: write = 0x05, addr, reg|0x80, data[4], CRC (8 bytes). Read request = 0x05, addr, reg, CRC (4 bytes). Read reply = 0x05, 0xFF, reg, data[4], CRC (8 bytes). CRC-8, polynomial 0x07, LSB-first.