Serial haberleşmede CRC nasıl kullanılır..

Başlatan mustafa_cmbz, 10 Temmuz 2018, 12:16:09

mustafa_cmbz

Merhabalar..

protonun basit serial komutlarına CRC nasıl ilave edilir?


sadogan

crc = 0
crc =crc ^ 1ci byte
crc =crc ^ 2ci byte
...
crc =crc ^ N inci byte
 
en basit olanı bu.
elde etiğiniz crc yi göndermek istediğiniz paketin sonuna ekleyin

mustafa_cmbz


mufitsozen

Alıntı yapılan: mustafa_cmbz - 10 Temmuz 2018, 13:01:06alıcı taraf nasıl olmalı ?

Alıntı yapılan: sadogancrc = 0
crc =crc ^ 1ci byte
crc =crc ^ 2ci byte
...
crc =crc ^ N inci byte
 
en basit olanı bu.
elde etiğiniz crc yi


aldiginiz CRC ile karsilastirarak hata olup olmadigini kontrol ediniz.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

sımışka

Alıntı yapılan: mustafa_cmbz - 10 Temmuz 2018, 13:01:06alıcı taraf nasıl olmalı ?


Gelen datanın tekrar CRC sini hesaplayıp, gelen CRC ile karşılaştırarak , datanın doğruluğunu anlayabilirsiniz. Kullandığınız mikrodenetleticinin CRC çevrebirimi var ise direk onu da kullanabilirsiniz.

mustafa_cmbz

Aradan 1 yıl geçmiş.Tekrar ihtiyaç olduğu için araştırma yaparken bulduğum kaynak epey işime yaradı buradan paylaşmak isterim..


http://muratyildirimoglu.com/makaleler/SikSorulanSorular1.htm



Alıntı Yap* CRC nedir?

        CRC Cyclic Redundancy Check sözcüklerinin baş harflerinden türetilmiş bir kısaltmadır ve verilerin hatalı olup olmadığını anlamamıza yardım eden bir yöntemi anlatır.

        Veri iletirken ya da saklarken ilettiğimiz/sakladığımız veri ile alınan verinin aynı olduğundan emin olmamız gerekir. Veriler iletim hattında bozunuma uğrarsa bunun farkedilmesi ve verilerin yeniden iletilmesi gerekir. CRC, bu amaçla kullanılır.

        CRC yönteminde bir blok içindeki veriler tek tek toplanır, bu toplam belirli bir sayıya bölünür (bu sayıya P diyelim) ve bölüm sonucunda çıkan kalan sayısı verilere eklenir. Karşı tarafta veri alındığında yine veriler tek tek toplanır ve bu toplamdan bölüm kalanı çıkartılır. Çıkartma sonucundaki sayı da  P'ye bölünür. Eğer veriler hatasız iletilmişse kalan sıfır olmalıdır.

        Bir örnek verelim:

                               VERİLER                                    CRC

        90     69     66     82     65     79     78     69            3

 

        Yukardaki verilerin rakamsal toplamı 598'dir. Örnekteki P sayımız da 17 olsun.

        Toplam=598

        P=17

        598/17=35, kalan=3

        Bu veri alındığında da şu işlem yapılır:

        (598-3)/17=35, kalan=0 (hatasız iletim)

        Eğer iletilen veriler hatalı ise bu verilerin toplamı 598 olmayacaktır, dolayısı ile kalan da 0 olmaz. Buradan verilerde bir bozulma olduğu anlaşılır ve veriler tekrar iletilir/saklanır. CRC'nin kelime anlamı da yapılan işlemi anlatır (dönemsel kalan kontrolü; dönemseldir, çünkü bütün veri bloklara bölünür ve CRC işlemi herbir blok için uygulanır)

        CRC yöntemi yüzde yüz  güvenilir bir yöntem değildir. Yine örneğimizdeki verilere dönersek altıncı verinin 79 değil de 96 olacak şekilde bozulduğunu varsayalım (yani P kadar). Bu durumda karşı tarafın eline geçen verilerin toplamı 615 olacaktır. CRC işlemini uyguladığımızda:

        (615-3)/17=36, kalan=0

        Yani, bir hatalı iletim söz konusu olduğu halde bu hata farkedilememiştir. Ama verilerin P ve P'nin katları kadar bozulma olasılığı hayli düşüktür. Bu yüzden hataların büyük bölümü CRC yöntemi ile saptanabilir.

mustafa_cmbz

   

  TX kısmı için :

 
CRC_HESAPLA:
  CRC_HESAP=ORTAM_NET_ISI/17
  CRC = ORTAM_NET_ISI - CRC_HESAP  
  Return


  RX kısmı için :

 
  CRC_HESAPLA:
  CRC_SONUC=(ORTAM_NET_ISI - CRC)/17
  Return