Category: Bahasa Indonesia

The Art of Electronic Devices Hacking

Malam minggu harusnya dihabiskan untuk melakukan hal produktif, #SayNoToValentineDay. Salah satu hal produktif yang bisa seorang mahasiswa elektro lakukan adalah hacking peralatan elektronik di sekitarnya.

Introduksi

Hacking lebih dikenal sebagai usaha untuk menjebol masuk ke dalam sistem untuk mengubah perilakunya, orang yang melakukan hacking disebut hacker. Well secara teknis betul sih, tapi dalam dunia electronic hobbyist, term hacking adalah usaha mengubah (alter) fungsi biasa dari sebuah perangkat. Karena tulisan ini berada dalam konteks elektronika, maka kita akan gunakan definisi terakhir (yang tentu saja saya buat sendiri, haha).

Melakukan hacking meniscayakan interaksi dengan perangkat yang ingin di-hack. Nah dari titik ini, pengalaman dalam menangani berbagai protokol komunikasi yang digunakan perangkat tersebut menjadi penting. Selain itu, sifat modular dari perangkat tersebut akan menentukan skill level yang diperlukan. Maksud dari modular adalah masing-masing bagian (komponen) pada perangkat target saling independen, jadi komponen-komponen tersebut dapat dipisahkan dan dikombinasikan untuk menjalankan fungsi yang berbeda. Semakin modular suatu perangkat, maka semakin mudah perangkat tersebut untuk di-hack.

Contoh perangkat modular adalah Project Ara, sebuah smartphone besutan Google yang setiap komponennya dapat dilepas. Sementara smartphone pada umumnya sangat tidak modular.

Project Ara
Project Ara
Exploded View dari Smartphone generik
Exploded View dari Smartphone generik

Modularitas Perangkat

Perangkat yang modularitasnya rendah umumnya sulit untuk diutak-atik. Jika sudah begini, pengalaman dalam mengenali dan memahami mekanisme komunikasi akan sangat berguna. Untuk mengatasi pengalaman yang kurang, kita bisa menonton video-video teardown perangkat di youtube, misalnya. Bisa juga dengan sering bongkar-bongkar perangkat lama kita yang sudah rusak.

Misalkan kita punya flashdisk yang sudah lama tak terpakai, jika dibongkar kita akan dapati chip controller dan NAND flash chip. Chip controller bisa diprogram sesuai keinginan kita, dan NAND Flash bisa dipakai untuk menyimpan data.

Internal view dari flashdisk (tampak: NAND flash chip)
Internal view dari flashdisk (tampak: NAND flash chip)

Sayangnya kedua chip tersebut tidak mudah di-interface, kita harus banyak membaca datasheet untuk membuatnya bekerja. Melakukan desoldering, membuat PCB, dan memastikan chip tersebut bekerja baik adalah tugas seorang insinyur elektro.

Namun kalau melihat telepon genggam jaman dulu, kita bisa temukan banyak bagian yang bisa dimanfaatkan, misalnya nokia 3310 yang legendaris itu ternyata layarnya bisa dipakai untuk membuat game console!

Nokia 3310
Nokia 3310

 

Gamebuino - Game console yang memakai LCD nokia 3310
Gamebuino – Game console yang memakai LCD nokia 3310

Impresi

Artikel ini memaparkan sekilas mengenai hacking perangkat elektronik. Secara umum, hacking merupakan skill yang harus dibiasakan agar dapat semakin piawai membongkar dan menggabung berbagai perangkat elektronik. Salah satu website yang sering mendemonstrasikan electronic device hacking adalah hackaday.com, it’s worth to visit.

These Application Notes Will Make You Become An Electrical Engineering Expert!

Sebagai calon electrical engineer, kita tak cukup hanya membaca textbook mata kuliah standar di kampus. Kita perlu mengikuti perkembangan dunia engineering yang begitu menakjubkan. Supaya tak ketinggalan trend, kita perlu banyak membaca tulisan-tulisan para ahli, salah satunya dengan membaca application note.

Application note adalah karya tulis yang mirip artikel singkat yang ditulis oleh expert. Application note ditulis oleh engineers, dan untuk engineers. Tulisan-tulisan mereka menawarkan experienced analysis, design ideas, reference designs, and tutorials untuk membuat kita menjadi seorang pakar.

Nah, di tulisan ini saya ingin menghimpun berbagai application note dari berbagai produsen semikonduktor dunia seperti TI (Texas Instruments), Fairchild, Maxim, ST Electronics, Atmel, dan sederet lainnya. Tentu tidak semua perusahaan bisa dicantumkan, setidaknya tulisan ini bisa jadi referensi dikemudian hari.

  1. Maxim Integrated (http://www.maximintegrated.com/en/design/techdocs/app-notes/).
  2. Texas Instruments (application notes).
  3. Fairchild (https://www.fairchildsemi.com/evaluate/application-notes).
  4. ST Electronics (application notes selector).
  5. Atmel (search application notes).
  6. Microchip (www.microchip.com/applicationnotes/).
  7. Linear Technology (http://www.linear.com/designtools/app_notes.php).
  8. OSRAM Opto Semiconductors (application notes) Perusahaan yang berfokus pada produk lampu.
  9. ON Semiconductor (application notes).
  10. FTDI (http://www.ftdichip.com/Support/Documents/AppNotes.htm) terkenal sebagai produsen USB to serial converter.
  11. International Rectifier (http://www.irf.com/application-notes).

Ubah Touchpad Netbook Bekas Jadi Mouse

Utak-atik ini dan itu, hari ini saya (nampaknya) berhasil memanfaatkan touchpad Netbook hasil pembongkaran tahun lalu (lihat post pembongkaran disini). Touchpad-nya bukan touchpad dari produsen terkenal seperti Synaptic, tapi dari produsen china anonim. Touchpadnya menggunakan komunikasi serial seperti yang dipakai pada mouse PS/2, jadi lumayan gampang buat diutak-atik. Nah, ini dia touchpad-nya:

Touchpad tampak belakang (sumber: Dok. pribadi)
Touchpad tampak belakang (sumber: dok. pribadi)

Sama seperti pin PS/2, touchpad ini punya 6 pin dengan 2 pin tak terpakai, sehingga menyisakan 4 pin (+VCC, -GND, Clock, dan Data). Informasi pinout bisa dicari di internet, saya sendiri gagal mendapatkan info pin untuk touchpad ini, walhasil saya harus coba-coba sendiri dengan multimeter (dan dengan brute force, hehe). Pin-pin ini bisa langsung dikoneksikan ke komputer yang punya port PS/2 mouse. Hmm, laptop saya tak ada port PS/2 maupun converter USB-PS/2, maka saya hanya bisa tes dengan Arduino.

Touchpad dengan kabel konektor
Touchpad dengan kabel konektor (sumber: dok. pribadi)

Saya langsung solder saja kabel konektornya dan dihubungkan ke Arduino. Kode yang saya pakai diadaptasi dari halaman ini. Oiya, data yang dikirimkan mouse sebetulnya berbeda dengan data yang dikirimkan oleh touchpad, sehingga sudah tentu harus ditangani secara berbeda. Saya tetap pakai sketch Arduino untuk PS/2 mouse hanya sebagai proof of concept. Jika anda berminat untuk betul-betul menjadikan touchpad menjadi mouse yang usable, silakan cermati artikel berikut ini.

Soldering connector
Konektor touchpad yang tersolder (sumber: dok. pribadi)

Touchpad yang sudah dihubungkan ke Arduino, siap untuk dites!
Touchpad yang sudah dihubungkan ke Arduino, siap untuk dites! (sumber: dok. pribadi)

Oke, connector touchpad sudah disolder dan terhubung ke Arduino. Mari kita coba lihat hasilnya di Serial Monitor Arduino:

Jendela Serial Monitor yang menampilkan data yang terbaca
Jendela Serial Monitor menampilkan data yang terbaca (sumber: dok. pribadi)

Yeah, data dari touchpad berhasil terbaca, angka biner di sebelah kiri adalah raw data yang diterima, sedangkan bagian tengah (X dan Y) adalah terjemahan kode binernya. Meski sukses, namun beberapa menit kemudian touchpad-nya tak merespon, setelah di goyang-goyang sedikit rangkaiannya, baru deh touchpad-nya merespon lagi. Nampaknya sambungan yang saya buat terlalu ringkih, tak reliable. Hmm, tak apalah, yang penting sudah terbukti bekerja dengan baik, kedepannya bisa disempurnakan lagi. 🙂

Lanjut Lagi Desain Programming Language-nya!

fig-compiler-architectureKira-kira sudah lima tahun sejak tahun 2010 saya vakum belajar konstruksi compiler atau interpreter. Saya pernah menulis artikel tentang perancangan bahasa pemrograman di blog lama saya (artikelnya terdiri dari dua bagian, klik sini untuk melihat bagian pertamanya).

Artikel yang saya tulis tersebut bisa dibilang low-quality, dan terlalu banyak bias. Di artikel tersebut saya berusaha menjabarkan saja sepengetahuan saya tentang tips & trik mendesain bahasa pemrograman. Pokoknya low-quality deh! Hehe.

Di tahun 2010 saya pernah membuat interpreter menggunakan bahasa Autohotkey, sulit juga membuat lexer dan parser dengan tangan (maksudnya tidak diotomasi dengan program bantuan). Namun dari titik itu, pemahaman saya tentang mekanisme kerja tool semacam itu semakin membaik. Nah, sejak akhir tahun 2011 saya sudah tidak lagi oprek-oprek interpreter.

Saya sudah pernah mendengar tool YACC (Yet Another Compiler-Compiler) alias Bison dan tool Flex untuk men-generate program lexer, tapi malas juga belajar bahasa baru (C dan C++). Nah, saat mengambil mata kuliah Problem Solving With C di ITB, mau tidak mau saya belajar C. Otomatis saya jadi tertarik oprek Bison dan Flex, baru nyambung ilmunya sekarang. Hehe.

Baik, jadi begini. Kalau Anda pernah membuat program apapun dalam bahasa apapun, baik C yang dikompilasi dengan GCC, atau Python yang di-interpretasi, maka yang saya dari tadi bicarakan adalah bagaimana membuat program yang mampu menjalankan source code Anda.

Entah apa saya akan benar-benar bereksperimen hingga mampu membuat interpreter yang baik, atau hanya nostalgia. Tulisan ini hanyalah curhat, basa-basi. Terima kasih sudah membaca hingga tanda baca terakhir! 🙂

Gunakan Bahasa Pemrograman Pada Tempatnya

Gunakan Bahasa Pemrograman Pada Tempatnya

Mengutip perkataan “buanglah sampah pada tempatnya”, kita mestinya membuang memakai bahasa pemrograman pada tempat, konteks, dan waktu yang tepat!

Saat menulis program, kita inginnya cepat dan cepat. Cepat eksekusinya, dan cepat proses developingnya. Kita juga punya kecenderungan untuk memakai bahasa tertentu–bahkan untuk keperluan apapun. Misalnya saja Mas gondrong pencinta bahasa C, mau urusan embedded system pakai C, sorting string pada file pakai C, membuat aplikasi Android pakai C (tidak percaya? Bisa lho.), membuat kernel dengan C, membuat aplikasi server dengan C. Mas gondrong sangat memuja-muja C.

Sebetulnya tak ada yang terlalu salah dengan Mas gondrong, ia mengandalkan C untuk menyelesaikan segalanya. Namun, saat kita melihat ia bekerja membuat program sorter ia kesulitan mencari library yang mantap, meskipun ia tak kesulitan saat bekerja di embedded system, dan saat bekerja di lingkungan Android dia betul-betul kesulitan.

Mas gondrong tentu tidak akan kesulitan membuat aplikasi Android dengan Java, bahasa yang memang seharusnya digunakan. Dan mungkin akan lebih mudah mensorting list dengan Lisp atau men-setup server dengan Perl misalnya.

Ada baiknya kita dengar cerita dari Google, raksasa internet. Google akhir-akhir ini banyak mem-port modul-modul yang tadinya ditulis dengan python, menjadi C. Alasannya tentu saja peningkatan performa. Lantas mengapa Google tidak langsung saja pakai C ya?

Python adalah bahasa interpreted, dalam arti Python tidak perlu dikompilasi untuk dijalankan, tujuan pemakaian Python adalah proses developing yang lebih cepat daripada C (meskipun Python juga dapat dikompilasi dengan sengaja menjadi bytecode yang akhirnya memberikan waktu eksekusi yang sama cepatnya dengan C, python memang semakin membaik), developer Google tidak ingin meng-compile source code C ribuan kali. Akan lebih baik suatu program baru dikembangkan dengan Python, dan setelah nyaris sempurna source code tersebut di-port ke bahasa lain.

Mahasiswa jurusan sains pasti kenal dengan Matlab, software komputasi yang powerful. Matlab sering dipakai untuk menghitung matriks, pemodelan, atau visualisasi data. Pada dasarnya mereka bisa saja memakai C untuk melakukan hal yang sama. Tapi yang ingin saya tekankan adalah akan lebih mudah dengan tool yang tepat.

Nah, sekarang kita beralih ke web programming. Jika ingin membuat halaman web dinamis berisi konten yang sangat cepat diupdate, HTML adalah pilihan yang jelek, kita punya PHP untuk halaman yang lebih fleksibel dan dinamis.

Saya ingin menekankan bahasa yang tepat untuk pekerjaan tertentu, ini mungkin akan membuat kita belajar bahasa-bahasa baru. Bisa saja Anda tidak sepakat sepenuhnya dengan tulisan ini, tapi saya pibadi sih tidak masalah. 🙂

Sekali lagi, buanglah sampah pada tempatnya.

Thought Note 1

brain_sketch_by_kbi_neverender-d5vpz8xBicara soal linux, saya sekarang sudah migrasi ke Linux, saya memilih Ubuntu karena distribusi inilah yang paling saya kenal sejak lulus SMA.

Bicara soal ubuntu, yang basisnya linux, saya juga memiliki dua smartphone Android (yang basisnya juga linux), satu Xiaomi Redmi 1S, dan satu lagi SPC S1 yang merupakan Android pertama saya.

Mengaitkan Linux dengan “perangkat” benar-benar menggelitik pikiran saya. Saya dulu ingat, linux pertama yang saya instal adalah Damn Small Linux (DSL: www.damnsmalllinux.org) yang dibundel oleh tabloid PC Mild, sekitar tahun 2008 atau 2009. Damn Small Linux memang mampu membuat saya berkata “Damn! Susah banget”. Instalasinya mudah, namun environment yang sulit, sangat tidak home-alike (Windows alike maksud saya), membuat saya tidak bisa apa-apa setelah login masuk ke DSL. Saya dulu belum punya koneksi internet (saya saat itu masih suka ke warnet), sehingga DSL yang saya instal itu otomatis merupakan a piece of crap. Kok *.exe nggak bisa dijalankan? Kok nggak ada control panel? Kok nggak ada Microsoft Office ya? Adalah beberapa pertanyaan-pertanyaan bodoh yang saya ajukan saat mengutak-atik DSL ini. Akhir cerita, saya melupakan DSL dan membeli CD instalasi Ubuntu Hardy Heron di Mall.

Sukses menginstalasi Ubuntu di dalam Windows, saya merasakan hal yang persis sama ketika bermain dengan DSL: Asing! Walhasil saya tetap dual boot sampai akhirnya di-format ulang untuk instalasi Windows 7 (yang bajakan, tentu saja).

Fiuuhh, sekarang saya sudah kuliah, sudah tingkat dua lagi. Saya belajar jauh lebih banyak tentang elektronika dan sistem yang mendasari jalannya komputer. Sekarang ini saya tertarik kembali menginstalasi DSL di Laptop saya.

Saya sudah browsing kesana-sini, sudah menemukan cara instalasi, namun saya justru terusik dengan ide yang mendasari DSL: Distro linux yang dibuat sekecil mungkin! Hanya 50 MB yang dipakai sudah bisa menjalankan linux secara normal, dengan perlakuan khusus DSL bisa dikompilasi ulang sehingga ukurannya bisa mencapai 5 MB! Luar biasa.

Ide tersebut mengusik saya: kalau-lah DSL bisa sedemikian kecil bahkan komputer lawas pun bisa menjalankannya, lantas kenapa tidak dicoba saja di-install ke Android, kan saya punya SPC S1?

Nah, berangkat dari gagasan ini saya coba cari di google, barangkali ada orang lain yang sudah melakukannya. Saya tahu bahwa SPC S1 saya memakai prosesor dengan arsitektur ARM, Weleh ternyata saya lupa bahwa DSL hanya support prosesor x86 saja. Wah repot juga ya?

Tapi ada sebuah postingan di forum Android yang menjelaskan bahwa kita bisa menjalankan DSL dengan bantuan Emulator x86 yang berjalan diatas Android. Jadi DSL-nya di-emulasi, bukan dijalankan langsung oleh mesin Android, ah kurang menarik!

Sadar akan keterbatasan ini, saya punya pikiran lain, yaitu menjalankan custom-kernel yang ditulis sendiri dengan C, dikompilasi oleh GCC dengan target arsitektur ELF-ARM. Bagaimana menurut Anda? Idenya keren kan? Hehe.

Saya coba cari tahu di google, ternyata ada juga diskusi di forum Android lain tentang kemungkinan menjalankan program C di ARM tanpa emulator, nah konsep kompilasi antar arsitektur inilah yang disebut cross-compilation. Saya belum baca lagi artikelnya.

Selain masalah prosesor dan arsitekturnya, saya browsing hal serupa tapi tak sama, yaitu kemungkinan mem-boot up Ubuntu (edisi Jaunty) pada microcontroller 8-bit. Apppaa?? Ubuntu harus dijalankan setidaknya oleh prosesor 32-bit, dan tentu membutuhkan bermega-megabyte RAM. Ternyata ada saja orang hebat yang bisa melakukannya, orang ini menghubungkan RAM jenis SDRAM ke microcontroller Atmel ATMega128P dan memakai SD Card sebagai media penyimpanan. Menurut tulisan orang tersebut, untuk booting up ubuntu hingga selesai dibutuhkan waktu 4 jam hingga siap pakai (untuk text-mode). Luar biasa ya? Ckck.

Roll Your Own RFID Tags

Proyek keren lainnya yang mengimplementasikan ATTiny85. Proyek ini mengenai RFID yang dibuat sendiri, tentu saja coil juga harus digulung sendiri. Tanpa memakai tenaga baterai apapun. ATTiny85 tipe SOIC (tipe Surface Mount Device) ditenagai oleh arus yang dibangkitkan oleh coil yang terpapar sinyal elektromagnetik dari komunikasi yang dilakukan. Cool!

Building an Arduino out of Paper

Building an Arduino out of Paper

Paperduino, Arduino yang dirakit diatas kertas, microcontroller memakai ATTiny85 8-pin. ATTiny85 ini murah, sekitar 25-35ribu rupiah, dengan 8 KB Flash memory.

Dimana ya USB Controllernya? Hmm, menurut saya USB Controller ditangani microcontroller, dengan catatan bootloader sudah di-burn ke ATTiny85. Tak yakin, masih perlu diteliti lagi.

First Effort to Build My Own Processor (1)

Untuk membuat prosesor, terlebih dulu saya mesti membuat spesifikasi awal prosesor saya, misalnya seberapa besar lebar bit yang dipakai.

Nah, meskipun penamaan kurang penting, tapi nama prosesor itu perlu untuk memudahkan pembaca merujuk prosesor saya. Baiklah, saya beri nama prosesor saya AdjieCPU.

Saya ingin AdjieCPU menjadi prosesor 4-bit. Itu berarti, AdjieCPU punya register, data bus, address bus selebar 4-bit.

Saya juga ingin AdjieCPU dibuat dengan komponen diskrit, tapi saya tidak segila pencipta CPU MT15 di link ini yang membuat CPU dari 3000 transistor, lagipula akan terlalu repot dan kecepatannya juga tidak bisa terlalu cepat. AdjieCPU dibuat dengan IC TTL (keluarga 74xx atau 4004, dan juga beberapa IC tipe lain). Dengan mengambil alternatif IC TTL, AdjieCPU setidaknya bisa berjalan di rentang 1 MHz-8 MHz.

Tapi sebagai pembuat prosesor pemula, saya cukup fokus saja pada desain yang berjalan dengan baik dulu, setelah itu baru tingkatkan kecepatan (baca juga esai tentang perancangan prosesor lain di link ini).

Nah, setelah mendefinisikan spesifikasi AdjieCPU (boleh jadi spesifikasi yang saya buat tidak lengkap, namun akan dilengkapi begitu dirasa perlu), saya perlu menentukan hal lain: saya ingin AdjieCPU punya beberapa pin input output digital (No analog to digital Pin, no PWM, they are simply just too complex for now), dan mampu melakukan operasi boolean sederhana. AdjieCPU hanyalah CPU 4-bit, sederhananya hanya ada 2^4 = 16 set instruksi yang mungkin.

Transistor, FPGA, System on Chip. Apa itu ya?

Transistor merupakan komponen paling mendasar dari perangkat digital. Beberapa jenis transistor adalah BJT (Bipolar Junction Transistor) dan MOSFET (Metal-Oxide-Silicon Field Effect Transistor). Perbedaan dari kedua jenis transistor tersebut adalah BJT bekerja pada dua kutub, dalam arti beroperasi dengan membuat gate elektron atau gate hole, sedangkan MOSFET hanya satu kutub, sehingga ada jenis NMOS dan PMOS MOSFET.

Transistor dapat dibuat menjadi sangat kecil dan terintegrasi dalam satu chip, yang disebut dengan IC (integrated circuit), meskipun didalamnya IC tidak hanya mengemas transistor. IC mampu mengemas puluhan hingga puluhan juta transistor. IC merupakan istilah umum yang merujuk pada komponen yang memuat komponen lain secara terintegrasi. Terdapat dua jenis IC yaitu IC digital dan analog.

Pada ranah IC digital, muncul berbagai istilah baru, beberapa diantaranya ada ASIC, PLA, PAL, CPLD, FPGA, prosesor, mikrokontroller, DSP (Digital Signal Processor), dan SoC (System on Chip).

ASIC (Application-Specific IC) adalah IC yang dirancang khusus untuk melakukan pekerjaan tertentu, DSP Prosesor merupakan ASIC. ASIC dapat dirancang secara full-custom, menggunakan standar-cell, atau memakai gate-array yang lebih mudah dalam proses produksi. Rangkaian yang sudah dibuat pada ASIC bersifat permanen. Agar memudahkan proses design and test, maka dipergunakan ASIC yang dapat diprogram ulang (Programmable Logic Device). Ada berbagai jenis PLD yaitu PLA (Programmable Logic Array), PAL (Programmable Array Logic), CPLD (Complex PLD), dan FPGA (Field-Programmable Gate Array), keempat jenis ini berbeda pada sisi arsitektural saja.

Selain IC yang bersifat khusus, ada pula general-purpose IC yaitu yang dapat digunakan untuk melakukan berbagai tugas. Prosesor adalah general-purpose IC yang melakukan operasi aritmatika dasar, logika, kontrol, dan input/output pada sistem sesuai instruksi yang diberikan. Meskipun terdapat register, prosesor tidak memiliki bagian untuk menyimpan seluruh instruksi yang dijalankan, prosesor hanya mengambil instruksi tersebut sesuai dengan yang diterima dari memory eksternal (RAM atau Flash).

Dalam embedded system digunakan mikrocontroller. Mikrokontroller merupakan IC yang menyatukan fungsi prosesor, memory flash, RAM, dan periferal input/output yang dapat diprogram ulang. Hanya saja, mikrokontroller umumnya memiliki memori yang kecil sehingga hanya cocok melakukan perkerjaan yang tidak terlalu berat, dan memerlukan daya yang relatif kecil.

Dalam kebutuhan sistem yang memerlukan daya kecil namun memiliki kemampuan setara prosesor (seperti dalam smartphone saat ini), maka digunakan SoC (System on Chip). Mirip seperti mikrokontroller, SoC menyatukan fungsi-fungsi dasar sebuah komputer, namun tanpa disertai memori, sehingga memerlukan RAM eksternal. Pada kasus lain, SoC dapat memuat mikrokontroler, prosesor, DSP prosesor, dan memory.

 

Ditulis oleh Rosmianto Aji Saputro di Bandung.