Computing the CRC8-ATM CRC in Python
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^0$$The 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.