Membedah anatomi sistem embedded dari MCU vs SoC, memory map dengan Flash dan RAM, hingga cara kerja peripherals berbasis register, lalu praktik memetakan arsitektur sebuah board nyata agar semua kode di episode selanjutnya punya konteks yang jelas

Di episode 1 kalian tahu apa itu embedded engineer dan perangkat apa saja yang mereka tangani. Sekarang saatnya membuka kap mesin: memahami arsitektur yang menyatukan semua komponen itu. Episodo ini adalah lensa yang akan kalian pakai untuk membaca datasheet board apa pun — termasuk board yang belum pernah kalian pegang.
Mengapa arsitektur penting? Karena di embedded, kalian tidak bisa menulis kode tanpa tahu di mana ia hidup. Kode disimpan di flash, data berjalan di RAM, dan peripheral diakses lewat blok register di alamat tertentu. Datasheet adalah peta — dan episode ini mengajari kalian membaca petanya sebelum mencari harta karun.
Istilah yang paling sering membingungkan pemula adalah perbedaan MCU (microcontroller) dan SoC (System-on-Chip):
| Aspek | MCU | SoC |
|---|---|---|
| CPU | Sederhana (Cortex-M) | Kuat (Cortex-A, x86) |
| RAM | KB - ratusan KB, di dalam chip | MB - GB, di luar chip |
| Storage | Flash internal | eMMC/SD card, Linux rootfs |
| OS | None / RTOS | Linux / Android |
| Contoh | STM32, ESP32, RP2040 | i.MX, Raspberry Pi, Qualcomm |
| Pemakaian | Sensor, remote, kontrol motor | Router, dashcam, gateway |
Bayangkan MCU sebagai dapur kamar kos: semuanya serba pas, satu kompor, satu kulkas kecil, cukup untuk memasak menu sederhana. SoC adalah dapur restoran: banyak peralatan, ruang luas, bisa masak banyak menu sekaligus — tapi butuh lebih banyak energi dan sumber daya untuk dikelola.
Di arsitektur embedded Linux (episode 10), SoC sering berdampingan dengan MCU kecil sebagai companion untuk tugas real-time — pola yang disebut heterogeneous architecture.
Setiap MCU menerbitkan memory map — peta alamat yang menentukan di mana segala sesuatu tinggal. Untuk STM32F4 (Cortex-M4) peta konseptualnya kira-kira begini:
Tiga wilayah yang wajib kalian hafal:
Note
Kode C kalian tidak "tahu" di mana ia berada — linker script-lah yang menempatkannya ke alamat yang benar (dibedah di episode 6). Memahami memory map sekarang akan membuat episode 6 terasa seperti pengulangan yang mudah, bukan konsep baru.
Peripheral adalah modul hardware di dalam MCU yang berkomunikasi dengan dunia luar: GPIO untuk pin digital, UART/SPI/I2C untuk komunikasi, timer untuk pengukuran waktu, ADC untuk membaca tegangan. Kalian mengendalikannya bukan dengan fungsi ajaib, melainkan dengan menulis register.
Peripheral modelnya begitu: setiap modul punya blok register di memory map, masing-masing register punya fungsi per bit. Contoh STM32F4 GPIOA (base address 0x40020000):
/* GPIOA_MODER: 2 bit per pin untuk memilih mode (input/output/alternate) */
#define GPIOA_MODER (*(volatile uint32_t *)0x40020000)
/* Set pin 5 ke mode output: MODER[11:10] = 01 */
GPIOA_MODER = (GPIOA_MODER & ~(0x3UL << 10)) | (0x1UL << 10);Pola read-modify-write di atas adalah cara standar mengubah sebagian bit tanpa merusak bit lain. Library seperti STM32 HAL dan Arduino hanyalah pembungkus rapi dari operasi register seperti ini — ketika kalian paham level bawahnya, library apa pun terasa transparan.
Mari petakan board kalian sendiri. Ambil board yang kalian siapkan di episode 0, buka datasheet/reference manual-nya, dan isi tabel berikut:
Kategori | Isi
-------------------- | -------------------------
MCU / SoC | STM32F401RE, ESP32-WROOM, RP2040
Arsitektur CPU | ARM Cortex-M4, Xtensa LX6
Flash | 512 KB (0x08000000)
RAM | 96 KB (0x20000000)
Base GPIO | GPIOA @ 0x40020000
Peripheral utama | UART2, SPI1, I2C1, TIM2
Tegangan logic | 3.3VCara mengisi: dari halaman "Memory Map" dan "Pin Multiplexing" di reference manual (STM32) atau datasheet (ESP32). Untuk STM32 gunakan RM0368 Reference Manual; untuk RP2040 gunakan datasheet 646 halaman resmi Raspberry Pi.
Saat memetakan, perhatikan satu detail kritis: pin multiplexing. Sebuah pin fisik bisa berfungsi sebagai GPIO, UART TX, atau PWM — tergantung register alternate function yang kalian set. Kesalahan paling umum pemula: menghubungkan sensor ke pin yang sebenarnya sudah dipakai peripheral lain. Pemetaan board menyelesaikan kebingungan ini sebelum terjadi.
Inti yang harus dibawa pulang:
Di episode 3 selanjutnya kita masuk ke bahasa: C/C++ untuk embedded — pointer, memory management, volatile, dan pola-pola kode embedded yang menentukan apakah firmware kalian andal atau rapuh. Fondasi arsitektur yang barusan dibangun akan dipakai langsung untuk memahami mengapa kode embedded ditulis seperti yang kalian lihat. Sampai jumpa di episode 3!