Back to Blog

STM32MP157F-DK2 Geliştirme Kartındaki Cortex-M4 'e Nasıl SD Kart ile Firmware Yüklenir?

Üzerinde çalıştığım STM32MP157F-DK2 geliştirme kartındaki M4 tarafına nasıl firmware yüklemesinin ve başlatılmasının SD ile yapılacağını anlattığım yazım.

October 13, 2026 Updated: October 13, 2026 1 min read

STM32MP1 serisi mikroçipler , linux çalıştırabilen Cortex-A7 çerkirdeği ile real-time işler için oldukça iyi olan Cortex-M4 çekirdeği ile aynı çip üzerinde bulunur. Yani tek çip içinde iki çekirdek birlikte haberleştirilerek çalıştırılabilir.

Bu yazımda STM32MP157F-DK2 geliştirme kartında SD kart kullanarak bir M4 firmware'ini (benim örneğimde LD6 Led ini 500 ms aralıklarla blink yaptıran uygulamayı) baştan sona nasıl çalıştıracağımızı inceleyeceğiz.


Büyük Resim

  1. CubeMX (.ioc) ile proje oluşturulur, bunu yaparken stm32mp157f-dk2 kartı seçilir
  2. Kod ilgili konfigürasyonlar yapıldıktan sonra(gpio modu LD6 için output ayarlandıktan sonra) kodlar generate edilir
  3. CubeIDE'de oluşturulan proje açılarak main() içinde deneme kodumuz için delay kodları yazılıp proje derlenir(.elf dosyası oluşturulur)
  4. SD kart bilgisayara takılarak rootfs kökündeki /lib/firmware/ altına projede derlenerek oluşan .elf dosyası kopyalanır, sd kart uygun şekilde çıkarılır
  5. SD kart STM32MP157'ye takılır, güç ve mikro-USB karta takılır, bilgisayarda terminal açılır
  6. Serial terminal açılarak gerekli komutlar ile M4 için yüklenen .elf dosyası seçilir
  7. remoteproc ile M4'e dosyanın yüklenmesi ve M4 ün başlatılması komutları çalıştırılır
  8. LED Yanıp Sönmeye Başlar


1 - Proje Oluşturma (STM32CubeMX)

  1. Proje Başlangıcı: STM32CubeMX'i açın ve "Start My project from ST Board" seçeneğinden STM32MP157F-DK2 kartını seçin.
  2. Pin Yapılandırması: Kullanacağınız pini GPIO_Output olarak ayarlayın (Örn: LD6 için PA13).
  3. Runtime Context Ataması: Pinin Runtime Context ayarını mutlaka CortexM4 yapın. Bunu ayarlamak için pin şemasında PA13 üzerine sağ tıklanarak Pin Reserved altından değiştirilebilir. Eğer atamazsanız, çevre birimi varsayılan olarak Linux tarafında kalır ve çakışma yaşarsınız. Bu ayarlama ile bu pin M4 tarafından kullanılacağı belirtilir.
  4. Toolchain Seçimi: Toolchain/IDE olarak STM32CubeIDE seçin ve GENERATE CODE butonuna basarak projeyi oluşturun. _(CubeMX içinde STM32MP1 Cube MCU Package paketinin kurulu olduğundan emin olun).

2 - Kodu Yazma (STM32CubeIDE)

while (1)
 {
 / USER CODE BEGIN 3 /
 HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_13); // LD6 (kendi pininize göre)
 HAL_Delay(500);
 / USER CODE END 3 /
 }


3 - Projeyi Derleme

STM32CubeIDE içerisinde CM4 projenizi seçin ve Build'e basarak derleyin. Başarılı bir derleme sonucunda şu çıktı oluşacaktır:

<proje_klasoru>/<proje_adı>_CM4/Debug/<proje_adı>_CM4.elf


4 - .elf Dosyasını SD Karta Aktarma

  1. Geliştirme kartını kapatın ve SD kartınızı bilgisayarınıza takın.
  2. Bilgisayarınızda SD kartın rootfs (büyük olan ext4 formatlı ana Linux) partisyonunu bağlayın.
  3. Derlenen .elf dosyasını doğrudan firmware dizinine kopyalayın:
sudo cp CM4/Debug/<proje_adi>_CM4.elf <rootfs-baglanti-noktası-yolu>/lib/firmware/
 ls -l /lib/firmware/ # Dosyayı burada gözükmeli
 sync
 sudo umount  
  1. sync ve umount adımlarını atlamayın; aksi takdirde dosya karta eksik yazılabilir.


5 - Kartı Başlatma ve Boot Süreci

  1. SD kartı karta takın ve boot anahtarlarının SD Card konumunda olduğundan emin olun. Bu ayar st.com da var
  2. ST-LINK mikro-USB portunu bilgisayarınıza bağlayın ve terminali açın, aşağıdaki komutu çalıştırın:
-> ls /dev/ttyACM*
 /dev/ttyACM0 # Hangi port olduğunu öğrenmek için
 -> sudo picocom -b 115200 /dev/ttyACM0 # picocom proğramı ile serial porta bağlanılır, başka bir tane de kullanılabilr
  1. Konsol açıkken karta enerji verin veya reset butonu ile reset edin.

  1. Reset sırasında sizden "Select the boot mode" şeklinde bir seçim isteyecek, burada M4-examples olanı seçilmelidir:
  2. Bu menü girdisinin Device Tree yapılandırması, M4 çekirdeği için gerekli donanım kaynaklarını ve debug izinlerini doğru şekilde ayarlar.


6 - Linux Üzerinden M4'ü Çalıştırma

SD karta yüklediğimiz firmware i aktif etmek için: echo -n STM32MP1_deneme2_CM4.elf > /sys/class/remoteproc/remoteproc0/firmware

Başlatmak için: echo start > /sys/class/remoteproc/remoteproc0/state

Durdurmak için: echo stop > /sys/class/remoteproc/remoteproc0/state


Benim terminal çıktılarım bu şekilde, buradan referans alabilirsin:


Ayrıca bazı araştırmalarımdan elde ettiğim genel kültürsel bilgiler ise şu şekilde;

  1. STM32F4xx gibi bir kartta M4 patron gibiydi, MP157 de ise linux un yanında çalışan bir yardımcı gibi çalışan bir işlemcidir.
  2. STM32F4xx de kodlar flash da dururken, MP157 de M4 ün flash ı yoktur, kod RAM'de çalışır
  3. RCC clock'ları STM32F4xx de tamamen M4 kontrolünde iken MP157 de ortak kullanılır, A7 tarafı ayarlar
  4. Çevre birimleri ise ortaktır, aynı anda hem A7 hemde M4 kullanamaz. Linux tarafı hangi kaynağın M4 e ait olduğunu Device Tree den öğrenir.
  5. Debug işlemleri ise STM32F4xx kartında ST-Link ile yapılırken , MP157 taradında Engineering mode ve production mode olarak ayrılır, bu modların dökümantasyondaki yazılan ayalamalarına göre farklı şekillerde debug yapılması gerekir.
  6. Bu kartın avantajlarında biri kartta M4 ile gerçek zamanlı işlerin hassas şekilde yapılması ,aynı anda Ethernet, USB gibi üst seviyeli işlemlerin de aynı anda kontrol edilmesini sağlatyacak A7 nin bulunmasıdır.
  7. Endüstriyel cihazlarda tipik yapı bu şekildedir, gerçek ürün yapısına çok benzerdir.
  8. Hata M4 ten , A7 den yada Device Tree den gelebilir, teşhis normal kartlara göre zordur


Henüz kartı tam anlamıyla öğrenmiş değilim, öğrendikçe aldığım notları düzgünce toplayarak burada paylaşacağım, ileride Yocto ile ilgili yazılar da yazmayı düşünüyorum.

Related Posts