Veri Yolda Bozulursa? Parity Bit ve CRC (Döngüsel Redundans Kontrolü) Mantığı

Dijital haberleşmede veriyi bir noktadan diğerine göndermek işin sadece ilk kısmıdır. Asıl zorluk, gönderilen verinin karşı tarafa hiç bozulmadan, eksiksiz ve doğru ulaştığından emin olmaktır.

Özellikle endüstriyel ortamlarda, yüksek gerilim hatlarının ve motorların oluşturduğu elektriksel gürültüler kablodaki 1leri 0a, 0ları 1e dönüştürebilir. Peki, alıcı cihaz yolda bir şeylerin ters gittiğini nasıl anlar? İşte burada devreye Hata Kontrol Mekanizmaları (Data Integrity) girer.

1. Parity Bit (Eşlik Biti): En Basit Koruma Kalkanı

Parity bit, seri haberleşmede (özellikle UART/UART-TTL) gönderilen her 7 veya 8 bitlik veri paketinin arkasına eklenen 1 bitlik en temel hata kontrol yöntemidir. İki türü vardır:

  • Even Parity (Çift Eşlik): Verideki 1lerin toplam sayısı sayılır. Eğer toplam sayı tek ise, parity biti 1 yapılarak toplam sayı çift hale getirilir. Toplam zaten çiftse parity 0 olur.
  • Odd Parity (Tek Eşlik): Verideki 1lerin toplam sayısı sayılır. Toplam sayı çift ise, parity biti 1 yapılarak toplam sayı tek hale getirilir. Toplam zaten tekse parity 0 olur.

Parity Bit’in Sınırı Nedir?

Parity bit sadece tek sayıda bit değişimini (1 bit, 3 bit vb.) yakalayabilir. Eğer gürültü aynı anda 2 biti birden bozarsa (örneğin iki adet 1 sayısı 0 olursa), toplam çift/tek dengesi değişmeyeceği için alıcı hatayı fark edemez. Bu yüzden kritik endüstriyel sistemlerde tek başına asla yeterli değildir.

İşte gönderdiğin image_383b41.jpg görselindeki içeriğin, hazırladığın makale formatına ve teknik diline uygun Türkçe çevirisi:

Eşlik Kontrolü (Parity Checking)

Geleneksel olarak, normal bir ASCII karakterini temsil etmek için 7 bit kullanılır ve 8. bit olarak eşlik biti (parity bit) eklenir. Bu senaryoda, cihazlar arasında veri gönderimi çift eşlik (even parity) yöntemi kullanılarak yapılmaktadır. Aşağıda, hem gönderici hem de alıcı tarafındaki veri örnekleri verilmiştir:

KarakterGönderici (Sender)Eşlik Biti (Parity Bit)Alıcı (Receiver)Eşlik Durumu (Parity)
“E”1000101110001011Çift (Even)
“A”1000001010000010Çift (Even)
“C”1000011111100111Çift (Even)
“q”1110001011100000Tek (Odd) Hata!

Sorunlar / Sınırlar (Issues):

  • Çift sayıda bit değişimi (bit swap) meydana geldiğinde hatalar tespit edilemez; çünkü bu durum üzerinde anlaşılan eşlik yapısını (tek veya çift olma durumunu) bozmaz ve korur.
  • Her byte’a fazladan bir bit eklemek, iletilen toplam veri miktarında önemli bir artışa neden olur.

2. CRC (Cyclic Redundancy Check): Matematiksel Güvence

Daha büyük veri paketlerini (örneğin bir Modbus çerçevesini) korumak için çok daha güçlü bir algoritmaya ihtiyaç duyarız: CRC (Döngüsel Redundans Kontrolü).

CRC, gönderilecek tüm veri paketini matematiksel bir işleme tabi tutar. Bu işlem, lise yıllarından bildiğimiz polinom bölmesine dayanır.

CRC Nasıl Çalışır?

  1. Gönderici Tarafı: Gönderilecek veri blok halinde alınır. Önceden standart olarak belirlenmiş özel bir “bölen” sayısına (Polinom) ikilik (binary) tabanda bölünür. Bu bölme işleminden kalan (remainder) değer, CRC kodu olarak paketinin sonuna eklenir.
  2. Alıcı Tarafı: Paket alıcıya ulaştığında, alıcı tüm paketi (veri + CRC) aynı bölen sayısına tekrar böler.
  3. Sonuç: Eğer kalan 0 (sıfır) ise veri yolda hiçbir bozulmaya uğramamıştır. Kalan sıfırdan farklıysa, paket yolda gürültüye kurban gitmiştir ve derhal çöpe atılır (Drop edilir).

3. Pratik Bir Örnek: Modbus RTU Paket Yapısı

Endüstride en sık kullanılan protokollerden biri olan Modbus RTU paketini incelediğimizde bu yapıyı net bir şekilde görürüz. Bir Modbus paketi temel olarak şu elemanlardan oluşur:

Cihaz Adresi (Slave ID)Fonksiyon KoduVeri (Data)Hata Kontrolü (CRC-16)
1 Byte1 ByteN Byte (Sensör değerleri vb.)2 Byte (16 Bit)

Modbus Paketinin Sonundaki O 2 Byte Ne İşe Yarar?

Öğrencilerin veya sektöre yeni giren mühendislerin Modbus paketlerinde en çok kafasını karıştıran yer, paketin sonunda gördükleri 0x4A 0x35 gibi anlamsız duran 2 byte’lık (16 bit) veridir.

Bu 2 byte, CRC-16 değeridir. Gönderici cihaz (örneğin bir PLC), paketin başındaki Slave ID, Fonksiyon Kodu ve Veri kısımlarını CRC-16 algoritmasından geçirerek bu 2 byte’ı hesaplar ve paketin sonuna yapıştırır.

  • Eğer CRC Olmasaydı: Sıcaklık sensöründen gelen 25°C verisi, yoldaki gürültü yüzünden alıcıya 125°C olarak ulaşabilirdi. Fabrikadaki sistem bu yanlış veriye dayanarak acil durdurma (trip) moduna geçebilir veya üretimi bozabilirdi.
  • CRC Sayesinde: Alıcı (Master cihaz), gelen paketin matematiksel sağlamasını yapar. Eğer yolda tek bir bit bile değiştiyse, alıcının hesapladığı CRC ile paketin sonundaki CRC uyuşmaz. Alıcı bu paketi geçersiz sayar ve veriyi tekrar talep eder (Retry).

Özet: Hata Kontrol Türlerinin Karşılaştırması

  • Parity Bit: Byte düzeyinde (karakter karakter) çok basit ve hızlı kontrol sağlar. Sadece 1 bitlik hataları yakalar. Genellikle gömülü sistemlerin kendi aralarındaki kısa UART hatlarında ek bir güvenlik katmanı olarak açılır.
  • CRC (Checksum/Döngüsel Kontrol): Paket düzeyinde (blok halinde) kontrol sağlar. %99.99’un üzerinde bir başarı oranıyla çoklu bit hatalarını, ardışık (burst) hataları anında yakalar. Ağ protokollerinin (Modbus, Ethernet, CAN-Bus) vazgeçilmezidir.

CRC Çalışma Prensibi

CRC (Döngüsel Kırmızı Kontrolü), verinin hatasız bir şekilde iletildiğini doğrulamak için kullanılan güçlü bir hata kontrol mekanizmasıdır. Bu yöntem, polinomsal aritmetiğe dayanır. Verilen kurala göre CRC işleminin adımları şöyledir:

Adım 1: Mesajın Hazırlanması Başlangıç verisine (dataword), bölenin (divisor) uzunluğundan bir eksik sayıda (k-1) sıfır eklenir.

Adım 2: Modülo-2 Bölme İşlemi Hazırlanan veri, önceden belirlenmiş olan polinomsal bölen ile modülo-2 aritmetiği kullanılarak bölünür. Bu işlemde çıkarma yerine XOR kullanılır.

Adım 3: Kalanın (CRC) Hesaplanması Modülo-2 bölme işleminin sonucunda elde edilen kalan, CRC kodunu oluşturur. CRC kodunun uzunluğu da k-1 bittir.

Adım 4: Kod Kelimesinin (Codeword) Oluşturulması Gönderilecek olan kod kelimesi, orijinal veri ile hesaplanan CRC kodunun birleştirilmesiyle elde edilir.

Gönderici ve Alıcı Tarafındaki İş Akışı:

Aşağıdaki şemalar, bu adımların gönderici ve alıcı taraflarında nasıl uygulandığını görselleştirmektedir.

Gönderici Tarafı (Veri Gönderimi):

  • Orijinal veri (m bit), n bitlik sıfır ile genişletilir.
  • Elde edilen veri, önceden belirlenmiş bir bölen ile modülo-2 aritmetiğine göre bölünür.
  • Bu bölme işleminden elde edilen kalan, CRC kodunu oluşturur.
  • Kanal üzerinden iletilen kod kelimesi, orijinal veri ile hesaplanan CRC kodunun birleştirilmesiyle oluşur.

Görseldeki süreç şu şekildedir:

1. Hazırlık Aşaması (Gönderici)

  • Orijinal Mesaj: Gönderilmek istenen ana veri: 1010000 [cite: 11].
  • Oluşturucu Polinom (Generator Polynomial): Haberleşme standartlarında belirlenmiş olan bölen polinom. Örnekte $x^3+1$ kullanılmıştır.
    • Bu polinomun katsayıları alınarak binary (ikilik) koda dönüştürülür: $1x^3 + 0x^2 + 0x^1 + 1x^0$.
    • Bu katsayılardan elde edilen Bölen (CRC Oluşturucu): 1001 [cite: 11].
  • Sıfır Ekleme (Appending Zeros): Bölenin uzunluğu 4 bit ($n=4$). Kurala göre, orijinal mesajın sonuna $(n-1)$ yani $4-1=3$ adet sıfır eklenir.
    • İşlem yapılacak yeni veri (Yük): $1010000$ $+$ $000$ $=$ 1010000000 [cite: 11].

2. Gönderici Tarafı (Hesaplama)

Bu aşamada, hazırlanan yük verisi, oluşturucu (1001) ile Modülo-2 Bölme işlemine tabi tutulur. Modülo-2 bölmesinde normal çıkarma yerine XOR (Özel Veya) mantık işlemi uygulanır [cite: 11].

  • Bölme İşlemi Adımları (image_11.png sol taraf):
    1. Verinin başındaki $1010$, $1001$’e bölünür. Kalan: $0011$.
    2. Yükten bir basamak aşağı indirilir ($1010000000$). Yeni sayı: $00110$.
    3. $00110$, $1001$’e bölünür (başındaki 1’e bakılır). XOR uygulanır.
    4. Bu işlem yükün tüm basamakları tükenene kadar devam eder.
  • Sonuç: Bölme işleminin sonunda elde edilen Kalan (CRC): 0011 [cite: 11].
  • İletilecek Mesajın Oluşturulması: Orijinal mesajın sonuna, hesaplanan bu CRC değeri eklenir.
    • Orijinal: $1010000$ $+$ CRC: $011$ $=$ 1010000011 [cite: 11].
    • İletilecek Mesaj: 1010000011 [cite: 11]. Bu veri kablo üzerinden alıcıya gönderilir.

3. Alıcı Tarafı (Kontrol)

Alıcı, kablo üzerinden gelen mesajı alır. Örnekte, iletim sırasında verinin bozulmadığı varsayılmaktadır.

  • Gelen Mesaj: 1010000011 [cite: 11].
  • Kontrol İşlemi: Alıcı, gönderici ile aynı oluşturucuyu (1001) kullanır ve gelen mesajı tekrar Modülo-2 bölmesine tabi tutar (image_11.png sağ taraf) [cite: 11].
  • Sonuç: Eğer veri bozulmadıysa, bu bölme işleminin sonunda kalan 0000 (sıfır) olmalıdır.
    • Örnekte kalan 0000 olarak bulunmuştur [cite: 11].

4. Karar

Görselin en altında belirtildiği gibi:

“Sıfır, verinin kabul edildiği anlamına gelir” [cite: 11].

  • Kalan sıfır olduğu için alıcı, “Bu veri yolda bozulmamış, güvenilirdir” diyerek veriyi işlemeye devam eder.
  • Not: Eğer iletim sırasında tek bir bit bile değişseydi, alıcının yapacağı bölme işleminde kalan sıfırdan farklı çıkacak ve veri reddedilecekti.

Anahtar Kelimeler: CRC nedir, Parity bit, Hata kontrolü, Modbus RTU paket yapısı, CRC-16, Veri bütünlüğü, Data integrity, Seri haberleşme hataları

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir