Thursday, June 12, 2014

Mengenal CRC pada komunikasi digital

Apa itu CRC?


CRC (Cyclic Redudancy Check) adalah kode untuk mendeteksi kesalahan pada pengiriman paket data. Paket data yang akan dikirim terlebih dahulu akan dihitung melalui rumus ini sehingga menghasilkan data kode, kemudian  dikirim bersama paket data aslinya. Disisi penerima, paket data yang diterima akan dihitung dengan rumus yang sama dan hasilnya dibandingkan dengan kode diterima. Jika hasil perhitungan tidak sama dengan kode yang diterima berarti paket data yang dikirim salah dan tidak boleh diproses.



Ada beberapa type standar CRC mulai CRC 1 atau yang disebut parity sampai dengan CRC 64 bit.

b (x) -> ditransmisikan kata kode 
q (x) -> quotient 
i (x) -> Informasi polinomial 
r (x) -> sisa polinomial 
g (x) -> dihasilkan polynomial 

Langkah 1: x ^ (n-k) * i (x) 

Langkah 2: r (x) = (x ^ (n-k) * i (x))% g (x) 

Langkah 3: b (x) = (x ^ (n-k) * i (x)) XOR dengan r (x) 
         yang menghasilkan sebuah kata kode ditransmisikan. 

b ini (x) adalah mengirim ke ujung penerima dari pengirim dan jika u membagi 
ditransmisikan kata kode yaitu b (x) dengan g (x) dan jika sisanya 
yaitu r (x) sama dengan 0 pada akhir penerima maka tidak ada kesalahan 
jika tidak ada kesalahan dalam kata kode ditransmisikan selama 
transmisi dari pengirim ke penerima. 

Dengan cara ini akan sangat membantu dalam deteksi kesalahan.


==================================================
Berikut saya contohkan CRC yang digunakan untuk protokol Modbus,


unsigned int crc16(char *data,int panjang)
{
 unsigned int hsl,i,j;
 char odd;
 hsl=0xFFFF;
 for(i=0;i<panjang;i++)
  {
   hsl=(hsl&0xFF00)|((hsl&0xFF)^data[i]);
   for(j=0;j<8;j++)
    {
     odd=hsl&1;
     hsl=((hsl&0xFFFE)/2)&0x7FFF;
     if(odd)
      hsl=hsl^0xA001;
    }

  }
 return hsl;
}

0 comments:

Post a Comment