Raspberry Pi Pico adalah mikrokontroler berbasis RP2040 yang dikembangkan oleh Raspberry Pi Foundation. Salah satu aspek penting dalam pengembangan proyek dengan Pico adalah memahami struktur penyimpanan programnya. Artikel ini akan membahas secara mendalam bagaimana program disimpan di Raspberry Pi Pico, termasuk flash memory, RAM, serta manajemen file sistem. Dengan pemahaman yang baik tentang struktur penyimpanan, pengembang dapat mengoptimalkan kinerja, mengelola ruang penyimpanan dengan efisien, dan memastikan program berjalan dengan stabil.
Arsitektur Penyimpanan Raspberry Pi Pico
Raspberry Pi Pico memiliki dua jenis memori utama, yaitu:
- Flash Memory (Non-Volatile Storage)
- SRAM (Static Random-Access Memory, Volatile Storage)
1. Flash Memory (Penyimpanan Non-Volatile)
Flash memory pada Pico berkapasitas 2MB (beberapa varian memiliki ukuran berbeda). Memori ini digunakan untuk menyimpan:
- Program firmware (UF2, MicroPython, atau C/C++ binaries)
- File sistem (jika menggunakan MicroPython/CircuitPython)
- Data konfigurasi yang perlu dipertahankan setelah reboot
Struktur Flash Memory
Flash memory terbagi menjadi beberapa bagian, yaitu:
- Bootloader (UF2 Bootloader)
- Terletak di sektor awal flash (sekitar ratusan KB).
- Bertanggung jawab untuk memuat firmware baru melalui USB mass storage.
- Program Firmware
- Setelah bootloader, firmware utama disimpan dalam format biner.
- Pada MicroPython, firmware mencakup interpreter dan library dasar.
- File System (Jika Digunakan)
- MicroPython/CircuitPython menggunakan bagian flash sebagai sistem file virtual.
- File seperti boot.py, main.py, dan modul custom disimpan di sini.
2. SRAM (Penyimpanan Volatile)
RP2040 memiliki 264KB SRAM yang terbagi menjadi:
- 2 × 64KB bank + 1 × 128KB bank (total 256KB) untuk aplikasi
- 4KB untuk USB controller, dan sisanya untuk sistem.
SRAM digunakan untuk:
- Menyimpan variabel program saat eksekusi.
- Stack dan heap memory.
- Buffer untuk operasi I/O.
Bagaimana Program Disimpan dan Dieksekusi?
1. Proses Booting
Saat Pico dinyalakan:
- Bootrom internal (mask ROM) menjalankan kode pertama.
- Bootrom memeriksa pin bootsel untuk menentukan mode update firmware.
- Jika tidak ada update, bootloader UF2 memuat firmware dari flash.
- Setelah boot, firmware utama seperti MicroPython atau program C/C++ mulai dieksekusi dari flash.
2. Penyimpanan Program dalam Flash
- Dalam C/C++:
- Program dikompilasi menjadi file .uf2 atau .bin dan ditulis ke flash.
- Default-nya RP2040 mendukung XIP (Execute In Place), jadi kode dijalankan langsung dari flash, tidak dipindahkan ke SRAM kecuali secara eksplisit di-copy.
- Dalam MicroPython:
- Firmware MicroPython disimpan di flash.
- Skrip pengguna (main.py, boot.py) disimpan di sistem file virtual.
3. Eksekusi Program dari Flash vs RAM
- Eksekusi dari Flash (XIP - Execute in Place):
- RP2040 mendukung XIP, sehingga kode dapat dijalankan langsung dari flash tanpa memuat ke RAM.
- Menghemat RAM tetapi sedikit lebih lambat dibanding eksekusi dari SRAM.
- Eksekusi dari SRAM:
- Kode yang perlu kinerja tinggi dapat di-copy ke SRAM.
- Memakan lebih banyak RAM tetapi lebih cepat.
Manajemen File System di Raspberry Pi Pico
1. File System pada MicroPython/CircuitPython
MicroPython menggunakan flash sebagai sistem file virtual dengan struktur:
2. Penyimpanan File Eksternal
- Pico tidak memiliki penyimpanan eksternal default, tetapi dapat menggunakan:
- EEPROM I2C/SPI
- SD Card (dengan modul SPI)
- Flash tambahan (melalui QSPI)
Optimasi Penggunaan Penyimpanan
1. Mengurangi Ukuran Program
- Dalam C/C++:
- Gunakan compiler flags seperti -Os untuk optimasi ukuran.
- Hindari library yang tidak diperlukan.
- Dalam MicroPython:
- Hapus komentar dan spasi berlebihan.
- Gunakan`mpy-cross untuk mengkompilasi .py ke .mpy (lebih kecil).
2. Manajemen Memory Dinamis
- Gunakan gc.collect() di MicroPython untuk membersihkan memori tak terpakai.
- Hindari alokasi memori berlebihan dalam loop.
3. Pembagian Flash untuk Data dan Program
- Beberapa proyek memisahkan firmware dan data pengguna.
- Contoh: 1.5MB untuk firmware, 0.5MB untuk file konfigurasi.
Contoh Kode Program MicroPython (cek penggunaan flash & RAM)
import os, gc
# Cek sisa ruang di filesystem
stats = os.statvfs('/')
print("Sisa ruang flash:", stats[0] * stats[3], "bytes")
# Cek memori heap yang tersedia
print("Memori bebas:", gc.mem_free(), "bytes")
Contoh C (Blink LED dari Flash)
#include "pico/stdlib.h"
int main() {
const uint LED_PIN = 25;
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true) {
gpio_put(LED_PIN, 1);
sleep_ms(500);
gpio_put(LED_PIN, 0);
sleep_ms(500);
}
}
Pemahaman ini tidak hanya membantu pemula memahami dasar penyimpanan, tetapi juga memberi bekal bagi pengembang lanjut untuk mengoptimalkan performa dan stabilitas proyek berbasis Raspberry Pi Pico.
Baca juga: Pengenalan I2C di Raspberry Pi Pico
Siap Untuk Membuat Proyek Impianmu Menjadi Kenyataan?
Klik di sini untuk chat langsung via WhatsApp dan dapatkan dukungan langsung dari tim ahli kami!
0 on: "Struktur Penyimpanan Program di Raspberry Pi Pico"