Mikrodenetleyicilerde Flash Bellek ve Yönetimi

Kerem Aydın·9 Temmuz 2026·⏱6 dk

Flash bellek, mikrodenetleyicilerde güç kesildikten sonra da korunması gereken yazılım kodunu (firmware) ve kritik verileri saklamak için kullanılan kalıcı bir bellektir. MK bağlamında "flash işlemcisi" terimi genellikle ayrı bir çipe değil, okuma, karmaşık silme ve hücre yazma işlemlerini yöneterek veri bütünlüğünü sağlayan dahili flash bellek denetleyicisine — donanımsal bir bloğa atıfta bulunur.

Gömülü sistem geliştiricilerinin güvenli firmware güncellemeleri (OTA), ayarların kaydedilmesi ve çipin erken aşınmasının önlenmesi için flash bellek mimarisini anlaması gerekir.

İçindekiler

  1. Mikrodenetleyicilerde flash bellek nedir
  2. Mimari: Sayfalar, sektörler ve banklar
  3. Flash bellek denetleyicisinin ("flash işlemcisi") rolü
  4. Yazma ve silme işlemlerinin özellikleri
  5. Yazılım geliştirmeye etkileri
  6. Kalıcı bellek türlerinin karşılaştırılması
  7. Geliştiricilerin sık yaptığı hatalar
  8. SSS

Mikrodenetleyicilerde flash bellek nedir {#what-is-flash}

Güç kesintilerinde verilerini kaybeden RAM'in (rastgele erişimli bellek) aksine, flash bellek bilgileri yıllarca saklar. Modern mikrodenetleyicilerde (MCU) doğrudan işlemci çekirdeğinin yanındaki çipe entegre edilmiştir.

Temel özellikler:

  • Kalıcılık: Veriler güç olmadan korunur.
  • Yüksek depolama yoğunluğu: Kompakt bir kasa içinde büyük kod hacimlerinin barındırılmasına olanak tanır.
  • Sınırlı ömür: Hücrelerin yeniden yazma döngüsü limiti vardır (genellikle 10.000 ila 100.000 silme döngüsü).

Sık değişen verileri (sayacılar, günlük kayıtları) saklamak için harici EEPROM veya FRAM kullanmak ya da ana sektörlerin ömrünü tüketmemek için MK'nın flash belleği içinde aşınma dengeleme (wear leveling) algoritmaları uygulamak daha iyidir.

Mimari: Sayfalar, sektörler ve banklar {#architecture}

Mikrodenetleyicinin flash belleği homojen bir dizi değildir. Programın bağlantısı sırasında ve bootloader yazarken dikkate alınması gereken katı bir hiyerarşiye sahiptir.

  1. Hücre (Cell): Minimum saklama birimi (MLC/TLC'de 1 bit veya birkaç bit, ancak MK'larda güvenilirlik için çoğunlukla hücre başına 1 bit).
  2. Sayfa (Page): Yazılabilecek minimum birim. Boyut eski AVR'lerde 64 bayttan modern ARM Cortex-M'lerde 2–4 KB'a kadar değişir.
  3. Sektör/Blok (Sector): Silinebilecek minimum birim. Yeniden yazmadan önce silme işlemi zorunludur. Sektör boyutu 1 KB ile 128 KB arasında olabilir.
  4. Bank (Bank): Büyük bellek bölümü. Birçok modern MK (örneğin STM32 G4 veya H7 serisi), aynı anda iki firmware kopyasının saklanmasına olanak tanıyan çift bankalı mimariye (Dual-Bank) sahiptir.

Popüler ailelerde bellek organizasyonunun karşılaştırılması

MK AilesiMin. yazma birimiMin. silme birimiÖmür (döngü)Özellik
AVR (Arduino)1 bayt (emülasyon) / sayfaSayfa (128–256 bayt)~10.000Basit mimari, karmaşık denetleyiciler yok
STM32 (F1/F4)Kelime (32 bit)Sektör (16–128 KB)~10.000 – 100.000Bazı serilerde eşit olmayan sektör boyutları
ESP324 baytSektör (4 KB)~100.000Dahili OTA ve şifreleme desteği
MSP430Bayt/KelimeSegment (512 bayt)~100.000Yazma sırasında çok düşük güç tüketimi

Flash bellek denetleyicisinin ("flash işlemcisi") rolü {#flash-controller-role}

"Flash işlemcisi" terimi, flash arayüz denetleyicisi için (örneğin STM32'de FPEC veya AVR'de NVM Controller) kullanılan gayriresmi bir ifadedir. Bu, bellek yönetiminin karmaşık fiziksel süreçlerini üstlenen özel bir donanımsal bloktur.

Denetleyicinin görevleri:

  1. Yüksek voltaj üretimi: Yazma ve silme işlemleri için çekirdek besleme voltajından daha yüksek bir voltaj gerekir (genellikle dahili bir charge pump ile üretilir).
  2. İşlem zamanlaması: Denetleyici zamanlamaları izler. Flash'a yazma, işlemcinin talimatları yürütmesinden daha yavaştır; bu nedenle denetleyici kod yürütmeyi askıya alabilir (wait-states) veya arka planda çalışabilir.
  3. Arızalara karşı koruma: Korunan alanlara (örneğin bootloader'ın bulunduğu yer) yazmayı donanımsal olarak kilitleme ve işlemlerin doğruluğunu kontrol etme (ECC — hata düzeltme kodları).
  4. Önbellekleme: Flash'a erişim SRAM'den daha yavaş olduğundan, çekirdek çalışmasını hızlandırmak için flash bellekten talimatların önceden getirilmesi.

Yazma ve silme işlemlerinin özellikleri {#write-erase-process}

Flash belleği RAM'den ayıran temel sınırlama: Bir biti keyfi olarak 1'den 0'a veya 0'dan 1'e yeniden yazamazsınız.

  1. Silme: Bir sektördeki tüm bitleri 1 durumuna (0xFF) getirir. Bu en uzun süren işlemdir (birkaç milisaniyeden saniyelere kadar sürebilir).
  2. Yazma (Programlama): Bitleri yalnızca 1'den 0'a değiştirebilir.

Kritik kural: Flash bellekteki verileri değiştirmek istiyorsanız, önce tüm sektörü RAM'e okumalı, arabellekte gerekli baytları değiştirmeli, flash'taki sektörü tamamen silmeli ve ardından güncellenmiş arabelleği geri yazmalısınız. Silme işlemi yapmadan mevcut verilerin üzerine yazmaya çalışmak hataya veya hatalı değerlere neden olur.

Yazılım geliştirmeye etkileri {#software-implications}

Flash bellek mimarisi belirli programlama kalıplarını dayatır:

  • Kod ve veri ayrımı: Sabitler ve kod flash'ta saklanır. Değişkenler RAM'dedir. Yeniden başlatmalar arasında ayarları kaydetmek için flash'a yazma fonksiyonlarını açıkça yazmanız gerekir.
  • Güncellemelerin atomikliği: Firmware güncellemesi (FW Update) sırasında çalışan mevcut kod silinemez. Bu nedenle A/B (Çift Bank) şeması kullanılır: yeni firmware pasif banka yazılır ve yalnızca bütünlük kontrolünden sonra kesme vektör göstergesi yeni banka geçirilir.
  • Kesmelerin yasaklanması: Yazma/silme işlemleri sırasında birçok denetleyici, flash bellek veri yolu meşgul olacağından kesmelerin devre dışı bırakılmasını veya kodun yalnızca RAM'den yürütülmesini gerektirir.

Geliştiricilerin sık yaptığı hatalar {#common-mistakes}

  1. Aşınma dengelemeyi (Wear Leveling) görmezden gelmek: Yapılandırmanın sık sık aynı adrese yazılması sektörü hızla bozar. Çözüm: Flash'ta dairesel arabellek kullanın veya sık değişen verileri EEPROM/FRAM'a taşıyın.
  2. Aynı alandaki kod yürütülürken silme işlemi yapmak: Yazma fonksiyonunun kodu, silmeye çalıştığınız flash sektöründe bulunuyorsa, işlemci talimatları kaybeder ve kilitlenir. Çözüm: Yazma kodunu SRAM'den yürütün veya başka bir bellek bankı kullanın.
  3. Bütünlük kontrolünün eksikliği: Flash'a veri yazdıktan sonra her zaman geri okuyun ve orijinalle karşılaştırın. Yazma sırasındaki güç kesintileri verilere zarar verebilir.
  4. Erişim süresinin hesaba katılmaması: Flash'tan okuma, RAM'den daha yavaştır. Yüksek çekirdek frekanslarında, aksi takdirde sistem kararsız çalışacağından flash denetleyicide bekleme döngülerini (Wait States) doğru ayarlamanız gerekir.

SSS {#faq}

Mikrodenetleyicide Flash ve EEPROM arasındaki fark nedir? Flash, büyük hacimli kod ve veri saklamak için tasarlanmıştır, büyük bloklar halinde silinir ve daha düşük yeniden yazma ömrüne sahiptir. EEPROM (varsa) bayt bazında yazma ve silmeye izin verir, daha yüksek ömre (1 milyon döngüye kadar) sahiptir ancak hacim olarak çok daha küçüktür ve üretim maliyeti daha yüksektir. Modern MK'larda EEPROM işlevi genellikle flash bellek üzerinden emüle edilir.

"Yazma koruması" (Write Protection) nedir? Bu, flash bellek alanlarının kazara veya kötü niyetli yeniden yazılmasına karşı korunması mekanizmasıdır. Koruma seviyeleri, yazmanın tamamen engellenmesinden okumanın yasaklanmasına (fikri mülkiyet koruması) kadar değişebilir.

Flash bellek dosya sistemi olarak kullanılabilir mi? Evet, büyük flash hacmine sahip MK'lar için (512 KB ve üzeri), flash belleğin aşınma özelliklerini dikkate alan ve verileri dosya olarak saklamaya olanak tanıyan hafif dosya sistemleri (LittleFS, SPIFFS) mevcuttur.

Neden firmware kaynak koddan daha fazla yer kaplar? Derleyici, hizmet verileri, kesme vektör tabloları, adres hizalamaları ve kütüphane fonksiyonları ekler. Ayrıca flash bellekte, hizalama nedeniyle sektörler arasında genellikle kullanılmayan boşluklar bulunur.