ESP32-S3'ü USB Belleğe Dönüştürün

👤 Yazar: ozcan 📅 Tarih: 27.06.2026 08:43 👁️ Görüntüleme: 19

ESP32-S3'ü USB Belleğe Dönüştürün: Dahili Flash Hafızayı Disk Yapma Rehberi


ESP32-S3’ün native USB çevre biriminin en heyecan verici özelliklerinden biri, cihazı bilgisayara tıpkı bir USB Flash Bellek (Mass Storage Class) gibi tanıtabilmesidir. Bu rehberde, ESP32-S3'ün dahili Flash hafızasında sanal bir FAT dosya sistemi oluşturacağız. Cihazı bilgisayara bağladığınızda bir klasör açılacak; içine dosya kaydedebilecek, silebilir veya ESP32-S3'ün kendi içindeki kodla bu dosyalara erişebileceksiniz. Veri loglama (Data Logging) veya sürücüsüz dosya transferi projeleri için mükemmel bir yöntem!


İşin Mantığı: FFat ve USB MSC Sınıfı

ESP32-S3'ün içerisinde yer alan FFat (FAT File System on Flash) kütüphanesini kullanarak, mikrodenetleyicinin Flash hafızasından bir bölümü (örneğin 1 MB veya 2 MB) dosya sistemi için rezerve edeceğiz. Ardından, ESP32 entegre kütüphanelerinde bulunan USBMSC sınıfı ile bu hafıza bloğunu USB hattı üzerinden bilgisayara bir kitle depolama aygıtı olarak köprüleyeceğiz.


Arduino IDE Kart Ayarları

Kodun sorunsuz çalışması ve native USB üzerinden diskin tetiklenmesi için Arduino IDE'de şu ayarları yaptığınızdan emin olun:

  • Tools -> USB MSC On Boot: "Enabled" (Bilgisayarın diski hemen algılaması için şarttır).
  • Tools -> Partition Scheme: İçerisinde FFat barındıran bir şema seçmelisiniz. Örneğin: "Default 4MB with ffat" veya "16MB Flash (2MB APP/12MB FATFS)" (Elinizdeki modülün flash boyutuna göre).

Örnek Uygulama Kodu

Aşağıdaki kodu ESP32-S3 native USB portu üzerinden kartınıza yükleyin. Kod yüklendikten sonra bilgisayarınız yeni bir sürücü tespit edecek ve biçimlendirme isteyebilir. İlk seferde onay verip FAT düzeninde biçimlendirebilirsiniz:

#include "USB.h"
#include "USBMSC.h"
#include "FFat.h"

USBMSC MSC;

// Bilgisayardan gelen okuma isteklerini karşılayan fonksiyon
static int32_t onRead(uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) {
  uint32_t sec_size = FFat.getSectorSize();
  if (FFat.readRAW(lba, (uint8_t*)buffer) == false) {
    return -1;
  }
  return bufsize;
}

// Bilgisayardan gelen yazma isteklerini karşılayan fonksiyon
static int32_t onWrite(uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) {
  if (FFat.writeRAW(lba, buffer) == false) {
    return -1;
  }
  return bufsize;
}

void setup() {
  Serial.begin(115200);

  // FFat Dosya sistemini başlatıyoruz, yoksa otomatik oluşturur
  if (!FFat.begin(true)) {
    Serial.println("FFat Başlatılamadı!");
    return;
  }

  // USB MSC ayarlarını ve callback fonksiyonlarını bağlıyoruz
  MSC.vendorID("YENIDIR");       // Üretici Adı (Max 8 karakter)
  MSC.productID("ESP32S3_USB");   // Ürün Adı (Max 16 karakter)
  MSC.productRevision("1.0");    // Versiyon
  MSC.onRead(onRead);
  MSC.onWrite(onWrite);
  
  // Sektör sayısını ve boyutunu sisteme bildiriyoruz
  MSC.begin(FFat.getSectorCount(), FFat.getSectorSize());
  
  // USB birimini aktif ediyoruz
  USB.begin();
  Serial.println("ESP32-S3 USB Flash Bellek Hazır!");
}

void loop() {
  // Loop içi boş kalabilir, tüm işlemler arka planda USB kesmeleri ile yürütülür.
  delay(1000);
}

Geliştiriciler İçin Önemli Not (Eşzamanlı Erişim Uyarısı)

Bu projeyi yaparken en çok dikkat edilmesi gereken konu çakışmalardır. Bilgisayar ESP32-S3'e bağlıyken diske doğrudan tam yetkiyle (LBA seviyesinde) müdahale eder. Eğer bilgisayar bağlıyken aynı anda ESP32'nin kendi içerisindeki kodla da (örneğin FFat.open() kullanarak) flasha veri yazmaya çalışırsanız, dosya sistemi bozulabilir (Corruption).

Çözüm: Cihaz bilgisayara bağlıyken verileri sadece PC'nin yazmasına izin verin. ESP32'nin dosya yazacağı zamanlarda ise USB MSC bağlantısını kod içerisinden geçici olarak durdurabilirsiniz.


Sonuç

Bu yöntemle, son kullanıcıların karmaşık arayüzlere ihtiyaç duymadan cihaz yapılandırma dosyalarını (örneğin bir config.txt veya settings.json dosyasını) doğrudan bilgisayardan düzenlemesini sağlayabilirsiniz. ESP32-S3, harici hiçbir donanıma ihtiyaç duymadan depolama çözümleri sunabilen harika bir canavardır.

Proje Ödevi: Bu altyapıyı bir adım ileriye taşıyarak, içine attığınız bir wifi.txt dosyasındaki SSID ve şifreyi okuyup otomatik olarak internete bağlanan akıllı bir cihaz yapmayı deneyebilirsiniz!


ESP32-S3 Mass Storage uygulaması sırasında karşılaştığınız sürücü veya biçimlendirme hatalarını alt kısımdaki yorumlar alanından paylaşarak teknik destek alabilirsiniz.

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
Sayfa Başı
Yenidir CMS V0.1