Обчислення CRC8-ATM CRC у Python

8-бітовий поліном CRC8-ATM використовується у багатьох вбудованих застосунках, включаючи Trinamic UART-керовані драйвери крокових моторів на кшталт TMC2209:

$$\text{CRC} = x^8 + x^2 + x^1 + x^0$$

Наступний код надає приклад, як обчислити цей тип CRC у Python:

crc8_atm.py
def compute_crc8_atm(datagram, initial_value=0):
    crc = initial_value
    # Ітерувати байти в даних
    for byte in datagram:
        # Ітерувати біти в байті
        for _ in range(0, 8):
            if (crc >> 7) ^ (byte & 0x01):
                crc = ((crc << 1) ^ 0x07) & 0xFF
            else:
                crc = (crc << 1) & 0xFF
            # Зсув до наступного біта
            byte = byte >> 1
    return crc

Цей код був перевірений у польових умовах для TMC2209.


Дивіться схожі статті за категоріями: Алгоритми Вбудовані системи MicroPython Python