Menu
Sepet

CRC Hesaplama

Hesaplama araçları · Dönüştürücüler ve kriptografi

CRC Hesaplama

Elektromall teknik ekibi

Onaltılık baytları boşluklu veya bitişik yazabilirsiniz (0103000A).
CRC—
Bayt sırası (düşük önce)
—
Veri uzunluğu
—
Toplam (8 bit)
—
XOR (LRC)
—
Kullanılan formüller

CRC, veriyi bir polinoma bölmenin kalanıdır. Parametreler: genişlik, polinom, başlangıç değeri, giriş/çıkış bit yansıtma ve son XOR.

Kısa cevap Modbus CRC nasıl hesaplanır?

Modbus RTU, CRC-16/MODBUS algoritmasını kullanır: polinom 0x8005 (yansıtılmış 0xA001), başlangıç değeri 0xFFFF, giriş ve çıkış bit yansıtmalı, son XOR yoktur. 01 03 00 00 00 0A isteğinin CRC'si 0xCDC5'tir ve düşük bayt önce gönderilir: C5 CD. Doğrulama için '123456789' dizisinin CRC'si 0x4B37 olmalıdır.

CRC (döngüsel artıklık denetimi), bir veri paketinin iletim sırasında bozulup bozulmadığını anlamak için sonuna eklenen kısa bir kontrol değeridir. Modbus RTU, CAN, Ethernet, USB, SD kart, 1-Wire (DS18B20) ve ZIP dosyaları farklı CRC türleri kullanır. Bu araç girdiğiniz baytların CRC-8, CRC-16 (MODBUS, CCITT, XMODEM, KERMIT, ARC) ve CRC-32 değerlerini aynı anda hesaplar; ayrıca 8 bitlik toplam ve XOR (LRC) kontrolünü de gösterir. Gömülü yazılımınızın doğru CRC ürettiğini test etmek için idealdir.

CRC nasıl çalışır?

Veri çok uzun bir ikili sayı gibi düşünülür ve belirli bir polinoma bölünür; bölümün kalanı CRC değeridir. Alıcı aynı hesabı yapar ve sonuç eşleşmezse paketin bozulduğunu anlar. Bir CRC algoritmasını tam olarak tanımlamak için beş parametre gerekir: genişlik (8, 16, 32 bit), polinom, başlangıç değeri, giriş/çıkış bit yansıtma ve son XOR değeri. İki cihazın "CRC-16" kullandığı söylense bile bu parametrelerden biri farklıysa sonuçlar tutmaz; tablodaki farklı CRC-16 türleri bunun örneğidir.

Doğrulama: "123456789" testi

CRC kütüphaneleri standart olarak ASCII "123456789" dizisiyle test edilir ve her algoritmanın bilinen bir sonucu vardır: CRC-32 = 0xCBF43926, CRC-16/MODBUS = 0x4B37, CRC-16/CCITT-FALSE = 0x29B1, CRC-8 = 0xF4. Kendi kodunuzu yazarken bu değerleri üretip üretmediğini kontrol edin; araçtaki örnek düğmesi bu testi hazır getirir.

Modbus RTU örneği

01 03 00 00 00 0A isteği (1 numaralı cihazdan 0 adresinden itibaren 10 yazmaç oku) için CRC-16/MODBUS = 0xCDC5'tir. Modbus'ta CRC düşük bayt önce gönderilir; paket 01 03 00 00 00 0A C5 CD olarak iletilir. Araç bu sırayı ayrıca gösterir. Alıcı tarafta CRC dahil tüm paketin CRC'si hesaplandığında sonuç 0 çıkar.

Toplam (checksum) ve XOR

Bazı basit protokoller CRC yerine baytların toplamını veya XOR'unu kullanır. Bunlar hesaplaması kolay ama zayıf kontrollerdir: yer değiştiren iki baytı fark edemezler. NMEA (GPS) cümleleri XOR, Intel HEX dosyaları toplamın ikiye tümleyenini kullanır.

Sıkça sorulan sorular

CRC ile hash arasındaki fark nedir?

CRC rastgele iletim hatalarını yakalamak için tasarlanmıştır ve kasıtlı değişikliklere karşı güvenli değildir. Veri bütünlüğünü saldırılara karşı korumak için SHA-256 veya HMAC gibi kriptografik özetler kullanılır; bunun için hash oluşturucuya bakın.

Benim CRC sonucum aracınkinden farklı, neden?

En sık nedenler yanlış başlangıç değeri, bit yansıtmanın uygulanmaması, bayt sırasının ters gönderilmesi veya hesaba fazladan bir baytın katılmasıdır. Tablodaki tüm varyantlara bakarak hangi parametrenin farklı olduğunu bulabilirsiniz.

STM32'nin donanım CRC birimi hangi türü hesaplar?

Varsayılan olarak CRC-32 polinomunu (0x04C11DB7) yansıtmasız hesaplar; bu yüzden sonucu ZIP'teki CRC-32 ile aynı değildir. Yeni serilerde yansıtma ve başlangıç değeri ayarlanabilir.

Direnç, kondansatör ve diğer komponentler için ürünlerimize göz atın.

Geliştirici Ürünleri