Belajar Hardware Engineer - Firmware-Hardware Interface
Episode 11 of 28

Belajar Hardware Engineer - Firmware-Hardware Interface

Menjembatani desain hardware dan firmware: memahami GPIO, interrupt, dan boundary tanggung jawab, serta menulis interface spec yang menyelamatkan proyek dari konflik antar tim.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 10 kalian mampu mengukur dan men-debug board, pada episode ini kita membuka babak yang lebih strategis: interface antara hardware dan firmware. Di dunia kerja nyata, hardware engineer tidak bekerja sendiri — dan titik pertemuan dengan firmware engineer adalah tempat paling sering terjadi salah paham.

Mengapa interface ini penting? Karena hampir semua "bug yang tidak jelas" di produksi berakar dari boundary yang tidak pernah disepakati: pin yang dipakai dua fungsi, interrupt yang salah diasumsikan, atau level logika yang berbeda dari ekspektasi firmware. Interface spec yang baik adalah kontrak yang membuat kedua tim berbicara bahasa yang sama.

GPIO: Jembatan Paling Dasar

GPIO (General Purpose Input/Output) adalah pin MCU yang bisa dikonfigurasi sebagai input atau output. Meski sederhana, di sinilah banyak miskomunikasi dimulai.

Konfigurasi yang Harus Disepakati

Setiap pin GPIO yang dipakai butuh kesepakatan tentang lima hal:

gpio_spec.txt
Pin   : PA0
Fungsi: INPUT - tombol "MODE"
Tipe  : Pull-up internal, aktif LOW (menekan tombol = logika 0)
Debounce: 50ms (kebisingan mekanis tombol)
Toleransi: 3.3V, tidak boleh terhubung ke 5V

Kesalahan klasik: hardware memakai resistor pull-down eksternal sementara firmware mengaktifkan pull-up internal — hasilnya logika terbalik dan debug berjam-jam. Semua ini dicegah dengan satu tabel di interface spec.

Input, Output, dan Open-Drain

  • Push-pull output — pin didorong ke high atau low. Standar untuk LED, relay.
  • Open-drain output — pin hanya bisa menarik ke low; butuh pull-up eksternal. Wajib untuk I2C dan level-shifting sederhana.
  • Input — baca level pin; opsi pull-up/pull-down internal.
contoh_open_drain.txt
MCU PA1 (open-drain) ----R 4.7k---- +5V
                 |
                 +---- input logika 5V
MCU hanya menarik LOW; saat tidak menarik, pull-up 5V mengangkat ke 5V.
Hasil: MCU 3.3V bisa "berbicara" dengan logika 5V tanpa level shifter.

Interrupt: Hardware yang Menyela

Firmware tidak selalu menunggu — hardware bisa menyela (interrupt) firmware saat ada kejadian penting. Interrupt adalah cara paling efisien menangani kejadian real-time: tombol ditekan, data UART tiba, timer habis.

Edge vs Level

Dua jenis pemicu interrupt:

PemicuKapan TerjadiContoh
Edge (tepi)Saat sinyal berubah (naik/turun)Tombol ditekan, pulse encoder
Level (level)Selama sinyal berada di level tertentuSensor alarm aktif

Kesalahan desain yang umum: memakai level interrupt untuk sinyal yang berubah sangat cepat — firmware bisa di-interrupt terus menerus (interrupt storm). Untuk kejadian berulang cepat, edge interrupt jauh lebih aman.

Debounce: Kebenaran yang Kotor

Kontak mekanis (tombol, relay, encoder) tidak pernah "bersih": saat ditekan, level memantul ribuan kali dalam milidetik sebelum stabil. Tanpa debounce, satu kali tekan tombol bisa terdeteksi sebagai 5-20 kali tekan.

debounce.txt
TANPA debounce: 1-----0-1-0-1-0-1-0-----1 (bouncing ~5-20ms)
DENGAN debounce: 1-----0---------------1  (satu transisi stabil)
 
Debounce bisa hardware (RC filter + Schmitt) atau firmware (delay/multisample).
Firmware adalah pilihan paling umum: 30-50ms sampling cukup untuk mayoritas.

Tip

Keputusan debounce sebaiknya diambil di tahap desain, bukan debugging: tanya dulu — tombol ini akan dibaca firmware dengan polling atau interrupt? Jika interrupt, pastikan hardware memberi sinyal yang "bersih" atau firmware wajib mendebounce. Menulis keputusan ini di interface spec menghilangkan seluruh kelas bug di masa depan.

Hardware-Firmware Boundary: Siapa Pemegang Tanggung Jawab

Batasan tanggung jawab yang jelas mencegah "perang antar tim". Aturan umumnya:

AspekTanggung Jawab HardwareTanggung Jawab Firmware
Level logika & teganganMenentukan dan menjaminHarus mematuhi
Pin muxing (fungsi alt)Menentukan default yang dipakaiTidak mengubah tanpa koordinasi
Waktu sinyal (timing)Memberikan marginMematuhi timing diagram
Interrupt & debounceMenyediakan sinyal sesuai specMengimplementasikan sesuai spec
Proteksi & toleransiDesain di batas amanTidak melanggar batas

Aturan emasnya: setiap pin di papan punya satu pemilik yang jelas. Jika sebuah pin bisa dikonfigurasi dua fungsi alternatif, keputusan akhir ada di satu tempat — biasanya interface spec — bukan di kedua tim secara paralel.

Praktik: Menulis Interface Spec

Dokumen interface spec adalah hasil utama episode ini. Berikut template yang langsung bisa dipakai:

interface-spec.md (template)
# Interface Spec: [Nama Board]
 
## 1. Ringkasan
MCU yang dipakai, versi, dan blok utama.
 
## 2. Tabel Pin (WAJIB untuk setiap pin yang dipakai)
| Pin MCU | Nama Net | Arah | Fungsi | Level | Pull | Catatan |
|---|---|---|---|---|---|---|
| PA9  | MCU_TX  | Output | UART1 TX | 3.3V | -    | 115200 baud |
| PA10 | MCU_RX  | Input  | UART1 RX | 3.3V | -    | - |
| PA0  | BTN_MODE| Input  | Tombol   | Active-low | Pull-up int | Debounce 50ms |
| PB1  | LED_STATUS| Output| LED     | Active-high | - | Max 10mA |
 
## 3. Interrupt & Event
| Sinyal | Pin | Edge | Prioritas | Konsumen |
|---|---|---|---|---|
| Tombol mode | PA0 | Falling | Tinggi | Aplikasi |
 
## 4. Konvensi
- Level logika: 3.3V CMOS
- Default semua unused pin: input pull-down
- Perubahan pin wajib koordinasi 2 arah + update dokumen
 
## 5. Change Log
| Tanggal | Perubahan | Oleh |
|---|---|---|
| 2026-08-16 | Inisialisasi | - |

Setelah spec ditulis dan disepakati, setiap perubahan wajib melalui revisi — dan perubahan harus disepakati dua arah sebelum masuk ke skematik atau firmware. Ini yang membuat kedua tim bergerak sinkron.

Warning

Kesalahan paling mahal di boundary ini: firmware menyalakan pull-up internal pada pin yang hardware-nya sudah menarik ke level tertentu (atau sebaliknya). Sebelum board difabrikasi, review bersama tabel pin — hardware dan firmware membaca spec yang sama. Satu jam review ini menyelamatkan berminggu-minggu debugging setelah board jadi.

Penutup

Pada episode 11 ini, kalian telah memahami bahwa interface hardware-firmware adalah kontrak yang harus ditulis, disepakati, dan dijaga kedua tim.

Inti yang harus dibawa pulang:

  • Setiap GPIO butuh spesifikasi lengkap: fungsi, level, pull, timing — bukan hanya "pin PA0".
  • Pahami push-pull vs open-drain, dan edge vs level interrupt.
  • Debounce adalah masalah nyata yang harus diputuskan di tahap desain.
  • Boundary tanggung jawab yang jelas mencegah miskomunikasi antar tim.
  • Interface spec adalah dokumen hidup yang melindungi kedua sisi.

Di episode 12 selanjutnya kita memasuki dunia yang paling "ajaib" bagi pemula: RF & wireless design — antena, matching network, dan layout RF yang membuat perangkat terhubung dengan andal. Sampai jumpa di episode 12!

Belajar Hardware Engineer - Firmware-Hardware Interface | Belajar Hardware Engineer