Arsitektur Memori Peripheral BCM2835 pada Raspberry Pi: Memahami Base Peripheral

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 PeriferalOffset AlamatAlamat Fisik (Physical)Fungsi Utama
System Timer0x0030000x20003000Pengatur waktu sistem, timestamping, dan fungsi delay mikrosekon.
DMA Controller0x0070000x20007000Memungkinkan transfer data antar memori tanpa membebani CPU utama.
Interrupts0x00B2000x2000B200Mengelola sinyal interupsi dari berbagai hardware ke inti ARM.
Mailboxes0x00B8800x2000B880Antarmuka komunikasi pesan antara CPU (ARM) dan GPU (VideoCore).
GPIO0x2000000x20200000Pengaturan fungsi pin input/output (FSEL, SET, CLR, PUD).
UART0 (PL011)0x2010000x20201000Komunikasi serial standar (biasanya untuk konsol debug/terminal).
PCM / Audio0x2030000x20203000Pengatur modulasi kode pulsa untuk output audio.
SPI0 Master0x2040000x20204000Protokol komunikasi serial sinkron untuk sensor dan layar LCD.
I2C / BSC Master0x2050000x20205000Protokol Broadcom Serial Controller untuk komunikasi I2C.
PWM Controller0x20C0000x2020C000Pulse 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.