Teknologi

Reverse Engineering OSD AMT630A: Library Arduino untuk Monitor Kamera Murah

Reverse Engineering OSD AMT630A: Library Arduino untuk Monitor Kamera Murah

Ada satu jenis perangkat keras yang hampir semua orang pernah lihat tetapi hampir tidak ada yang pernah membongkar isinya. Board monitor LCD komposit murah, yang biasanya dipakai sebagai layar kamera mundur, kerap dijual dengan harga sekitar 35 dolar. Di dalamnya ada sebuah chip bernama AMT630A yang menangani penguraian sinyal video sekaligus mesin on-screen display atau OSD, yaitu lapisan teks dan grafis yang ditumpuk di atas gambar.

Mesin OSD itulah yang biasanya tidak bisa disentuh pemakai. Pabrikan menyediakan beberapa menu bawaan, dan itu saja. Namun sebuah proyek open source di GitHub, dikelola oleh pengguna bernama mogrinz, membongkar mesin tersebut lewat pengujian perangkat keras dan reverse engineering, lalu membungkusnya menjadi library Arduino dan ESP32 bernama AMT630A OSD.

Repositori itu menarik bukan karena skalanya besar. Dengan 91 commit dan 10 bintang, proyek ini termasuk kecil. Yang membuatnya layak dibaca adalah pendekatannya: alih-alih menebak dari datasheet yang mungkin tidak tersedia, penulisnya menguji langsung board yang benar-benar ia miliki, lalu mendokumentasikan dengan jelas bagian mana yang berlaku umum dan bagian mana yang spesifik pada firmware tertentu.

Chip dan Papan yang Jadi Sasaran

AMT630A adalah chip yang menangani dua hal sekaligus pada board monitor komposit: mengubah sinyal video analog menjadi tampilan di panel LCD, dan menimpa lapisan OSD di atasnya. Lapisan OSD inilah yang biasanya menampilkan tulisan seperti indikator sumber masukan, garis bantu, atau menu pengaturan.

Yang ditemukan proyek ini adalah bahwa mesin OSD tersebut bisa dikendalikan sepenuhnya lewat I2C. Artinya, mikrokontroler seperti ESP32 bisa mengambil alih lapisan teks dan grafis itu, menggambar apa pun yang diinginkan, tanpa menyentuh jalur video sama sekali.

Penulis library menekankan satu hal di bagian awal dokumentasinya. Produk AMT630A tidak semuanya dijamin memakai firmware, timing panel, rangkaian keypad, atau koneksi I2C yang sama. Fitur yang ditandai spesifik perangkat keras atau firmware harus diperlakukan sesuai catatan itu. Ini sikap yang jujur, karena reverse engineering pada perangkat keras murah selalu berisiko menghasilkan temuan yang tidak berlaku universal.

Apa Saja yang Bisa Dikendalikan

Library versi 0.7.0 ini mengekspos cukup banyak kemampuan mesin OSD. Daftar fiturnya memberi gambaran yang jelas tentang seberapa dalam mesin ini dibongkar.

  • Lima jendela OSD yang bisa diposisikan secara independen.
  • Dua mode font: LargeFont dengan geometri sel 16x22 piksel, dan SmallFont dengan sel 10x16 piksel.
  • Menggambar teks, warna latar dan depan, teks rata tengah, bar, persegi panjang, dan ID glyph mentah.
  • Glyph kustom untuk LargeFont yang disimpan di Font RAM.
  • Bitmap 4bpp dengan tile yang kompatibel dengan geometri LargeFont 16x22.
  • Palet bitmap global berisi 16 entri, helper RGB, transparansi palet nol, dan animasi palet.
  • Kontrol pencampuran OSD dengan video, opasitas, dan kecerahan secara global.
  • Penskalaan per jendela dari 1x sampai 4x, baik horizontal maupun vertikal.
  • Dukungan region berkedip langsung dari perangkat keras.
  • API perpindahan jendela yang ringan serta pembaruan batch.
  • Konverter gambar Python yang menerima GIF, PNG, JPEG, dan BMP menjadi bitmap Arduino, lengkap dengan kuantisasi sadar RGB444, palet bersama, batas memori, dan keluaran pratinjau.
  • Contoh penjelajah karakter untuk kedua mode font.
  • Otomasi keypad berbasis GPIO untuk masuk ke menu pabrik tersembunyi pada firmware tiga tombol yang sudah diuji.

Dari daftar itu, dua hal paling menarik bagi yang terbiasa bekerja dengan mikrokontroler. Pertama, konverter gambar Python-nya, karena mengubah gambar berwarna menjadi bitmap 4bpp dengan palet terbatas biasanya memerlukan penyesuaian manual. Kedua, otomasi menu pabrik, karena itu berarti penulisnya tidak hanya memahami API OSD, tetapi juga berhasil memetakan urutan tombol yang membuka menu tersembunyi pada firmware bawaan.

Batasan yang Justru Paling Menarik

Dokumentasi library ini jujur soal batasan perangkat keras, dan justru di situ letak pelajaran rekayasanya. Mesin OSD AMT630A punya lima jendela, tetapi kelima jendela itu berbagi satu kolam 512 sel Index RAM. Jendela boleh saling tumpang tindih secara visual, tetapi alokasi Index RAM di belakangnya harus muat di kolam bersama itu.

Konsekuensinya praktis. Semakin besar jendela yang dibuka, semakin banyak sel yang terpakai, dan semakin sedikit ruang tersisa untuk jendela lain. Karena itu library menyediakan helper untuk memeriksa kondisi ini, antara lain fungsi untuk membaca lebar dan tinggi jendela dalam piksel, jumlah kolom dan baris, indeks awal sel, jumlah sel yang dipakai, serta total sel yang terpakai dan yang masih bebas.

Ada juga fungsi untuk melepas sebuah jendela sehingga library bisa mengalokasikan ulang sisa Index RAM. Mekanisme ini penting untuk aplikasi yang menampilkan tata letak berbeda pada saat yang berbeda, misalnya layar status yang berganti antara mode sederhana dan mode rinci.

Batasan kedua menyangkut Font RAM. Chip ini punya ruang Font RAM sebesar 4096 word atau 8192 byte. Ruang itu bisa dibagi antara slot glyph kustom untuk LargeFont dan penyimpanan bitmap. Library menyediakan fungsi untuk memesan sejumlah slot glyph kustom lebih dulu, atau menyerahkan seluruh ruang ke bitmap.

Penulis library mencatat satu keputusan desain yang tegas: glyph kustom hanya didukung pada mode LargeFont, dan library sengaja menolak pemuatan glyph kustom bersamaan dengan bitmap. Alasannya, pemetaan aman untuk koeksistensi keduanya belum tersedia sebagai fitur publik yang didukung. Menolak kombinasi yang belum terverifikasi lebih baik daripada membiarkan pengguna menemukan perilaku aneh sendiri.

Wiring dan Contoh Pemakaian

Komunikasi ke AMT630A dilakukan lewat I2C. Pada ESP32, library memakai pin default SDA di GPIO 21 dan SCL di GPIO 22, dan keduanya bisa diganti saat pemanggilan fungsi inisialisasi, termasuk pengaturan kecepatan clock I2C.

Dokumentasi memberi peringatan yang layak diulang. Sambungkan ground antara ESP32 dan elektronik monitor. Jangan berasumsi setiap monitor AMT630A mengekspos test pad, level tegangan, masukan daya, atau susunan keypad yang sama. Verifikasi board Anda sendiri sebelum menghubungkannya.

Contoh paling sederhana untuk menampilkan teks adalah memilih mode font, mengatur jendela, lalu menulis string. Ada juga fungsi untuk menggambar teks rata tengah, menggambar bar dengan panjang tertentu, mengisi persegi panjang dengan warna, dan menulis glyph mentah memakai ID 10 bit bila Anda ingin memakai karakter di luar pemetaan ASCII.

Warna teks yang tersedia adalah transparan, putih, merah, hijau, biru, cyan, kuning, dan hitam. Perubahan gambar sebenarnya terjadi di salinan RAM milik library. Sel yang berubah ditandai kotor, lalu dikirim ke perangkat keras saat fungsi pembaruan dipanggil. Tersedia juga fungsi pembaruan paksa yang mengirim seluruh sel pada jendela yang diminta.

Untuk animasi, library menyediakan fungsi perpindahan jendela yang hanya memperbarui byte posisi yang berubah, tanpa mengubah geometri jendela atau alokasi Index RAM. Ada pula mekanisme pembaruan batch yang bisa disarangkan, untuk mengurangi transisi kepemilikan berulang saat beberapa operasi dilakukan berurutan.

Penskalaan juga tersedia seragam untuk kelima jendela, dari 1x sampai 4x, dan bisa berbeda antara sumbu horizontal dan vertikal. Penulis library mencatat bahwa jendela nol sebenarnya memakai perangkat keras scaler yang berbeda di dalam chip, tetapi perbedaan itu disembunyikan oleh library.

Bagian yang Belum Terkalibrasi

Salah satu hal yang membuat dokumentasi ini terasa kredibel adalah pengakuan atas hal yang belum selesai. Region berkedip bisa diatur lewat koordinat sel berbasis 1, dengan mesin kedip utama yang menyasar satu region persegi pada satu jendela OSD terpilih. Laju kedip diatur lewat nilai mentah enam bit, dari 0x00 sampai 0x3F.

Penulisnya menyatakan bahwa pengujian perangkat keras membuktikan nilai yang lebih kecil berkedip lebih cepat. Namun konversi waktu yang tepat belum dikalibrasi. Pernyataan seperti ini jauh lebih berguna daripada klaim presisi yang tidak bisa dibuktikan, karena memberi tahu pemakai bahwa parameter tersebut masih perlu diukur sendiri bila akurasi waktu penting.

Hal serupa berlaku pada otomasi menu pabrik. Library menyediakan API untuk memicu urutan tombol lewat GPIO pada firmware tiga tombol yang sudah diuji, tetapi ada fungsi terpisah yang hanya mempertahankan bit visibilitas dan kedip yang sudah disetel firmware bawaan, tanpa masuk ke mode pabrik. Pemisahan ini menunjukkan penulisnya memahami bahwa perilaku firmware bisa berbeda antar board.

Kenapa Proyek Kecil Ini Layak Diperhatikan

Ada beberapa alasan proyek semacam ini bernilai lebih dari sekadar koleksi bintang di GitHub.

Pertama, ia membuka perangkat keras yang murah dan tersedia luas untuk keperluan yang tidak dirancang pabrikannya. Board monitor kamera mundur dengan harga sekitar 35 dolar bisa berubah menjadi layar status untuk proyek elektronik, panel informasi untuk sistem otomasi, atau antarmuka sederhana untuk perangkat yang tidak butuh layar mahal.

Kedua, ia menunjukkan nilai dokumentasi yang jujur. Setiap fitur yang spesifik pada firmware atau perangkat keras tertentu ditandai jelas. Setiap parameter yang belum terkalibrasi diakui. Pola ini membuat proyek reverse engineering jauh lebih berguna, karena pemakai tahu di mana harus berhati-hati.

Ketiga, ia menggambarkan alur kerja reverse engineering yang bisa ditiru. Mulai dari menguji board yang benar-benar dimiliki, membangun hipotesis dari perilaku yang teramati, memverifikasi lewat pengujian berulang, lalu membungkus temuan menjadi API yang nyaman dipakai orang lain. Tidak ada langkah yang memerlukan alat eksotis, hanya ketekunan dan pencatatan yang rapi.

Bagi pembaca di Indonesia yang tertarik pada embedded system, proyek ini bisa jadi titik masuk yang murah. Board AMT630A banyak dijual di marketplace lokal sebagai layar kamera mundur, dan dengan ESP32 yang harganya juga terjangkau, keduanya cukup untuk mulai bereksperimen mengendalikan mesin OSD yang biasanya tersembunyi.

Tips Memulai Proyek Serupa

Kalau Anda ingin mencoba membongkar perangkat keras serupa, ada beberapa langkah awal yang masuk akal. Mulai dari membeli dua unit board yang sama, supaya satu bisa diuji sampai rusak tanpa kehilangan pembanding. Rekam perilaku bawaan sebelum menyentuh apa pun, termasuk urutan tombol dan tampilan menu. Lalu dokumentasikan setiap temuan dengan kondisi pengujiannya, karena pada perangkat murah, hasil yang sama belum tentu muncul di board dengan revisi berbeda. Terakhir, pisahkan bagian yang sudah terverifikasi dari yang masih dugaan di catatan Anda, supaya orang lain yang melanjutkan pekerjaan itu tidak mengulang dari nol.

Sumber resmi: repositori GitHub mogrinz/AMT630A, library AMT630A OSD versi 0.7.0, yang juga dibahas di Hacker News dengan judul "Reverse-engineering a $35 backup camera display (AMT630A)".

Rekomendasi Tools & Layanan

Kalau lo mau langsung praktikkan panduan di atas, dua layanan yang gue pake sehari-hari: free trial Alibaba Cloud buat coba-coba tanpa biaya di awal, dan ECS instance 9th-gen kalau udah siap naik ke VPS production.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.