CRC nedir, checksum'dan farkı nedir? CRC-16 hesaplayan bir C fonksiyonu yazın.

Cevap

CRC (Cyclic Redundancy Check), veriyi bir polinomla mod-2 bölme işlemine sokup kalanı kontrol değeri olarak ekleyen bir hata algılama yöntemidir. Basit toplama checksum'ına göre çok daha güçlüdür: n-bit bir CRC, n bit veya daha kısa tüm burst hatalarını ve tek sayıda bit hatalarını (uygun polinomla) yakalar. Byte'ların sırası değiştiğinde de farklı sonuç verir; toplama checksum'ı bunu yakalayamaz.

CRC parametreleri

Bir CRC algoritması şu parametrelerle tanımlanır: genişlik, polinom, başlangıç değeri (init), giriş/çıkış yansıtma (refin/refout) ve son XOR değeri (xorout). "CRC-16" tek bir algoritma değildir; MODBUS, CCITT-FALSE, XMODEM gibi farklı varyantları vardır.

CRC-16/MODBUS (bit bit)

#include <stdint.h>
#include <stddef.h>

uint16_t crc16_modbus(const uint8_t *buf, size_t len)
{
    uint16_t crc = 0xFFFF;                 /* init */
    while (len--) {
        crc ^= *buf++;
        for (int i = 0; i < 8; i++) {
            if (crc & 1u)
                crc = (crc >> 1) ^ 0xA001; /* 0x8005'in yansıtılmış hali */
            else
                crc >>= 1;
        }
    }
    return crc;   /* "123456789" için 0x4B37 */
}

Uygulama seçenekleri

YöntemHızBellek
Bit bitYavaş (byte başına 8 döngü)Çok az
Nibble tablosuOrta16 veya 32 byte
256 elemanlı tabloHızlı512 byte (CRC-16), 1 KB (CRC-32)
Donanım CRC birimiEn hızlı, DMA ile beslenebilirYok

Pratik noktalar

  • Algoritmanızı her zaman bilinen "check" değeriyle test edin (ASCII "123456789" girişi standarttır).
  • STM32 CRC donanımının varsayılan ayarları CRC-32/MPEG-2'ye karşılık gelir; Ethernet/zlib CRC-32'si ile aynı sonucu almak için yansıtma ve son XOR ayarlarını değiştirmek gerekir.
  • CRC kasıtlı değişikliğe karşı koruma sağlamaz; firmware bütünlüğünü saldırılara karşı korumak için SHA-256 veya imza kullanılmalıdır.
  1. UART, SPI ve I2C arasındaki farklar nelerdir?OrtaHaberleşme ProtokolleriEmbedded
  2. CAN bus nasıl çalışır? Arbitration, hata yönetimi ve CAN FD farkını açıklayın.ZorHaberleşme ProtokolleriEmbedded
  3. SPI'da CPOL ve CPHA nedir? Dört SPI modu arasındaki fark nasıl açıklanır?OrtaHaberleşme ProtokolleriEmbedded
  4. I2C protokolü nasıl çalışır? Adresleme, ACK/NACK ve clock stretching nedir?OrtaHaberleşme ProtokolleriEmbedded
  5. UART'ta baud rate, frame yapısı ve parity nedir? RS-485 UART'tan nasıl farklıdır?KolayHaberleşme ProtokolleriEmbedded
  6. USB nasıl çalışır? Enumeration süreci, endpoint'ler ve transfer tipleri nelerdir?OrtaHaberleşme ProtokolleriEmbedded

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle