The 8-bit CRC8-ATM polynomial is used in many embedded applications, including Trinamic UART-controlled stepper motor drivers like the TMC2209:
\text{CRC} = x^8 + x^2 + x^1 + x^0The following code provides an example on how to compute this type of CRC in Python:
def compute_crc8_atm(datagram, initial_value=0): crc = initial_value # Iterate bytes in data for byte in datagram: # Iterate bits in byte for _ in range(0, 8): if (crc >> 7) ^ (byte & 0x01): crc = ((crc << 1) ^ 0x07) & 0xFF else: crc = (crc << 1) & 0xFF # Shift to next bit byte = byte >> 1 return crc
This code has been field-verified for the TMC2209.