Cara Menghitung Size Partisi di ESP32: Panduan Praktis, Bukan Asal Tebak
Lanjutan dari pembahasan partition table ESP32 — kali ini fokus ke satu pertanyaan: berapa size yang sebaiknya dialokasikan untuk setiap…
Cara Menghitung Size Partisi di ESP32: Panduan Praktis, Bukan Asal Tebak
Lanjutan dari pembahasan partition table ESP32 — kali ini fokus ke satu pertanyaan: berapa size yang sebaiknya dialokasikan untuk setiap partisi?
Di artikel sebelumnya, saya membahas jenis-jenis partisi di ESP32 dan struktur kolom dalam partitions.csv. Salah satu kolom yang sempat disinggung tapi belum dibahas mendalam adalah Size — berapa banyak space yang sebaiknya dialokasikan untuk setiap partisi.
Menentukan size ini ternyata tidak asal tebak. Ada beberapa panduan yang bisa dijadikan acuan, tergantung jenis partisinya. Berikut breakdown-nya.
1. NVS (Non-Volatile Storage)
Cara hitung:
- Minimal 3 sector (tiap sector berukuran 4KB), sehingga minimal
0xC000. Namun, default yang umum digunakan adalah0x6000(24KB), yang sudah termasuk buffer aman untuk kebanyakan use case. - Jika hanya menyimpan data sedikit (kredensial WiFi, beberapa config value),
0x4000–0x6000biasanya sudah cukup. - Jika menyimpan banyak key-value (misalnya banyak nilai kalibrasi sensor atau konfigurasi yang kompleks), bisa dinaikkan ke
0x8000–0xA000.
Cara cek kebutuhan aktual:
idf.py monitor
# lalu panggil nvs_get_stats() di code untuk melihat usage

Output dari fungsi ini akan menunjukkan berapa banyak entries yang terpakai dibandingkan total kapasitas yang tersedia.
2. App Partition (factory / ota_0 / ota_1)
Cara hitung paling akurat — berdasarkan ukuran binary aktual:
idf.py build
Setelah proses build selesai, ESP-IDF akan menampilkan informasi ukuran binary:
Project build complete. To flash, run:
idf.py flash
Bootloader binary size: 0x... bytes
App binary size: 0x35d20 bytes (akan berbeda-beda)

Rule of thumb:
- Ambil ukuran binary
.binhasil build sebagai acuan dasar. - Tambahkan buffer sekitar 20–30% untuk headroom pengembangan ke depan (penambahan library atau fitur baru).
- Jika menggunakan OTA (
ota_0+ota_1), kedua slot harus berukuran sama, dan masing-masing minimal cukup untuk menampung binary beserta buffer tersebut.
Contoh kalkulasi:
Binary size sekarang: 850KB (0xD4400)
Buffer 30%: 850KB × 1.3 = ~1.1MB
Round up ke alignment 64KB: 0x120000 (1.125MB) per slot
3. SPIFFS / LittleFS
Cara hitung:
- Tentukan terlebih dahulu berapa data yang akan disimpan (misalnya: config JSON sekitar 5KB, buffer log MQTT saat offline sekitar 50KB, dan seterusnya).
- LittleFS memiliki overhead metadata sekitar 5–10% dari total size yang dialokasikan. Jadi, jika membutuhkan storage usable 100KB, sebaiknya alokasikan sekitar 110–115KB.
- Sisa space yang tersedia di flash (setelah dikurangi alokasi app, NVS, dan otadata) biasanya dialokasikan ke partisi ini, terutama jika kapasitas flash terbatas.
4. Coredump
Cara hitung:
- Minimal harus cukup untuk menampung task stack dan register dump dari task yang mengalami crash.
- Default yang disarankan Espressif adalah
**0x10000(64KB)**, yang sudah cukup untuk kebanyakan kasus. - Jika ESP32 memiliki RAM besar (misalnya menggunakan PSRAM) dan banyak task berjalan secara paralel, ukuran ini dapat dinaikkan sedikit, meskipun
0x10000umumnya sudah cukup generous.
5. OTA Data
Bersifat fixed, tidak perlu dihitung — selalu **0x2000** (8KB), karena partisi ini hanya menyimpan flag sederhana mengenai slot mana yang sedang aktif. Jarang sekali dibutuhkan ukuran lebih besar dari ini.
Strategi Keseluruhan: Pendekatan Top-Down dari Flash Size
Cara paling sistematis dalam menentukan alokasi adalah menghitung dari total kapasitas flash yang tersedia, lalu mengalokasikan ke masing-masing partisi:
Total Flash Size: misal 4MB (0x400000)
- Bootloader area: ~0x9000 (reserved, fixed)
- NVS: 0x6000
- OTAdata: 0x2000
- App x2 (OTA): 2 x 0x150000 = 0x2A0000
- Coredump: 0x10000
─────────────────────────────
Sisa untuk SPIFFS/LittleFS: hitung dari total dikurangi semua alokasi di atas
Pastikan total keseluruhan tidak melebihi flash size chip yang digunakan.
Tools untuk Validasi Otomatis
idf.py partition-table

Perintah ini menampilkan layout final partition table, sekaligus memberi tahu apabila ada partisi yang overlap atau exceed flash size — sehingga sebelum benar-benar di-flash ke device, kalkulasi manual yang sudah dibuat dapat diverifikasi terlebih dahulu.
idf.py size

Perintah ini menampilkan breakdown detail ukuran binary per komponen (drivers, libraries, app code), yang membantu memprediksi pertumbuhan ukuran ke depan apabila berencana menambah fitur baru.
Pendekatan Praktis Jika Tidak Ingin Menghitung Detail
Sebagai rule of thumb umum: mulai dari template default ESP-IDF (partitions_two_ota.csv jika membutuhkan OTA), build project, lalu periksa apakah muncul warning seperti "partition too small". Adjust secara manual hanya jika diperlukan.
Pendekatan iteratif seperti ini umumnya lebih praktis dibandingkan menghitung semua kebutuhan dari nol sejak awal, terutama pada fase awal development ketika kebutuhan storage belum benar-benar final.
메타데이터
- post_id
- a4e11c5ff8f9
- slug
- cara-menghitung-size-partisi-di-esp32-panduan-praktis-bukan-asal-tebak-a4e11c5ff8f9
- url
- https://medium.com/@nadiawaa/cara-menghitung-size-partisi-di-esp32-panduan-praktis-bukan-asal-tebak-a4e11c5ff8f9
- canonical_url
- https://medium.com/@nadiawaa/cara-menghitung-size-partisi-di-esp32-panduan-praktis-bukan-asal-tebak-a4e11c5ff8f9
- author_url
- https://medium.com/@nadiawaa
- status
- ok
- fetched_at
- 2026-06-23 17:05:31