Haberler

Arduino Bootloader Programlama – ARM Mikrodenetleyicilere Başlarken

Bootloader’lar, mikrodenetleyici programlamasının önemli ama daha az konuşulan bir bileşenidir. Bu terimle karşılaşmış olabilirsiniz veya mikrodenetleyicilerinizdeki bootloader’larla doğrudan etkileşimde bulunmuş olabilirsiniz, ancak onların ne yaptıkları hakkında ne kadar bilgi sahibisiniz? Bu makalede, bootloader programlaması hakkında her şeyi öğrenmek ve ARM mikrodenetleyicileri ile nasıl başlayacağınızı keşfetmek için bize katılın!

Bu kılavuzda, aşağıdakiler ve daha fazlasını ele alacağız!

  • ARM Mikrodenetleyicileri nedir?
  • Bootloader’lara Giriş & Ne Yaparlar
  • Bootloader’lar hangi sorunları çözer?
  • Programlanabilir Bootloader’lara sahip Popüler ARM Mikrodenetleyicileri
  • Eğitim: Firmware’ı Flashlamak için Bootloader Nasıl Kullanılır
  • Özel Bir Bootloader Programlama

ARM Mikrodenetleyicileri Nedir?

Kısacası, ARM Mikrodenetleyicileri, bir ARM işlemcisi kullanan mikrodenetleyicilerdir. ARM, Advanced RISC Machines’in kısaltmasıdır; burada RISC, Reduced Instruction Set Computing anlamına gelir.

CISC (Complex Instruction Set Computing) işlemcileri ile karşılaştırıldığında, RISC işlemcileri donanımla etkileşimde bulunmak için daha basit talimatlar kullanır. Bu, aşağıdakiler gibi birkaç önemli avantaj sağlar:

  • Daha basit talimatlar sayesinde daha iyi performans
  • Daha az talimat sayısı nedeniyle daha az çip alanı gereksinimi
  • Daha basit donanım tasarımı sayesinde çip başına maliyetin düşmesi

Bu nedenle, ARM işlemcileri, yüksek performans, düşük kaynak tüketimi ve düşük maliyet gibi kritik gereksinimlerin olduğu mikrodenetleyiciler için oldukça uygundur. Örneğin, Wio Terminal‘da kullanılan ATSAMD51 ve Seeeduino XIAO‘nun ATSAMD21’i, her ikisi de ARM tabanlı işlemcilerdir. Popüler STM32 mikroçip serisi de ARM mimarisine dayanmaktadır.

Bootloader’lara Giriş

Bootloader, mikrodenetleyici ilk başlatıldığında çalışan küçük bir kod parçasıdır. Bu kod, gerçek uygulamayı dahili veya harici bellekten (genellikle mikrodenetleyiciler için dahili flaş) cihaza RAM’e kopyalamak için kullanılır; burada uygulama çalıştırılabilir. Bootloader her başlatmada çalıştığı için, cihazın firmware’ını istediğimiz zaman kolayca değiştirebilir veya güncelleyebiliriz.

Kaynak: ARM Developer

Bootloader’lar Hangi Sorunları Çözer?

Bootloader’lar, dağıtılmış bir sistemi kolayca güncelleyerek hataları düzeltmemizi veya basitçe özelliklerini güncellemeyi sağlar. Bootloader olmadan, PCB üzerindeki çip ile doğrudan etkileşimde bulunmak zorunda kalırdık; bu, aşağıda gösterilen JTAG hata ayıklayıcı gibi özel donanımlar gerektirir, hatta basit değişiklikler için bile.

Bu makalenin odak noktası olmasa da, JTAG, donanım hata ayıklama için yaygın olarak kullanılan bir endüstri standardıdır. Doğal olarak, yeni firmware’ı mikrodenetleyicilerimize yüklemek için de kullanılabilir. Ancak, JTAG kullanmanın, sıradan bir hobiistin ötesinde bazı uzmanlık gerektirdiği gerçeğinin yanı sıra, bazı modern mikrodenetleyiciler PCB’ye doğrudan erişim sağlamaz – bu da JTAG’ı uygulanamaz hale getirir.

Bu nedenle, bootloader doğdu. Yeni uygulamaları yüklemek için ortak bir arayüz ile, firmware’ımızı JTAG kullanmadan güncelleyebiliriz!

Bootloader Avantajları

Bootloader’lar, kolaylık amacıyla geliştirilmiş olsalar da, aşağıdaki avantajları da beraberinde getirmiştir.

1.  Bootloader’lar Özelleştirilebilir

Bootloader’lar kod olduğundan, farklı davranmaları için programlayabiliriz. Örneğin, bootloader’ı, daha uygun olan bir SD kart, internet, I2C / UART gibi farklı arayüzlerden firmware alacak şekilde özelleştirebiliriz.

Bootloader’ların nasıl farklılık gösterebileceğine dair bazı örnekler:

  • Kablolu Bağlantı – Örneğin, USB üzerinden iletilen ikili (derlenmiş taslak) Arduino bootloader’ı
  • Kablosuz Bağlantı – Örneğin, OTA veya Over The Air güncellemeleri, veri aktarımının kablosuz yapıldığı benzer bir şekilde çalışır
  • Güvenli Bootloader’lar – Veriler, karşılıklı kimlik doğrulama ile şifreli bir biçimde aktarılır

2.  Bootloader’lar Geliştirmeyi Daha Güvenli Hale Getirir

Ana kod hatalıysa ve mikrodenetleyicimizin donmasına neden oluyorsa, bootloader, bu durumu kolayca geri alabilmemiz için bir güvenlik önlemi olarak işlev görür; çünkü hatalı firmware’ı onun aracılığıyla kolayca değiştirebiliriz.

Eğer bootloader yoksa veya bootloader hatalıysa, hatalı bir programdan kolayca kurtulmanın bir yolu olmaz. Bu durumda, cihazımızın “bricked” hale geldiğini söyleriz. “Bricked” durumundan kurtulma prosedürü, cihaza göre değişir. Bazı durumlarda, bu imkansız bile olabilir.

3.  Bootloader’lar Kullanıcı Deneyimine Katkıda Bulunur

İlk iki avantajla karşılaştırıldığında daha az önemli bir avantaj olmasına rağmen, bootloader’lar kullanıcının cihazın AÇIK olduğunu ve yükleme yaptığını anlamasını sağlar; bu, belirli çevre birimlerinin erken başlatılması ve boot kararlarının belirtileri ile sağlanır.

UF2 Bootloader Formatı

Mikrodenetleyici bootloader’ları ile çalışırken karşılaşacağınız en yaygın format UF2’dir. UF2 veya USB Flashing Format, Microsoft tarafından geliştirilen bir bootloader standardıdır ve mikrodenetleyicileri farklı firmware’larla Mass Storage Class (taşınabilir sürücü) üzerinden programlamamıza olanak tanır.

Bootloader, Arduino IDE, MakeCode, ArduPy ve CircuitPython gibi birçok platformla uyumludur. Bootloader formatlarının ve UF2’nin tarihini daha fazla okumak için, konuyla ilgili resmi Microsoft Makecode sayfasını buradan ziyaret edebilirsiniz.

Bu makalenin ilerleyen kısımlarında, UF2’yi kullanarak mikrodenetleyicimize yeni bir firmware’ı basit bir sürükleyip bırakma ile nasıl kolayca yükleyebileceğimizi göstereceğim, bu yüzden bizi izlemeye devam edin!


Popüler ARM Mikrodenetleyicileri

Bu noktada, UF2 bootloader’ından faydalanabilecek mikrodenetleyici türlerini merak ediyor olabilirsiniz. Bunun pratik yanıtı ise… hepsi – UF2 bootloader’ı cihaza taşındığı sürece!

Bu bölümde, dikkatiniz için birkaç ARM mikrodenetleyici önermek istiyorum. Seeed ekibi, bu cihazların hepsi için UF2 bootloader’ını taşımıştır, böylece yeni firmware’ları kolayca yükleyebilirsiniz!

Seeeduino XIAO

Seeeduino XIAO, Seeeduino Ailesi’ndeki en küçük Arduino uyumlu karttır. Küçük boyutuna rağmen, Seeeduino XIAO güçlü SAMD21 mikroçipi ve çeşitli donanım arayüzleri ile donatılmıştır. Seeeduino XIAO, hem Arduino hem de MicroPython firmware’larına kolay erişim sağlayan UF2 bootloader’ını kullanır.

“`html

Ürün Özellikleri:

  • ARM Cortex-M0+ 32bit 48MHz mikrodenetleyici (SAMD21G18) ile 256KB Flash, 32KB SRAM
  • Arduino IDE & MicroPython ile uyumlu
  • Kolay Proje İşlemi: Breadboard dostu
  • Küçük Boyut: Giyilebilir cihazlar ve küçük projeler için parmak boyutunda (20×17.5mm).
  • Birden fazla geliştirme arayüzü: 11 dijital/analog pin, 10 PWM Pin, 1 DAC çıkışı, 1 SWD Bağlantı noktası arayüzü, 1 I2C arayüzü, 1 UART arayüzü, 1 SPI arayüzü.

Seeeduino XIAO hakkında daha fazla bilgi edinmek ister misiniz? Hemen ürün sayfasını ziyaret edin!

Wio Terminal

Wio Terminal, ATSAMD51 tabanlı tam bir Arduino geliştirme platformudur ve Realtek RTL8720DN ile güçlendirilmiş kablosuz bağlantıya sahiptir. Tümleşik bir mikrodenetleyici olarak, üzerinde 2.4” LCD Ekran, IMU, mikrofon, buzzer, microSD kart yuvası, ışık sensörü ve kızılötesi verici bulunmaktadır.

Wio Terminal ayrıca, farklı yazılımları yüklememizi sağlayan UF2 bootloader’ını kullanır. Sonuç olarak, kaynak açısından zengin Arduino IDE ve başlangıç dostu MicroPython gibi çeşitli platformlar üzerinden programlanabilir!

Ürün Özellikleri:

  • Güçlü MCU: ARM Cortex-M4F çekirdeği ile 120MHz’de çalışan Microchip ATSAMD51P19
  • Güvenilir Kablosuz Bağlantı: Realtek RTL8720DN ile donatılmış, çift bant 2.4GHz / 5GHz Wi-Fi (sadece Arduino tarafından desteklenmektedir)
  • Yüksek Entegre Tasarım: 2.4” LCD Ekran, IMU ve daha pratik ek bileşenler, yerleşik mıknatıslar ve montaj delikleri ile kompakt bir kasada yer almaktadır
  • Raspberry Pi 40-pin Uyumlu GPIO
  • IoT ile keşfetmek için 300’den fazla tak-çalıştır Grove modülü ile uyumlu
  • USB OTG Desteği
  • Arduino, CircuitPython, Micropython, ArduPy, AT Firmware, Visual Studio Code desteği
  • TELEC Sertifikalı

Bir Wio Terminal almakla ilgileniyorsanız, lütfen ürün sayfasını ziyaret edin!


Eğitim: UF2 Bootloader ile Firmware Yükleme

Bootloader’ların ne işe yaradığını öğrendiğimize göre, ARM mikrodenetleyicilerimize farklı yazılımları yüklemek için nasıl kullanabileceğimize dair basit bir eğitim zamanı! Bu örnekte, Seeeduino XIAO veya Wio Terminal’a, varsayılan olarak Arduino yazılımları olan ArduPy yazılımını yüklemek için UF2 bootloader’ını nasıl kullanacağımı göstereceğim. Hadi başlayalım!

Gerekli Malzemeler

Bu eğitimi takip etmek için aşağıdaki malzemelere ihtiyacınız olacak.

  1. Seeeduino XIAO veya Wio Terminal
  2. Windows, Mac veya Linux Bilgisayarı
  3. Wired USB Bağlantısı

Bu eğitim, UF2 bootloader’ına sahip diğer mikrodenetleyici kartları için de geçerlidir. Ancak, belirli cihazınız için UF2 formatında yazılımı edinmeniz gerekecektir. Aksi takdirde, cihazınız beklenildiği gibi çalışmayabilir!

Adım 1: Bootloader Moduna Geçin

Öncelikle, cihazınızı USB bağlantısı ile PC’nize bağlayın. Ardından, cihazı hızlı bir şekilde sıfırlayarak bootloader moduna geçin.

  • Wio Terminal ile bunu nasıl yapacağınız hakkında daha fazla bilgi için lütfen buraya bakın.
  • Seeeduino XIAO için lütfen buraya bakın.

Başarıyla yapıldıysa, bilgisayarınızda Arduino adında bir USB sürücüsü görünmelidir. Bu sürücü konumuna gidin.

Adım 2: ArduPy UF2 Yazılımını İndirin (Wio Terminal / Seeeduino XIAO)

Adım 3: ArduPy Yazılımını Yükleyin

İndirilen .UF2 dosyasını sürücüye sürükleyin ve bırakın. Kart otomatik olarak çıkarılacaktır. Şimdi, yeni ArduPy yazılımını yüklemek için kartı sıfırlayın!

Adım 4: Yeni Yazılımı Test Edin

Önceki adımlar doğru bir şekilde gerçekleştirildiyse, bilgisayarınızda ARDUPY adında bir USB sürücüsü görünmelidir. Sürücü dizininde main.py python dosyasını, Microsoft Visual Studio Code, Atom veya Sublime Text gibi tercih ettiğiniz bir metin düzenleyici ile açın.

Son olarak, aşağıdaki kodu main.py dosyasına kopyalayın, dosyayı kaydedin ve mikrodenetleyicinizi sıfırlayın.

Not: Eğer başka bir mikrodenetleyici kullanıyorsanız, LED pinini cihazınızdaki pin ile eşleşecek şekilde yeniden tanımlamanız gerekecektir.

from machine import Pin, Map
import time

LED = Pin(Map.LED_BUILTIN, Pin.OUT)

While True:
	LED.on()
	time.sleep(1)
	LED.off()
	time.sleep(1)

Bu eğitim burada sona eriyor! Mikrodenetleyicinizdeki LED şimdi her saniye yanıp sönmelidir. Burada takip ettiğimiz adımlar, MicroPython, MakeCode veya CircuitPython gibi diğer tür yazılımları yüklemek için de kullanılabilir. Gördüğünüz gibi, süreç UF2 bootloader’ı sayesinde oldukça basit hale geliyor!


Özel Bir Bootloader Nasıl Programlanır

Bootloader’ların nasıl özelleştirilebileceği ve çeşitli şekillerde faydalı olduğu hakkında konuştuğumuzdan, kendi özel bootloader’ınızı nasıl programlayacağınızı merak ediyor olabilirsiniz.

Seçenek 1: Mevcut Bir Bootloader Kullanın

Bir bootloader’ı sıfırdan yazmak, deneyimli bir düşük seviyeli programcı için bile basit bir iş değildir. Neyse ki, çoğu üretici, uygulamalarınızı oluşturmanıza odaklanabilmeniz için gerekli işlevlerle birlikte bir bootloader sağlar. Bugünkü eğitimde kullanılan UF2 bootloader’ını destekleyen işlemcilerin bir listesini görmek için lütfen UF2 GitHub Deposu‘nu ziyaret edin.

Seçenek 2: Mevcut Bir Bootloader’ı Taşıyın

Kesinlikle özel bir bootloader kullanmanız gerekiyorsa, en iyi seçeneğiniz mevcut bir bootloader’ı taşımaktır. 8 bit platformlar için tasarlanmış kompakt bootloader’lardan karmaşık linux sistemleri için olanlara kadar birçok açık kaynak bootloader mevcuttur. İstediğiniz amaca uygun bir bootloader bulursanız, kodu mikrodenetleyiciniz için çalışacak şekilde ayarlayabilirsiniz. Ancak, bu sürecin hala kolay olmayacağını unutmayın!

Seçenek 3: Sıfırdan Bir Bootloader Yazın

Sıfırdan özel bir bootloader yazma zorluğunu üstlenmek isteyen cesur kişiler için ilk adım, bir bootloader’ın nasıl çalıştığını anlamaktır. İşte başlamanıza yardımcı olacak bazı kaynaklar:

“`


Sonuç

Bugünkü makalemiz Arduino Bootloader Programlama ile sona eriyor! Bootloader’ların ne olduğunu, neden önemli olduklarını ve UF2 bootloader formatını kullanarak mikrodenetleyicilerimize farklı firmware’leri kolayca nasıl yükleyebileceğimizi daha iyi anladığınızı umuyorum.

Son olarak, ilginizi çekebilecek bazı ilgili kaynaklar:

Leave a Reply

Your email address will not be published. Required fields are marked *