araç köşesi

CRC Hesaplama: Modbus CRC-16, CRC-32 ve CRC-8 Değerini Bulun

Metin ya da hex baytların CRC-8, CRC-16 (Modbus, CCITT, XMODEM), CRC-32 ve CRC-64 değerini bulun; beklenen CRC'nin hangi algoritma olduğunu öğrenin

Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.

Nasıl çalışır?

CRC (döngüsel artıklık denetimi), bir veri bloğunun yolda bozulup bozulmadığını anlamak için verinin sonuna eklenen kısa bir kontrol değeridir. Modbus RTU ile cihaz haberleştiren, bir seri port protokolü yazan ya da bir dosyanın CRC-32 değerini belgeyle karşılaştıran kişi bu değeri hesaplamak zorundadır. Baytları sol panele hex olarak yazın; örneğin "01 03 00 00 00 0A" (1 numaralı cihazdan 0. adresten başlayan 10 kaydı okuma isteği) için CRC-16/MODBUS sonucu 0xCDC5 çıkar ve çerçeveye düşük bayt önce, yani "C5 CD" olarak eklenir; araç tam çerçeveyi "01 03 00 00 00 0A C5 CD" diye yazar. Baytlar boşluk, virgül, iki nokta ya da 0x önekiyle ayrılabilir. Metin yazarsanız harfler UTF-8 baytlarına çevrilir; "123456789" metni her algoritmanın standart deneme girdisidir ve CRC-32 için CBF43926 verir. Algoritmayı bilmiyorsanız varsayılan "Hepsi" tablosunu okuyun ve elinizdeki örnek değeri "Beklenen CRC" kutusuna yazın.

Bu araç crc hesaplama, modbus crc hesaplama, crc16 hesaplama, crc32 hesaplama, crc calculator, crc16 modbus calculator, crc-16 ccitt hesaplama aramalarıyla da biliniyor.

CRC (döngüsel artıklık denetimi) nedir?

CRC (Cyclic Redundancy Check), veriyi bir ikilik polinoma bölüp kalanı kontrol değeri olarak saklayan hata yakalama yöntemidir. Gönderen bu kalanı verinin sonuna ekler, alan taraf aynı hesabı yapıp karşılaştırır; tek bir bitin bile değişmesi kalanı değiştirir. Seri haberleşmede (Modbus, CAN), ağ çerçevelerinde (Ethernet) ve arşiv dosyalarında (ZIP, PNG) kullanılır. 8, 16, 32 ve 64 bitlik türleri vardır; bit sayısı arttıkça gözden kaçan hata olasılığı azalır.

Polinom ve CRC parametreleri nedir?

Bir CRC algoritmasını altı değer tam olarak tanımlar: genişlik (width, kaç bit), polinom (poly, bölen), başlangıç değeri (init), giriş yansıtma (refin, baytın bitlerinin düşük uçtan işlenmesi), çıkış yansıtma (refout) ve sonuca uygulanan XOR (xorout). Bu modeli Ross Williams tanımlamış, Greg Cook'un CRC kataloğu yüzlerce algoritmayı bu biçimde listelemiştir. Cihaz belgesinde bu altı değer varsa "Özel algoritma" ile birebir yazabilirsiniz.

CRC ile checksum (sağlama toplamı) arasındaki fark nedir?

Basit sağlama toplamı (checksum) baytları toplar ya da XOR'lar; iki baytın yer değiştirmesi ya da birbirini götüren iki hata toplamı değiştirmediği için gözden kaçar. CRC ise her bitin konumunu hesaba katan bir polinom bölmesidir: tek bit hatasını ve genişliği kadar uzun ardışık bozulmayı her zaman yakalar, bayt yer değişimini de çok büyük olasılıkla fark eder. Bu yüzden Modbus, Ethernet ve ZIP basit toplam yerine CRC kullanır; NMEA (GPS cümleleri) ve Intel HEX gibi biçimler ise hâlâ basit sağlama toplamıyla çalışır, onların değeri bu araçla hesaplanmaz.

Aynı adı taşıyan farklı CRC'ler: CCITT, Modbus ve bayt sırası tuzağı

"CRC-16" tek bir hesap değildir. Aynı 0x1021 polinomunu kullanan CRC-16/CCITT-FALSE, XMODEM, KERMIT ve X-25, "123456789" için sırasıyla 29B1, 31C3, 2189 ve 906E verir; fark başlangıç değerinden (FFFF ya da 0000), bitlerin hangi uçtan işlendiğinden (yansıtma) ve sondaki XOR'dan gelir. Modbus da 0x8005 polinomunu kullanır ama başlangıç değeri FFFF'tir ve bitleri yansıtır. Cihaz belgesinde yalnız "CRC-16" yazıyorsa sonucu tek algoritmayla karşılaştırmak yerine "Hepsi" tablosuna bakın.

İkinci tuzak bayt sırasıdır. Modbus RTU, CRC'nin düşük baytını önce gönderir: hesap sonucu 0xCDC5 iken hatta görülen baytlar "C5 CD"dir. Yakalanan paketteki iki baytı olduğu gibi okuyup "C5CD" diye ararsanız eşleşme bulamazsınız. Araç bu yüzden her sonuçta iki bayt sırasını ayrı yazar ve beklenen değeri ters bayt sırasıyla da dener; ters eşleşmeyi "bayt sırası ters" notuyla gösterir. Metin girdisinde de satır sonu fark yaratır: Windows'ta satır sonu iki bayttır (0D 0A), Linux'ta tek bayt (0A); bir bayt fazlası CRC'yi tamamen değiştirir.

Hangi algoritmayı seçmelisiniz?

Kullandığınız protokol ya da dosya biçimi algoritmayı belirler; seçimi tahminle değil, aşağıdaki eşleşmelerle yapın. Belgede parametre tablosu varsa (polinom, başlangıç, yansıtma, son XOR) "Özel algoritma" ile o değerleri birebir yazabilirsiniz.

  • Modbus RTU (PLC, enerji analizörü, sürücü): CRC-16/MODBUS
  • XMODEM/YMODEM dosya aktarımı, birçok gömülü önyükleyici: CRC-16/XMODEM
  • Belgede "CRC-16-CCITT, başlangıç 0xFFFF" yazıyorsa: CRC-16/CCITT-FALSE (IBM-3740)
  • ZIP, PNG, gzip ve Ethernet: CRC-32 (ISO-HDLC)
  • ext4, Btrfs, iSCSI ve SSE4.2 donanım komutu: CRC-32C
  • Dallas/Maxim 1-Wire sensörler (DS18B20): CRC-8/MAXIM
  • XZ arşivleri: CRC-64/XZ

Sık sorulanlar

Modbus CRC nasıl hesaplanır?

Modbus RTU, CRC-16/MODBUS kullanır: polinom 0x8005 (yansıtılmış hali 0xA001), başlangıç değeri 0xFFFF, bitler yansıtılır, son XOR yoktur. Adres, fonksiyon kodu ve veri baytlarını hex olarak yazın; sonuç çerçevenin sonuna düşük bayt önce eklenir. "01 03 00 00 00 0A" için CRC 0xCDC5'tir ve gönderilen çerçeve "01 03 00 00 00 0A C5 CD" olur.

CRC-16 CCITT ile XMODEM arasındaki fark nedir?

İkisi de 0x1021 polinomunu kullanır; CRC-16/CCITT-FALSE hesaba 0xFFFF ile, XMODEM 0x0000 ile başlar. Bu yüzden aynı veride farklı sonuç verirler: "123456789" için CCITT-FALSE 29B1, XMODEM 31C3 çıkar. Belgenizde başlangıç değeri yazıyorsa ona göre seçin; yazmıyorsa iki sonucu da örnek bir paketle karşılaştırın.

Elimdeki CRC değerinin hangi algoritma olduğunu nasıl bulurum?

Bilinen bir paketi (veri + CRC) alın, veri baytlarını sol panele, CRC'yi "Beklenen CRC" kutusuna yazın ve algoritmayı "Hepsi" bırakın. Değeri veren satır "eşleşti" diye işaretlenir; bayt sırası ters yazılmışsa bu da ayrıca belirtilir. Hiçbiri tutmuyorsa CRC'nin hesaba dahil olmadığından ve verinin bayt bayt aynı olduğundan emin olun.

CRC-32 ile MD5 ya da SHA-256 aynı şey mi?

Hayır. CRC-32, iletim ve kayıt sırasında oluşan rastgele bozulmayı yakalamak için tasarlanmış hızlı bir kontrol değeridir; kasıtlı değişikliğe karşı koruma vermez, aynı CRC'yi veren farklı veri kolayca üretilebilir. Bir dosyanın değiştirilmediğini kanıtlamak için SHA-256 gibi kriptografik bir özet kullanılır.