Dalam pengembangan sistem operasi bare metal, pemahaman mendalam mengenai peta memori (memory map) adalah fondasi utama. Pada arsitektur VideoCore IV yang digunakan oleh chip BCM2835 (Raspberry Pi 1, Zero, dan Zero W), seluruh kontrol perangkat keras diakses melalui mekanisme Memory-Mapped I/O (MMIO) yang berpusat pada sebuah blok alamat yang disebut sebagai Base Peripheral.
Konsep Dasar Alamat Fisik
Secara arsitektural, Base Peripheral pada BCM2835 ditetapkan pada alamat fisik 0x20000000. Setiap perangkat keras spesifik (seperti GPIO, Timer, atau UART) dapat diakses dengan menambahkan offset tertentu ke alamat dasar tersebut.
Penentuan alamat fisik akhir menggunakan rumus sederhana:
Physical Address = Base Peripheral + Offset
Pemisahan ini memungkinkan pengembang untuk mengorganisir kode program secara modular, di mana setiap modul perangkat keras memiliki offset uniknya sendiri.
Daftar Lengkap Perangkat pada Base Peripheral
Berikut adalah tabel rincian periferal utama yang terdapat di dalam rentang memori BCM2835 yang krusial untuk pengembangan sistem operasi dari nol:
| Nama Periferal | Offset Alamat | Alamat Fisik (Physical) | Fungsi Utama |
| System Timer | 0x003000 | 0x20003000 | Pengatur waktu sistem, timestamping, dan fungsi delay mikrosekon. |
| DMA Controller | 0x007000 | 0x20007000 | Memungkinkan transfer data antar memori tanpa membebani CPU utama. |
| Interrupts | 0x00B200 | 0x2000B200 | Mengelola sinyal interupsi dari berbagai hardware ke inti ARM. |
| Mailboxes | 0x00B880 | 0x2000B880 | Antarmuka komunikasi pesan antara CPU (ARM) dan GPU (VideoCore). |
| GPIO | 0x200000 | 0x20200000 | Pengaturan fungsi pin input/output (FSEL, SET, CLR, PUD). |
| UART0 (PL011) | 0x201000 | 0x20201000 | Komunikasi serial standar (biasanya untuk konsol debug/terminal). |
| PCM / Audio | 0x203000 | 0x20203000 | Pengatur modulasi kode pulsa untuk output audio. |
| SPI0 Master | 0x204000 | 0x20204000 | Protokol komunikasi serial sinkron untuk sensor dan layar LCD. |
| I2C / BSC Master | 0x205000 | 0x20205000 | Protokol Broadcom Serial Controller untuk komunikasi I2C. |
| PWM Controller | 0x20C000 | 0x2020C000 | Pulse Width Modulation untuk kontrol motor atau tingkat kecerahan LED. |
Relevansi dalam Implementasi Kode C
Dalam praktiknya, kita sering mendefinisikan alamat-alamat ini menggunakan pointer volatil untuk memastikan kompiler tidak melakukan optimasi yang tidak diinginkan pada akses memori perangkat keras. Sebagai contoh, akses ke register fungsi GPIO 16 (GPFSEL1) dilakukan melalui alamat:
0x20000000 (Base) + 0x200000 (GPIO Offset) + 0x04 (Register Offset) = 0x20200004.
Memahami struktur ini adalah kunci bagi para pengembang untuk bisa “berbicara” langsung dengan silikon tanpa bantuan library pihak ketiga atau sistem operasi yang sudah ada.
