Penjelasan Sketch / Program
Pada bagian ini kita akan mengulas isi sketch dari contoh program Read Write Mifare
![]()
Library spi.h adalah merupakan library berisi code-code untuk akses SPI dari ATMega2560 dan mfrc522.h adalah library dari RC522 yang telah kita instal (penjelasan ada di bagian 1) dan berisi code-code untuk mengakses RC522
Untuk lebih detail mengenai library mfrc522.h ini dapat kita lihat di dokumentasi yang ada pada folder berikut

Di sana akan dijelaskan mengenai struktur memori kartu mifare, daftar dari fungsi-fungsi yang ada pada library MFRC522.h dan beberapa contoh penggunaan fungsi-fungsi pada library tersebut.

Daftar fungsi dalam library mfrc522.h (file rfidmifare.doc)

Untuk pin MOSI, MISO dan SCK telah diatur oleh spi.h di arduino sedangkan pin RST dan SS di sini perlu kita deklarasikan dahulu yaitu pin 9 dan 53. Pada contoh yang ada pin SS ada di digital 10, namun karena DE-ATMega2560-Embedded-Board menggunakan digital 53 maka contoh yang ada kita edit dahulu menjadi 53 dan save.

Selanjutnya dilakukan inisialisasi terhadap serial port dengan baudrate 9600 bps. Serial port ini berfungsi untuk menampilkan data dari kartu ataupun hasil dari sketch ke layar terminal dengan menggunakan fitur serial monitor pada Arduino IDE.
while (!Serial); //berfungsi untuk membuat program berhenti dan menunggu port serial dibuka
//(dalam hal ini fungsi serial monitor pada Arduino IDE)
Seperti dijelaskan pada artikel 1 bahwa Modul RC522 ini hanya menggunakan antarmuka SPI untuk aksesnya oleh karena itu SPI dari ATMega2560 perlu disiapkan dengan instruksi SPI.begin () dan selanjutnya fungsi inisialisasi MFRC522 yaitu mfrc522.PCD_init() dipanggil untuk mempersiapkan PCD mfrc522.
Kemudian data 0xFF disiapkan dalam key sebanyak 6 byte. Data 0xFF sebanyak 6 byte ini adalah merupakan security key standard saat kartu pertama kali dibuat di pabrik dan belum diprogram ulang oleh pihak lain


Serial.println(F(“Scan a MIFARE Classic PICC to demonstrate read and write.”)); berfungsi untuk mengirimkan string “Scan a MIFARE Classic PICC to demonstrate read and write.” agar tampil di layar terminal pada fitur serial monitor.
Fungsi dump_byte_array(key.keybyte, MFRC522:: MF_KEY_SIZE); adalah fungsi yang ada di dalam sketch ini dan berfungsi mengirimkan data security key yang tersimpan pada variabel key agar tampil di layar terminal.

Pada fungsi ini akan ditampilkan nilai HEX dari isi buffer (di mana buffer ini adalah isi dari variabel KEY) dan nilai tersebut akan ditambahkan “0” apabila di bawah 0x10 dan tidak ditambahkan 0 bila di atas 0x10. Jadi untuk karakter 1 sampai 0x0F akan tercetak 01 sampai 0F dan untuk karakter 0x10 hingga 0xFF akan tercetak 10 hingga FF

Berikutnya program akan mendeteksi adanya kartu dengan fungsi PICC_IsNewCardPresent() dan dilanjutkan dengan fungsi pembacaan Serial Number yaitu PICC_ReadSerial(). Setelah ada kartu dan serial number terbaca maka program lanjut

Selanjutnya data Card UID dan PICC Type dikirimkan ke port serial untuk tampil di layar terminal.

Di bagian ini program akan memeriksa apakah PICC Type adalah MIFARE_MINI, MIFARE_1K atau MIFARE_4K, apabila bukan semuanya maka akan ditampilkan “This sample only works with MIFARE Classic Cards” dan program kembali mendeteksi kartu.

Apabila hasil dari otentikasi tidak OK maka ditampilkan pesan “PCD_Authenticate() failed:” dan program akan return dari fungsi loop dan kembali menunggu pembacaan kartu berikutnya

Berikut yang terjadi pada gambar di atas, proses otentikasi dilakukan dengan memanggil fungsi PCD_Authentication() pada library mfrc522 dengan key A sebagai key yang akan diotentikasi, trailerBlock = 7 sebagai alamat akhir dari block yang akan dibaca, isi dari variabel key yaitu 0FF,0FF,0FF,0FF,0FF,0FF sebagai security key dan isi dari mfrc522.uid yaitu UID hasil pembacaan dari tag/kartu sebagai UID dari kartu yang akan dibaca.
Hasil dari fungsi tersebut akan disimpan dalam variabel status di mana OK atau tidaknya dapat dilihat pada variabel tersebut.

Kemudian setelah otentikasi key A OK fungsi PIC_DumpMifareClassicSectorToSerial di library MFRC522 dipanggil dengan UID dari UID Tag yang dibaca tadi, security key di dalam variabel key dan sector yang dibaca pada variabel sector. Hasilnya nilai dari data di sector 1 akan ditampilkan ke port serial


Lalu proses dilanjutkan dengan otentikasi seperti pada otentikasi Key A hanya saja saat ini menggunakan Key B


Kemudian pada gambar di atas ini dilanjutkan dengan penulisan data ke block yang tertulis di variabel blockAddr yaitu block 4. Data yang akan dituliskan tersimpan di variabel dataBlock dalam bentuk array dan ditampilkan dahulu ke serial dengan menggunakan fungsi dump_byte_array.
Fungsi MIFARE_Write di library MFRC522 dipanggil untuk menuliskan variabel dataBlock ke block yang ada di variabel blockAddr dengan sebanyak 16 kali. Hasil proses penulisan disimpan dalam variabel status.
Apabila status penyimpanan gagal maka akan ditampilkan pesan “MIFARE_Write() failed” dan program kembali dari fungsi loop menunggu kartu selanjutnya. Tapi apabila sukses maka program lanjut ke baris di bawahnya.

Di sini dilakukan pembacaan data pada block 4 dengan menggunakan fungsi MIFARE_Read yang ada di library MFRC522. Apabila hasilnya OK maka nilai yang dibaca akan ditampilkan dengan menggunakan fungsi dump_byte_array() namun bila tidak OK maka akan ditampilkan pesan “MIFARE_Read() failed:” dan kembali menunggu kartu berikutnya.


Kemudian di bagian akhir isi dari sector 1 dibaca lagi dengan menggunakan fungsi PICC_DumpMifareClassicSectorToSerial di library MFRC522. Di sini akan terlihat isi nilai sector 1 termasuk block 4 yang tadi telah dirubah datanya sesuai variabel dataBlock.
DELTA ELECTRONIC
Paulus Andi Nalwan, ST