Sebelum menulis firmware pertama, kalian perlu menguasai C/C++, bit manipulation, dan elektronika dasar, lalu menyiapkan MCU board STM32/ESP32, ARM GCC, OpenOCD, debugger, serta toolchain Rust untuk episode 15. Di episode ini kalian memverifikasi seluruh environment siap dipakai sepanjang series.

Selamat datang di series Belajar Firmware Engineer! Series ini akan membawa kalian menguasai peran yang menulis software tingkat rendah untuk perangkat keras: kontrol langsung, real-time, dan constraint ketat. Total ada 28 episode yang tersusun dalam enam fase, dari fondasi konsep sampai production readiness.
Sebelum menjalankan arm-none-eabi-gcc pertama kalian, ada skill dasar dan perangkat yang wajib disiapkan. Mengapa prasyarat ini penting? Karena firmware bekerja di lapisan paling bawah: ia menulis ke register perangkat keras, membaca bit-bit dari sensor, dan berjalan dengan RAM puluhan kilobyte. Jika kalian belum paham pointer atau belum tahu beda 3.3V dengan 5V, kalian akan kesulitan mendiagnosis saat board tidak merespons atau terbakar.
Episode 0 ini adalah peta jalan kalian: kita akan memastikan skill dasar terpenuhi, menyiapkan board dan debugger, memasang toolchain, lalu memverifikasi seluruh environment siap dipakai sepanjang series.
Firmware hampir selalu ditulis dalam C. Kalian wajib nyaman dengan variabel, fungsi, struct, pointer, dan operasi bitwise. Pointer adalah bahasa utama firmware — register perangkat keras diakses lewat alamat memori, dan peripheral driver bekerja dengan membaca-menulis bit di register. Contoh yang akan kalian pakai terus:
uint32_t reg = 0;
reg |= (1U << 3); // set bit 3
reg &= ~(1U << 3); // clear bit 3
reg ^= (1U << 3); // toggle bit 3Kalian tidak perlu menjadi ahli elektronika, tapi wajib paham empat hal: tegangan (volt), arus (ampere), ground, dan pull-up/pull-down resistor. Sebagian besar board belajar bekerja pada logika 3.3V — memberi 5V ke pin GPIO bisa membakar papan. Menyalakan LED cukup dengan memberi tegangan pada pin + resistor pembatas arus (±220 ohm).
Firmware hidup dalam batasan keras. Pahami perbedaan flash (menyimpan program, tetap saat listrik mati) dan RAM (data runtime, hilang saat listrik mati), plus konsep register — lokasi memori khusus yang mengontrol hardware. Register inilah yang menjadi jembatan antara software dan hardware sepanjang series ini.
Pilihan paling seimbang untuk belajar adalah STM32 (arsitektur ARM Cortex-M yang dominan di industri) dan ESP32 (populer untuk proyek ber-konektivitas). Rekomendasi minimal:
| Perangkat | Fungsi | Keterangan |
|---|---|---|
| STM32 Nucleo (F103/F411) | Board utama | Ada ST-Link terintegrasi, murah, dokumentasi raksasa |
| ESP32 DevKit | Board alternatif | WiFi/BLE bawaan, cocok untuk episode 12 (networking) |
| ST-Link / J-Link / Black Magic Probe | Debugger | SWD + GDB; Nucleo sudah punya ST-Link di papan |
| Breadboard + jumper | Merakit rangkaian | Tanpa solder, mudah dipindah |
| LED + resistor + button | Output & input dasar | Menguji GPIO sejak episode 4 |
| Logic analyzer (opsional) | Observasi sinyal | Berguna untuk memahami UART/SPI/I2C di episode 5 |
Jika kalian belum punya hardware fisik, QEMU (emulator ARM) dan Wokwi (simulator di browser) cukup untuk mengikuti hampir semua episode — kita bahas penggunaannya di episode 9.
ARM GCC (arm-none-eabi-gcc) men-compile C ke binary ARM tanpa OS, dan OpenOCD men-jembatani debugger ke GDB:
sudo apt install gcc-arm-none-eabi openocdUntuk board Nucleo, driver ST-Link juga berguna:
sudo apt install stlink-toolsUntuk praktik ESP32 (episode 12), install PlatformIO:
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py | python3 -Episode 15 akan menulis firmware Rust. Siapkan sejak sekarang:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add thumbv7em-none-eabihfSebelum lanjut ke episode 1, jalankan verifikasi menyeluruh:
arm-none-eabi-gcc --version
openocd --version
pio --version
rustc --versionUji toolchain dengan firmware blink paling sederhana. Buat project PlatformIO untuk board Nucleo:
pio project init --board nucleo_f103rbLalu ganti src/main.cpp dengan LED blink (pakai Arduino API yang disediakan PlatformIO), dan jalankan:
pio run
pio run -t uploadNote
Jika upload gagal, cek kabel USB dan driver serial. Untuk Nucleo, tombol reset di papan sering membantu. QEMU bisa menggantikan hardware: qemu-system-arm -M netduino2 menjalankan STM32F103 virtual — cukup untuk menguji kode di episode 3 sampai 9.
Rangkuman yang sudah kalian siapkan di episode 0:
blink berhasil di-flash ke board.Jika ada yang belum terpenuhi, berhenti dulu dan lengkapi sebelum melanjutkan. Perjalanan 27 episode ke depan akan jauh lebih lancar dengan pijakan yang kuat ini.
Inti yang harus dibawa pulang:
blink pertama yang berhasil di-flash.Di episode 1 selanjutnya kita akan membahas peran & karir Firmware Engineer — apa yang sebenarnya dikerjakan sehari-hari, perbedaannya dengan software engineer, dan konteks pasar 2026 dengan track gaji $85–175K serta posisi Rust yang mulai mainstream. Pastikan environment kalian sudah siap, karena perjalanan Belajar Firmware Engineer baru saja dimulai!