• Tidak ada hasil yang ditemukan

Perancangan dan Implementasi Encoder dan Decoder CRC-8 untuk Pendeteksian Error pada Transmisi Data antar Perangkat IoT

N/A
N/A
Protected

Academic year: 2023

Membagikan "Perancangan dan Implementasi Encoder dan Decoder CRC-8 untuk Pendeteksian Error pada Transmisi Data antar Perangkat IoT"

Copied!
9
0
0

Teks penuh

(1)

Donny Priyadi, Copyright © 2022, MIB, Page 1677

Perancangan dan Implementasi Encoder dan Decoder CRC-8 untuk Pendeteksian Error pada Transmisi Data antar Perangkat IoT

Donny Priyadi, Theophilus Wellem*

Fakultas Teknologi Informasi, Program Studi Teknik Informatika, Universitas Kristen Satya Wacana, Salatiga, Indonesia Email: 1[email protected], 2,*[email protected]

Email Penulis Korespondensi: [email protected]

Abstrak−Cyclic Redundancy Check (CRC) merupakan kode pendeteksi error yang digunakan secara luas pada sistem komunikasi digital untuk mendeteksi error pada data yang ditransmisikan antara transmitter dan receiver. Dengan berkembangnya pemanfaatan teknologi Internet-of-Things (IoT) di mana terdapat banyak perangkat yang saling berkomunikasi secara nirkabel, penerapan kode pendeteksi error seperti CRC merupakan hal yang penting untuk mendapatkan komunikasi yang handal (reliable). Komputasi CRC dapat diimplementasikan pada perangkat keras menggunakan linear feedback shift register (LFSR) atau pada perangkat lunak dengan operasi shift dan bitwise exclusive OR (XOR) untuk pembagian polynomial.

Oleh karena seringnya pemanfaatan CRC pada komunikasi nirkabel (wireless) untuk IoT, penelitian untuk pengembangan dan implementasi CRC terus dilakukan hingga saat ini. Penelitian ini bertujuan untuk merancang dan mengimplementasikan algoritma perhitungan CRC-8 dengan generator polynomial 0x07 pada perangkat IoT. Dua algoritma untuk komputasi CRC, yaitu komputasi secara bitwise dengan LFSR dan menggunakan tabel lookup, diimplementasikan pada board Arduino Uno R3.

Dua board Arduino yang dihubungkan secara serial digunakan untuk menguji implementasi dari encoder dan decoder pada proses transmisi data dan pendeteksian error. Dari pengujian yang dilakukan didapatkan hasil bahwa encoder dapat menghitung nilai CRC dari input data dengan benar. Selanjutnya, komputasi menggunakan tabel lookup membutuhkan waktu yang sekitar empat kali lebih cepat dibandingkan dengan komputasi secara bitwise, tetapi dengan penggunaan memori yang lebih besar.

Sebaliknya, komputasi secara bitwise hanya membutuhkan sedikit memori, tetapi waktu komputasinya lebih lambat. Pada pengujian dengan input data sepanjang 128 karakter, encoder dengan bitwise membutuhkan waktu perhitungan sebesar 2.37 milidetik, sedangkan encoder dengan tabel lookup membutuhkan waktu perhitungan sebesar 0.5 milidetik. Selanjutnya, untuk pengujian error detection didapatkan bahwa receiver dapat mendeteksi error pada data yang ditransmisikan dengan persentase 100%.

Kata Kunci: Cyclic Redundancy Check (CRC); Deteksi Error; Kode Pendeteksi Error; Internet-Of-Things; Arduino

Abstract−Cyclic Redundancy Check (CRC) is a widely used error detection code in digital communication systems to detect errors in data transmitted between transmitter and receiver. With the development of Internet-of-Things (IoT) technology, where many devices communicate wirelessly, the application of error detection codes such as CRC is essential to obtain reliable communication. The computation of CRC can be implemented in hardware using a linear feedback shift register (LFSR) or in software with shift and bitwise exclusive OR (XOR) operations for polynomial division. Due to the frequent use of CRC in wireless communication for IoT, research for the design and implementation of CRC continues to this day. This study aims to design and implement the encoder and decoder of CRC-8 with generator polynomial 0x07 on IoT devices. Two algorithms for computing the CRC, namely bitwise computation using LFSR and another one using lookup tables, are implemented on the Arduino Uno R3 board. Two Arduino boards connected in serial were used to verify the encoder and decoder implementation in the data transmission and error detection process. The experiment results showed that the encoder could correctly calculate the CRC value from the input data. Furthermore, the computation using lookup tables takes about four times faster than the bitwise method but requires more memory. In contrast, the bitwise computation method requires less memory but slower computation time. When testing using input data of 128 characters, the bitwise-based encoder requires a computation time of 2.37 milliseconds, while the lookup table-based encoder utilizing a lookup table requires a computation time of 0.5 milliseconds. In the error detection test, the results demonstrated that the receiver could detect errors in the transmitted data with a percentage of 100%.

Keywords: Cyclic Redundancy Check; Error Detection; Error Detection Code; Internet-Of-Things; Arduino

1. PENDAHULUAN

Sistem komunikasi data digital seperti jaringan seluler (4G/5G), jaringan komputer (Ethernet), Bluetooth, maupun komunikasi serial (USB) dapat mengalami gangguan yang disebabkan oleh pelemahan sinyal (attenuation), interferensi, dan noise yang berasal dari luar sistem atau dari dalam sistem tersebut (misalnya, thermal noise).

Berbagai gangguan ini dapat menyebabkan sinyal yang diterima oleh penerima (receiver) berbeda dengan sinyal asli yang ditransmisikan oleh pengirim (sender) dan terjadi error pada data dikirimkan [1]. Untuk memastikan bahwa error pada data yang ditransmisikan dapat dideteksi dan dikoreksi oleh penerima, protokol data link pada sistem komunikasi data umumnya menerapkan kode pendeteksi kesalahan (error detection code) dan kode pengoreksi kesalahan (error correction code) [2]. Secara umum, kode pendeteksi kesalahan hanya mendeteksi apakah terdapat error pada data atau frame yang diterima. Jika terdapat error, maka frame yang diterima akan dibuang (discarded) dan penerima akan meminta pengirim untuk mentransmisikan ulang frame yang mengalami error (retranmission). Sebaliknya, jika tidak terdapat error, maka frame akan diproses lebih lanjut dan diberikan pada aplikasi yang sesuai. Berbeda dengan kode pendeteksi kesalahan, kode pengoreksi kesalahan digunakan untuk mendeteksi sekaligus mengoreksi error pada data (sesuai dengan spesifikasi kode yang digunakan) sehingga pengirim tidak perlu mentransmisikan ulang data yang mengalami error. Kode pengoreksi kesalahan umumnya diaplikasikan pada jalur komunikasi dengan delay yang signifikan atau memiliki bandwidth yang terbatas untuk

(2)

Donny Priyadi, Copyright © 2022, MIB, Page 1678 menghemat sumber daya (resources) yang digunakan dalam komunikasi. Selain pada sistem komunikasi, kode pendeteksi kesalahan dan kode pengoreksi kesalahan juga digunakan pada sistem penyimpanan (storage system/device) seperti hardisk dan flash memory [3].

Cyclic Redundancy Check (CRC) [4][5] merupakan salah satu kode yang digunakan untuk mendeteksi adanya error pada data (error detection code) yang dikirimkan dalam jaringan komputer atau pada data yang disimpan pada sistem penyimpanan. Pada teknik deteksi error menggunakan CRC, sejumlah bit yang disebut dengan checksum atau check bit akan ditambahkan pada data yang akan ditransmisikan. Check bit atau nilai CRC ini dihitung pada sisi pengirim menggunakan CRC encoder. Penerima kemudian menggunakan nilai CRC ini untuk mendeteksi apakah terdapat error pada data yang diterima. CRC didasarkan pada kode siklik (cyclic code) sehingga secara umum cara komputasinya (encoding/decoding) mirip dengan kode siklik yang lain. Saat ini terdapat beberapa jenis CRC yang umum digunakan, misalnya CRC-8, CRC-10, CRC-12, CRC-16, dan CRC-32.

Suatu kode CRC didefinisikan melalui suatu polynomial 𝑔(𝑥) yang disebut dengan generator polynomial seperti yang ditunjukkan pada Tabel 1 [1][6]. Dengan semakin meningkatnya data transfer rate pada jaringan dari Megabit per detik (Mbps), Gigabit per detik (Gbps) menuju Terabit per detik (Tbps), kecepatan pemrosesan frame

— termasuk di dalamnya komputasi CRC— untuk menghitung Frame Check Sequence (FCS) atau checksum oleh protokol pada data link layer juga harus ditingkatkan agar pemrosesan frame tidak mengalami delay yang signifikan. Selain itu, dengan semakin meningkatnya pemanfaatan teknologi Internet-of-Things (IoT) di mana akurasi data pada komunikasi antar transmitter dan receiver merupakan hal yang penting, pemanfaatan kode pendeteksi kesalahan seperti CRC diperlukan untuk mendeteksi adanya error pada data yang ditransmisikan [7].

Tabel 1. Generator polynomial untuk beberapa kode CRC

Code Generator Polynomial 𝒈(𝒙)

Jumlah CRC

bit

Penggunaan

CRC-4 𝑥4+ 𝑥 + 1 4 ITU G.704, IEEE 802.11ah

CRC-8-CCITT 𝑥8+ 𝑥2+ 𝑥 + 1 8 ATM Header Error Control

CRC-10 𝑥10+ 𝑥9+ 𝑥5+ 𝑥4+ 𝑥 + 1 10 ATM Adaptation Layer

CRC-12 𝑥12+ 𝑥11+ 𝑥3+ 𝑥2+ 𝑥 + 1 12 Telecom system

CRC-16-CCITT 𝑥16+ 𝑥12+ 𝑥5+ 1 16 HDLC, Bluetooth, XMODEM

CRC-16-ANSI 𝑥16+ 𝑥15+ 𝑥2+ 1 16 USB, Modbus

CRC-24 𝑥24+ 𝑥10+ 𝑥9+ 𝑥6+ 𝑥4+ 𝑥3+ 𝑥 + 1 24 Bluetooth CRC-32 IEEE 802 𝑥32+ 𝑥26+ 𝑥23+ 𝑥22+ 𝑥16+ 𝑥12+ 𝑥11+

𝑥10+ 𝑥8+ 𝑥7+ 𝑥5+ 𝑥4+ 𝑥2+ 𝑥 + 1

32 Local Area Network (LAN)

Oleh karena luasnya penggunaan CRC pada berbagai sistem komunikasi data mulai dari Universal Serial Bus (USB), Ethernet, komunikasi seluler, hingga IoT, penelitian yang berkaitan dengan algoritma perhitungan CRC untuk menghasilkan komputasi yang cepat dan efisien terus dilakukan [8]–[10] hingga saat ini, meskipun kode CRC telah ada sejak tahun 1960-an. Secara umum implementasi CRC banyak dilakukan pada perangkat keras (hardware) baik menggunakan Field Programmable Gate Array (FPGA) maupun Application-specific Integrated Circuit (ASIC). Penelitian ini bertujuan untuk merancang dan mengimplementasikan encoder untuk CRC-8 dengan generator polynomial 𝑥8+ 𝑥2+ 𝑥 + 1 yang umum digunakan dalam berbagai standar sistem komunikasi. CRC-8 dipilih pada penelitian ini karena hanya memerlukan resource (memori) yang kecil sehingga cocok untuk diterapkan pada perangkat IoT. Sebagai contoh, hanya dibutuhkan memori sebesar 256 byte untuk menyimpan tabel lookup dalam perhitungan CRC-8. Untuk implementasi CRC-8 encoder pada penelitian ini, nilai CRC akan dihitung menggunakan dua metode yaitu: 1) cara konvensional yang dikenal juga dengan istilah komputasi secara bitwise dan 2) menggunakan algoritma yang memanfaatkan lookup table. Implementasi dilakukan menggunakan bahasa pemrograman C/C++ pada platform Arduino yang menggunakan mikrokontroller Atmel AVR ATmega328P [11]. Meskipun penelitian ini berfokus pada implementasi encoder pada sisi pengirim, CRC-8 decoder juga diimplementasikan untuk pengujian deteksi error pada penerima. Implementasi untuk CRC decoder tidak dibahas secara detail karena decoder menggunakan teknik yang serupa dengan encoder (yaitu melakukan operasi pembagian antara codeword yang diterima dengan generator polynomial) dan hanya berbeda pada input data yang diberikan kepada decoder.

Kajian (review) terhadap beberapa penelitian terdahulu yang berkaitan dilakukan agar dapat memberikan gambaran yang lebih luas mengenai topik penelitian ini. Saleh dan Sudiro [12] mengimplementasikan CRC-8 encoder dan decoder menggunakan hardware description language VHDL pada Xilinx Spartan-3E FPGA (xc3s100s-5vq100). Hasil yang diukur pada penelitian tersebut adalah penggunaan sumber daya perangkat keras (hardware resources) pada FPGA. Natalia, dkk. [13] mengimplementasikan CRC-8 encoder dan decoder menggunakan Simulink [14] dan TMS320C6416T yang merupakan fixed-point digital signal processor (DSP) dari Texas Instruments. CRC-16 juga diimplementasikan pada penelitian tersebut. Pengujian hasil implementasi pada penelitian tersebut difokuskan pada perbandingan kemampuan pendeteksian error antara CRC-8 dan CRC- 16, bukan pada hardware resource yang digunakan karena implementasi dilakukan menggunakan perangkat lunak (software). Panda dan Kumar [15] melakukan implementasikan dua jenis CRC-8 encoder untuk ATM HEC

(3)

Donny Priyadi, Copyright © 2022, MIB, Page 1679 (header error control) yaitu encoder dengan input data secara serial dan encoder yang menerima input data secara paralel. Implementasi dilakukan menggunakan hardware description language Verilog pada Xilinx Spartan-3 FPGA. Sintesis kemudian dilakukan menggunakan perangkat lunak Cadence Encounter. Dari hasil implementasi tersebut disimpulkan bahwa input data CRC secara paralel dengan menggunakan multi-output LFSR lebih baik dari aspek konsumsi daya dan pemanfaatan area chip. Saleh, dkk. [16] merancang dan melakukan simulasi CRC- 8 encoder dan decoder menggunakan VHDL pada Xilinx FPGA. Novaldi, dkk. [17] mengimplementasikan sistem pendeteksi error menggunakan CRC-8 pada komunikasi serial antar dua Arduino board. Hasil dari penelitian tersebut menunjukkan bahwa sistem yang dirancang dapat mendeteksi error pada data dengan akurat. Selain itu diperoleh bahwa penggunaan komunikasi UART (Universal Asynchronous Receiver Transmitter) membutuhkan waktu yang lebih cepat daripada sistem dengan SPI atau I2C. Berbeda dengan penelitian-penelitian yang disebutkan di atas, penelitian ini berfokus pada implementasi encoder pada perangkat IoT menggunakan dua metode perhitungan CRC-8 yang berbeda, yaitu komputasi secara bitwise dan komputasi menggunakan tabel lookup.

2. METODOLOGI PENELITIAN

2.1 Tahapan Penelitian

Tahapan yang dilakukan untuk melaksanakan penelitian ini ditunjukkan pada Gambar 1 dan dapat dijelaskan sebagai berikut. Penelitian dimulai dengan melakukan identifikasi permasalahan yang berhubungan dengan pemanfaatan kode CRC untuk mendeteksi error pada data serta perancangan encoder dan decoder-nya. Pada tahap ini juga dilakukan studi literatur mengenai kode CRC baik dari buku teks maupun penelitian-penelitian sebelumnya untuk mempelajari metode atau algoritma yang digunakan untuk perhitungan CRC-8. Selanjutnya pada tahap kedua dilakukan analisis kebutuhan (misalnya, perangkat lunak atau perangkat keras yang akan digunakan) untuk melakukan perancangan dan implementasi encoder CRC-8. Tahap berikutnya adalah perancangan dan implementasi di mana algoritma untuk menghitung CRC-8 didesain dan diimplementasikan dalam bentuk perangkat lunak dan perangkat keras. Setelah tahap ini dilakukan pengujian untuk memastikan bahwa implementasi yang dilakukan sudah tepat dan hasil perhitungan CRC-8 diverifikasi apakah telah sesuai dengan teori yang ada. Tahap terakhir dari penelitian ini adalah menyimpulkan hasil penelitian dan menulis laporan hasil penelitian.

Gambar 1. Tahapan Pelaksanaan Penelitian 2.2 Teori Cyclic Redundancy Check (CRC)

Komputasi FCS atau checksum yang dilakukan untuk data yang akan ditransmisi oleh pengirim menggunakan CRC dapat dijelaskan sebagai berikut [1][18]. Diberikan blok data (dataword) sepanjang k-bit, pengirim kemudian akan menghitung n-k bit checksum untuk k-bit data tersebut. Selanjutnya, n-k bit checksum ini akan disambungkan (appended) pada k-bit dataword sehingga membentuk n-bit codeword. Proses ini merupakan proses yang dilakukan oleh CRC encoder pada sisi pengirim. Dari proses ini dapat dilihat bahwa untuk k-bit data, pengirim akan mentransmisikan n-bit codeword (k-bit dataword ditambah n-k bit checksum) sehingga terdapat n-k redundant bit yang ditransmisikan bersama dengan data. Dari redundant bit inilah, penerima dapat mendeteksi error pada data yang diterima. Analisis pada kode siklik seperti CRC umumnya akan lebih mudah dipahami jika data direpresentasikan sebagai suatu polynomial dalam binary field GF(2). Dengan menggunakan representasi polynomial, data biner dapat ditulis sebagai polynomial dengan koefisien 0 dan 1. Sebagai contoh, data 8-bit 11011101 direpresentasikan dengan polynomial 𝑥7+ 𝑥6+ 𝑥4+ 𝑥3+ 𝑥2+ 1. Secara matematis, proses pengkodean (encoding) CRC diformulasikan sebagai berikut (dalam representasi polynomial).

𝑟(𝑥) = (𝑥𝑛−𝑘𝑑(𝑥))mod 𝑔(𝑥) (1)

dan

𝑐(𝑥) = 𝑥𝑛−𝑘𝑑(𝑥) + 𝑟(𝑥) (2)

di mana 𝑐(𝑥) adalah n-bit codeword yang akan ditransmisikan oleh pengirim (transmitter atau sender), 𝑚(𝑥) adalah k-bit dataword, 𝑟(𝑥) = n-k bit checksum (nilai CRC), dan 𝑔(𝑥) adalah generator polynomial. Nilai

(4)

Donny Priyadi, Copyright © 2022, MIB, Page 1680 n-k sama dengan derajat dari generator polynomial 𝑔(𝑥). Semua perhitungan dilakukan menggunakan aritmetika polynomial dalam binary field GF(2) di mana operasi penjumlahan ekivalen dengan operasi logika XOR dan operasi perkalian ekivalen dengan operasi logika AND. Dapat dilihat bahwa perhitungan checksum dilakukan dengan pembagian polynomial antara data (yang telah ditambah dengan n-k bit ‘0’) dengan generator polynomial 𝑔(𝑥). Selanjutnya, sisa hasil pembagian (remainder, 𝑟(𝑥)) diambil sebagai checksum. Pada sisi penerima, decoder melakukan pembagian antara polynomial codeword 𝑐(𝑥) dengan generator polynomial 𝑔(𝑥) sebagai berikut.

𝑟′(𝑥) = 𝑐(𝑥) mod 𝑔(𝑥) (3)

Jika sisa hasil pembagian (𝑟′(𝑥)) sama dengan nol, maka dapat dikatakan bahwa tidak terdapat error pada data. Sebaliknya, jika sisa hasil pembagian tidak sama dengan nol, maka terdapat error pada data dan penerima akan membuang data yang diterima.

Perhitungan nilai CRC dapat implementasikan secara serial, paralel, atau menggunakan tabel lookup (lookup table). Pada implementasi secara serial, input data diberikan kepada encoder secara serial (bit per bit) dan umumnya encoder diimplementasikan menggunakan linear feedback shift register (LFSR) seperti yang ditunjukkan pada Gambar 2. Implementasi CRC encoder secara paralel menerima input data dalam bentuk blok bit atau byte. Pada komputasi CRC yang menggunakan lookup table, nilai CRC dihitung terlebih dahulu dan disimpan pada tabel. Encoder kemudian melakukan perhitungan nilai CRC dengan memanfaatkan atau melakukan operasi matematika terhadap nilai-nilai yang disimpan pada tabel tersebut.

Gambar 2. Arsitektur CRC encoder secara umum menggunakan LFSR

Pada arsitektur yang ditunjukkan pada Gambar 1, jumlah register dan operasi XOR yang digunakan bergantung pada jenis CRC yang akan diimplementasikan (CRC-4, CRC-8, CRC-16 dan seterusnya) dan generator polynomialnya.

3. HASIL DAN PEMBAHASAN

Pada bagian ini dijelaskan hasil dari perancangan dan implementasi CRC-8 encoder. Seperti yang telah disebutkan sebelumnya, komputasi nilai CRC dapat dilakukan secara serial, paralel, atau menggunakan tabel lookup. Pada penelitian ini, encoder yang diimplementasikan menghitung nilai CRC secara serial dan menggunakan tabel lookup. Implementasi encoder dilakukan pada perangkat Arduino Uno R3 [19].

3.1 Implementasi Perangkat Lunak

Seperti yang telah disinggung sebelumnya, perhitungan nilai CRC-8 yang dilakukan oleh encoder pada sisi pengirim pada dasarnya adalah operasi pembagian (division) antara dataword yang telah ditambahkan dengan 8- bit ‘0’ dengan suatu generator polynomial. Untuk CRC-8 dengan generator polynomial 𝑥8+ 𝑥2+ 𝑥 + 1, LFSR pada Gambar 2 menjadi seperti yang ditunjukkan pada Gambar 3.

Gambar 3. CRC-8 encoder menggunakan LFSR untuk Generator Polynomial 𝑥8+ 𝑥2+ 𝑥 + 1

(5)

Donny Priyadi, Copyright © 2022, MIB, Page 1681 Operasi shift register dan XOR dapat diimplementasikan menggunakan perangkat lunak maupun perangkat keras. Langkah-langkah perhitungan nilai CRC-8 secara serial (bit per bit) menggunakan shift register adalah sebagai berikut.

a. Inisialisasi register/variabel yang digunakan untuk menyimpan nilai CRC (semua bit pada register = ‘0’).

b. Baca input (per bit) dari data atau pesan yang dimasukkan oleh user ke register. Lakukan operasi XOR antara input data dengan register.

c. Periksa most significant bit (MSB) dari register. Jika MSB = ‘1’, geser register (juga input data) sebanyak satu bit ke kiri (left shift), kemudian XOR-kan hasilnya dengan generator polynomial yang digunakan (di sini 𝑥8+ 𝑥2+ 𝑥 + 1 = 0x07 dalam heksadesimal). Sebaliknya, jika MSB = ‘0’, geser register (juga input data) sebanyak satu bit ke kiri (left shift).

d. Jika masih terdapat bit dari input data yang belum diproses, kembali ke langkah 2. Proses ini dilakukan untuk setiap bit hingga keseluruhan bit pada input data diproses.

Berbeda dengan algoritma di atas yang menghitung nilai CRC dengan cara memproses bit per bit, algoritma untuk komputasi nilai CRC-8 yang menggunakan tabel lookup memproses input data satu byte pada setiap iterasi saat perhitungan CRC (byte per byte). Dalam proses ini, satu operasi lookup dilakukan untuk setiap input byte yang diproses pada suatu iterasi. Nilai yang disimpan pada tabel merupakan nilai yang telah dihitung terlebih dahulu sebelum digunakan dan untuk CRC-8 terdapat 256 nilai yang disimpan pada tabel ini seperti yang ditunjukkan pada Gambar 4.

Gambar 4. Tabel untuk perhitungan nilai CRC-8 dengan Generator Polynomial 𝑥8+ 𝑥2+ 𝑥 + 1 Langkah-langkah yang dilakukan untuk proses perhitungan menggunakan tabel lookup adalah sebagai berikut.

a. Inisialisasi register/variabel yang digunakan untuk menyimpan nilai CRC (semua bit pada register = ‘0’).

b. Baca input (satu byte) dari data atau pesan yang dimasukkan oleh user.

c. Lakukan operasi XOR antara isi register dengan input yang dibaca pada langkah 2.

d. Gunakan hasil dari operasi XOR ini untuk mengindeks tabel lookup. Ambil nilai dari tabel dan simpan ke register.

e. Jika masih terdapat byte dari input data yang belum diproses, kembali ke nomor 2. Proses ini dilakukan untuk setiap bit hingga keseluruhan byte pada input data diproses.

Pada implementasi menggunakan perangkat lunak, user memasukkan data dalam bentuk karakter (ASCII).

Saat semua bit (untuk perhitungan secara bitwise) atau byte (untuk perhitungan menggunakan tabel lookup) pada input data telah diproses, isi dari register/variabel merupakan nilai CRC-8 dari input data yang merupakan sisa hasil bagi (remainder) dari proses pembagian yang dilakukan. Hasil implementasi yang dilakukan menggunakan Arduino ditunjukkan pada Gambar 5. Pada implementasi ini, user memasukkan data yang akan dihitung nilai CRC-nya melalui Serial Monitor pada Arduino IDE. Sebagai contoh pada Gambar 5, user memasukkan string

“13” dan “135”. Nilai CRC-8 dari kedua input tersebut masing-masing adalah 75 dan C7 dalam heksadesimal.

Suatu string yang panjang juga dapat diberikan sebagai input untuk dihitung nilai CRC-nya. Untuk input “test crc arduino”, nilai CRC-nya adalah C1. Selain implementasi pada Arduino, implementasi encoder juga dilakukan pada komputer untuk membandingkan hasil perhitungan CRC-8 yang diperoleh. Implementasi pada komputer menggunakan bahasa pemrograman C++ dan berjalan pada sistem operasi Linux Ubuntu 20.04 LTS seperti yang

(6)

Donny Priyadi, Copyright © 2022, MIB, Page 1682 ditunjukkan pada Gambar 6. Selanjutnya, Gambar 7 dan Gambar 8 masing-masing menunjukkan perhitungan nilai CRC secara manual untuk input data “13” dengan pembagian (bitwise) dan menggunakan tabel lookup. Hasil perhitungan ini sesuai dengan hasil yang ditunjukkan pada Gambar 5 dan Gambar 6.

Gambar 5. Tampilan perhitungan CRC-8 pada Serial Monitor Arduino IDE

Gambar 6. Tampilan perhitungan CRC-8 pada Linux Ubuntu

Gambar 7. Perhitungan nilai CRC-8 untuk input “13” dengan proses pembagian

(7)

Donny Priyadi, Copyright © 2022, MIB, Page 1683 Gambar 8. Perhitungan nilai CRC-8 untuk input “13” menggunakan Tabel Lookup

3.2 Implementasi pada Perangkat Keras

Implementasi pada perangkat keras menggunakan dua board, yaitu Arduino Uno R3 dan DFRduino Duemilanove 328 seperti yang ditunjukkan pada Gambar 9. Satu board berfungsi sebagai pengirim dan board yang lainnya sebagai penerima. Komunikasi serial antar board diimplementasikan menggunakan library SoftwareSerial di mana pin 6 dan pin 7 masing-masing digunakan sebagai pin Rx dan pin Tx. Selain itu, pada board pengirim juga digunakan sebuah Liquid Crystal Display (LCD) untuk menampilkan data yang dimasukkan oleh user melalui Serial Monitor pada Arduino IDE dan hasil perhitungan nilai CRC dari data tersebut. Untuk input data yang panjangnya melebihi 11 karakter, hanya hasil perhitungan CRC-nya saja yang ditampilkan pada LCD. Setelah nilai CRC dihitung, codeword yang akan ditransmisikan kemudian dibentuk dengan menggabungkan data dan nilai CRC-nya sesuai dengan persamaan (2). Sebagai contoh untuk input data “13”, maka data yang ditransmisikan adalah “13u” dalam ASCII atau “313375” dalam heksadesimal.

Gambar 9. Hasil implementasi pada perangkat keras 3.3 Pengujian

Pengujian terhadap hasil implementasi CRC-8 encoder pada Arduino dilakukan dengan membandingkan waktu yang dibutuhkan untuk menghitung nilai CRC dari suatu input data dan ruang penyimpanan program (program storage space) yang digunakan oleh kedua implementasi algoritma. Tabel 2 menunjukkan spesifikasi board yang digunakan untuk proses pengujian CRC-8 encoder yang telah diimplementasikan. Perbandingan ruang penyimpanan program yang digunakan oleh kedua implementasi ditunjukkan pada Tabel 3. Dapat dilihat bahwa implementasi yang menggunakan perhitungan CRC secara bitwise dan menggunakan tabel lookup masing-masing membutuhkan 27% dan 28% dari total ruang penyimpanan. Dengan demikian, masih terdapat ruang penyimpanan yang cukup jika board akan digunakan untuk mengimplementasikan fungsi-fungsi yang lain (misalnya, mengontrol relay, mengontrol motor servo, dan membaca data dari sensor). Penggunaan ruang penyimpanan ini dapat dikurangi jika program atau perangkat keras tidak membutuhkan keluaran pada LCD untuk menampilkan hasil perhitungan CRC. Selain itu, waktu yang diperlukan untuk melakukan encoding oleh kedua algoritma untuk panjang input 2 karakter dan 128 karakter juga ditunjukkan pada Tabel 3. Hasil ini menunjukkan bahwa perhitungan menggunakan tabel lookup lebih cepat dibandingkan dengan cara konvensional (bitwise), tetapi membutuhkan memori yang lebih banyak. Sebaliknya, perhitungan dengan cara konvensional menggunakan lebih sedikit memori, tetapi waktunya lebih lama. Untuk implementasi CRC-8 decoder pada penerima (board DFRduino Duemilanove 328), kapasitas ruang penyimpanan program yang digunakan adalah 5694 dari 30720 bytes (18%).

(8)

Donny Priyadi, Copyright © 2022, MIB, Page 1684 Tabel 2. Board yang digunakan dalam pengujian

Resource Arduino Uno R3 DFRduino Duemilanove 328

Microcontroller Atmel ATmega328 16 MHz Atmel ATmega328 16 MHz

Digital I/O pin 14 (6 PWM output) 14 (6 PWM output)

Analog Input pin 6 6

Flash memory 32 KB, 512 bytes untuk bootloader 32 KB, 2 KB untuk bootloader

SRAM 2 KB 2 KB

EEPROM 1 KB 1 KB

Tabel 3. Penggunaan ruang penyimpanan program dan waktu encoding untuk kedua algoritma

Bitwise Tabel lookup

Encoder (pada Arduino Uno R3) 8796 dari 32256 bytes (27%) 9042 dari 32256 bytes (28%) Waktu (input: 2 karakter) 48 mikrodetik 16 mikrodetik

Waktu (input:128 karakter) 2.37 milidetik 0.5 milidetik

Pada proses pengujian juga dilakukan verifikasi untuk memastikan kebenaran (correctness) hasil perhitungan nilai CRC yang diperoleh dari encoder yang diimplementasikan dengan hasil perhitungan menggunakan kalkulator CRC daring [20]. Berdasarkan hasil pengujian ini didapatkan bahwa perhitungan CRC- 8 yang diimplementasikan sudah tepat dan sama dengan hasil dari kalkulator tersebut. Pengujian juga dilakukan untuk input data dengan panjang yang bervariasi dan hasilnya sesuai dengan persamaan matematis untuk menghitung CRC-8. Pengujian berikutnya adalah pengujian transmisi data untuk mengetahui apakah decoder pada penerima dapat mendeteksi error pada data. Pengujian pertama dilakukan dengan mentransmisikan data yang benar (tanpa error) seperti yang ditunjukkan pada Gambar 10. Data atau codeword yang ditransmisikan adalah

“13u” atau dalam notasi biner adalah 001100010011001101110101. Pada sisi penerima, decoder akan melakukan proses pembagian antara data yang diterima dengan generator polynomial yang digunakan. Setelah itu akan diperiksa sisa hasil pembagiannya. Jika sisa hasil pembagian adalah 0, maka dapat disimpulkan bahwa tidak terdapat error pada data yang ditransmisikan. Sebaliknya, maka terdapat error pada data seperti yang ditunjukkan pada Gambar 11. Untuk simulasi pengujian dengan error pada data, dilakukan perubahan dua bit terakhir pada data yang ditransmisikan sehingga menjadi “13v” atau dalam notasi biner adalah 001100010011001101110110.

Gambar 10. Pengujian transmisi data (tanpa error): (a) pengirim, (b) penerima

Gambar 11. Pengujian transmisi data (dengan error): (a) pengirim, (b) penerima

4. KESIMPULAN

Penelitian ini membahas perancangan dan implementasi kode pendeteksi error CRC-8 pada perangkat IoT (Arduino). Perancangan dan implementasi difokuskan pada encoder di sisi pengirim (transmitter) dengan menerapkan dua algoritma yang berbeda untuk menghitung nilai CRC-8. Decoder pada penerima diimplementasikan dengan cara yang serupa dengan encoder. Berdasarkan hasil implementasi dan pengujian yang telah dilakukan, algoritma komputasi CRC menggunakan tabel lookup memiliki waktu perhitungan yang lebih cepat dibandingkan perhitungan CRC secara bitwise. Namun, dari sisi ruang penyimpanan atau memori untuk implementasi program, algoritma yang menggunakan tabel lookup membutuhkan memori yang lebih besar. Pada pengujian dengan input data sepanjang 128 karakter, encoder dengan bitwise membutuhkan waktu perhitungan sebesar 2.37 milidetik, sedangkan encoder dengan tabel lookup membutuhkan waktu perhitungan sebesar 0.5

(9)

Donny Priyadi, Copyright © 2022, MIB, Page 1685 milidetik. Dari sisi penggunaan memori, encoder dengan bitwise membutuhkan memori sebesar 8796 byte, sedangkan encoder dengan tabel lookup membutuhkan memori sebesar 9042 byte. Verifikasi untuk memeriksa kebenaran hasil perhitungan oleh encoder dilakukan dengan membandingkan hasil tersebut dengan hasil perhitungan secara manual dan hasil perhitungan menggunakan kalkulator daring. Selanjutnya, pada pengujian transmisi data diperoleh bahwa implementasi sistem pendeteksi error menggunakan CRC-8 ini dapat berjalan dengan baik. Decoder pada sisi penerima dapat mendeteksi adanya error atau perubahan bit pada data yang ditransmisikan. Untuk pengembangan penelitian ini lebih lanjut, dapat dibuat suatu library untuk komputasi nilai CRC yang bervariasi sesuai dengan kebutuhan, misalnya untuk menghitung nilai CRC-16, CRC-24, dan CRC-32.

CRC-24 merupakan kode pendeteksi error yang digunakan pada Bluetooth Low Energy (BLE) yang merupakan salah satu teknologi yang digunakan untuk aplikasi IoT. Selain itu dapat juga diimplementasikan jenis kode pendeteksi error selain CRC, misalnya kode Hamming, maupun kode pengoreksi error.

REFERENCES

[1] W. Stallings, Data and Computer Communications, 10th ed. Pearson, 2014.

[2] T. Moon, Error Correction Coding: Mathematical Methods and Algorithms, 2nd ed. Wiley, 2020.

[3] Y. Cai, S. Ghose, E. F. Haratsch, Y. Luo, and O. Mutlu, “Error Characterization, Mitigation, and Recovery in Flash- Memory-Based Solid-State Drives,” Proc. IEEE, vol. 105, no. 9, pp. 1666–1704, Sep. 2017, doi:

10.1109/JPROC.2017.2713127.

[4] N. Sridevi, K. Jamal, and K. Mannem, “Implementation of Cyclic Redundancy Check in Data Recovery,” Proc. 2nd Int.

Conf. Electron. Sustain. Commun. Syst. ICESC 2021, pp. 17–24, Aug. 2021, doi: 10.1109/ICESC51422.2021.9532802.

[5] W. W. Peterson and D. T. Brown, “Cyclic Codes for Error Detection,” Proc. IRE, vol. 49, no. 1, pp. 228–235, 1961, doi:

10.1109/JRPROC.1961.287814.

[6] B. Forouzan, Data Communications and Networking, 5th ed. McGraw-Hill, 2013.

[7] L. A. Zhou and Z. L. Nie, “An Enhanced Decision-Making Fault Detection Model in Medical IoT Embedded Systems,”

Wirel. Pers. Commun., 2021, doi: 10.1007/S11277-021-08759-8.

[8] H. Liu, Z. Qiu, W. Pan, J. Li, L. Zheng, and Y. Gao, “Low-Cost and Programmable CRC Implementation Based on FPGA,” IEEE Trans. Circuits Syst. II Express Briefs, vol. 68, no. 1, pp. 211–215, Jan. 2021, doi:

10.1109/TCSII.2020.3008932.

[9] M. M. Arifin, M. T. Hasan, M. T. Islam, M. A. Hasan, and H. S. Mondal, “Design and Implementation of High Performance Parallel CRC Architecture for Advanced Data Communication,” 2019 4th Int. Conf. Electr. Inf. Commun.

Technol. EICT 2019, Dec. 2019, doi: 10.1109/EICT48899.2019.9068750.

[10] X. Zhang and Y. J. Tang, “Low-complexity parallel cyclic redundancy check,” Proc. - IEEE Int. Symp. Circuits Syst., vol. 2021-May, 2021, doi: 10.1109/ISCAS51556.2021.9401679.

[11] “Arduino.” https://www.arduino.cc/ (accessed Jun. 17, 2022).

[12] A. R. Saleh and S. A. Sudiro, “CRC 8-bit Encoder-Decoder Component in FPGA using VHDL,” ELKOMIKA J. Tek.

Energi Elektr. Tek. Telekomun. Tek. Elektron., vol. 8, no. 1, p. 58, Jan. 2020, doi: 10.26760/elkomika.v8i1.58.

[13] G. Natalia, S. Suwadi, and T. Suryani, “Implementasi Encoder dan Decoder Cyclic Redundancy Check Pada TMS320C6416T,” J. Tek. ITS, vol. 3, no. 1, pp. A92–A97, Mar. 2014, doi: 10.12962/j23373539.v3i1.5504.

[14] “Simulink - Simulation and Model-Based Design - MATLAB & Simulink.”

https://www.mathworks.com/products/simulink.html (accessed Jun. 05, 2022).

[15] A. S. Panda and G. L. Kumar, “Comparison of serial data-input CRC and parallel data-input CRC design for CRC-8 ATM HEC employing MLFSR,” 2014 Int. Conf. Electron. Commun. Syst. ICECS 2014, 2014, doi:

10.1109/ECS.2014.6892739.

[16] A. H. Saleh, K. M. Saleh, and S. Al-Azawi, “Design and simulation of CRC encoder and decoder using VHDL,” 1st Int.

Sci. Conf. Eng. Sci. - 3rd Sci. Conf. Eng. Sci. ISCES 2018 - Proc., vol. 2018-January, pp. 221–225, Apr. 2018, doi:

10.1109/ISCES.2018.8340557.

[17] R. Novaldi, S. Akbar, and P. Rakhmadhany, “Implementasi Error Detection System Pada Komunikasi Serial Arduino Menggunakan Metode Cyclic Redundancy Check (CRC),” J. Pengemb. Teknol. Inf. dan Ilmu Komput., vol. 3, no. 2, pp.

1480–1485, 2018, [Online]. Available: https://j-ptiik.ub.ac.id/index.php/j-ptiik/article/view/4412.

[18] J. Kurose and K. Ross, Computer Networking A Top-Down Approach, 8th ed. Pearson, 2020.

[19] “Arduino UNO R3.” https://docs.arduino.cc/hardware/uno-rev3 (accessed Jun. 11, 2022).

[20] “Online CRC-8 CRC-16 CRC-32 Calculator.” https://crccalc.com/ (accessed Jun. 22, 2022).

Referensi

Dokumen terkait

10 STATELESSNESS FMR32 Statelessness and nationality: legal instruments The right to nationality is covered not only by those international instruments specific to statelessness –