Arduino Bootloader Yükleme

Arduino bootloader konusu, pek çok kullanıcın kafasını karıştırsada aslında oldukça basit bir anlamı ve karşılığı vardır. Bootloader kısmı bozulduğunu düşündüğünüz ya da hiç bootlaoder’ı olmayan bir Arduino geliştirme kartına ya da atmel mikroişlemcisini bootloader yüklemeden(burn) önce bootloader’ın ne olduğuna göz atalım. Ayrıca daha önce yayınladığımız Arduino ile Atmel Mikrodenetleyicisi Programlama yazısına göz atmanızı öneriyoruz, bu yazıda sıfırdan bir Atmel mikrodenetleyicisi programladık ve bootloader yükledik.

Bootloader Nedir?

Mikrodenetleyicinizde, harici bir programlayıcıya ihtiyaç duymadan yeni bellenimin yüklenmesine izin veren bir bellenim parçası yoksa, mikrodenetleyiciler genellikle bir programlayıcı aracılığıyla programlanır. Buna önyükleyici yani bootloader denir.

Bootloader Kullanmamak

Çipin tüm program alanını (flash) kullanmak veya önyükleyici gecikmesinden kaçınmak istiyorsanız, kodlarınızı harici bir programlayıcı kullanarak yükleyebilirsiniz.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme

Harici bir programlayıcınız varsa (örneğin bir AVR-ISP, STK500 veya paralel programlayıcı), önyükleyiciyi kullanmadan Arduino kartına program yazabilirsiniz. Bu, Arduino kartındaki çipin tam program alanını (flaş) kullanmanızı sağlar. Yani bir ATmega168 ile 14 yerine 16 KB alacaksınız (ATmega8’de 7 yerine 8 KB alacaksınız). Ayrıca, kartınıza güç verdiğinizde veya sıfırladığınızda önyükleyici gecikmesini de önler. Ancak, Programlayıcı Kullanarak Yükleme prosedürünün fuse’ları yakmadığını aklınızda bulundurmalısınız, bu nedenle, yeni üretilmiş bir mikrodenetleyiciniz varsa, düzgün çalışan bir cihaza sahip olmak için önce önyükleyiciyi yazdırmanız gerekir.

Bu, şu şekilde kolayca yapılabilir:

Araçlar-> Kartlar-> Kartınız
Araçlar->Programcı->Programlayıcınız
Taslak->Programlayıcı Kullanarak Yükle

Arduino’nuzu programlamanın varsayılan yoluna geri dönmek için önyükleyiciyi yeniden yazmanız gerekir. Bunu yapmak için:

Araçlar-> Kartlar-> Kartınız
Araçlar->Programcı->Programlayıcınız
Araçlar-> Önyükleyiciyi Yazdır


Bootloader Yükleme İşlemi

Bootloader’ı yüklemek için bir AVR-ISP (sistem içi programlayıcı), USBtinyISP satın almanız veya bir ParallelProgrammer oluşturmanız gerekir. Programlayıcı ICSP pinlerine (2’ye 3 pin başlığı) bağlı olmalıdır – doğru şekilde taktığınızdan emin olun. Kart, harici bir güç kaynağından veya USB bağlantı noktasından güç almalıdır. Bootloader yükleme işlemini yapmak için yukarıda bahsettiğimiz gibi bir programlayıcıya ya da sorunsuz çalışan bir Arduino geliştirme kartına ihtiyacınız var. Eğer harici bir programlayıcı modül/dönüştürücü kullanacaksanız, bu yazımızdaki adımları izleyebilirsiniz sadece doğru bağlantıları ve Arduino IDE’den doğru kart-port bilgilerini seçmeniz yeterli olacaktır.

Arduino’yu ISP(programlayıcı) Olarak Kullanarak

Bu başlığımızda bootloader’ı olmayan mikrodenetleyiciye ya da Arduino geliştirme kartına başka bir Arduio geliştirme kartı kullanarak yükleyeceğiz.

Bir ATmega mikro denetleyicisini “Arduino” yapmak için önyükleyici kodunu yükleme ve sigortaları(fuse) düzgün şekilde yakma işleminin tamamı Arduino Yazılımı (IDE) tarafından yönetilir: belirli bir menü öğesi sağlar ve çeşitli programlama cihazlarını kullanmanıza izin verir. Programcılar arasında “ISP as Arduino”, ATmega, 32U4 veya ATtiny ile başka bir Arduino kartında bir bootloader yüklemek için en ucuz ve en pratik çözümdür.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme

Programlama işlemi VCC, GND ve dört veri pinini kullanır. Üç pin MISO, MOSI ve SCK’yi programlayıcı ana kart ile hedef programlanacak kart arasına bağlar, programlayıcı karttan dördüncü pin hedefin sıfırlama pinine gider.

Aşağıdaki tablo, farklı Arduino kartlarında MOSI, MISO ve SCK’nin hangi pinlere ayrıldığını gösterir:

Arduino Geliştirme KartıMOSIMISOSCKSeviye
UNO11 ya da ICSP-412 ya da ICSP-113 ya da ICSP-35V
Mega1280 ya da Mega256051 ya da ICSP-450 ya da ICSP-152 ya da ICSP-35V
Nano11 ya da ICSP-412 ya da ICSP-113 ya da ICSP-35V
Pro Mini11 ya da ICSP-412 ya da ICSP-113 ya da ICSP-33.3V ya da 5V
ZeroICSP-4ICSP-1ICSP-33.3V

SPI arayüzü – ve dolayısıyla bu pinler – AVR mikro denetleyicilerini programlamak için kullanılan arayüzdür. MISO, MOSI ve SCK’nin ICSP başlığında tutarlı bir fiziksel konumda mevcut olduğuna dikkat edin; bu konektör, her kartta çalışan kalkanların tasarımına izin veren SPI arayüzüne dayanan kalkanlar tarafından da kullanılır.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme

Aşağıdaki resimde Arduino UNO üzerinde dişi şeritler üzerindeki bağlantıları kırmızı ile vurguladık; sarı renkte ATmega328P’ye bağlanan ICSP konektörü. Rev.3 kartının USB bağlantısını yöneten bir ATMega 16U2 yongasına sahip olduğunu ve bu yonganın ATMega 16U2’nin hemen üzerinde bulunan ICSP2 etiketli özel bir konektör aracılığıyla yeniden programlanabileceğini unutmayın.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme

Bazı Arduino kartlarında (yukarıdaki tabloya bakın), MOSI, MISO ve SCK pinleri sırasıyla dijital pin 11, 12 ve 13 ile aynı pinlerdir. Bu nedenle birçok öğretici, hedefi bu pimlere bağlamanızı söyler. Bu kablolamayı daha pratik buluyorsanız, kodun içinde USE_OLD_STYLE_WIRING tanımlayın. Bu, bir UNO kullanılmadığında bile çalışacaktır.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme
İki Arduino UNO

Yukarıdaki resimde, “eski tarz” bağlantılarla bootloader yakma için iki UNO kartını bağlıyoruz: üst kart Hedef, alt kart Programcı. Programlayıcının D10’undan hedefin RESET’ine bağlıdır. Sarı bağlantıya dikkat edin. MKR kart ailesinde, sıfırlama için D10’u kullanamazsınız; D6’yı öneriyoruz ve ArduinoISP taslağının 73 numaralı satırını – #define RESET 10 – 10 yerine “6” koyarak değiştirmeyi unutmamalısınız.

Not: Eğer kartınızın(MKR) ne olduğuna emin değilseniz hiç bir değişiklik yapmadan adımları takip edin.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme
Arduino Uno ve Nano

Bu Arduino NANO, programlayıcı UNO kartının D10-D13’ünden gelen kablolarla ICSP konektörü aracılığıyla programlanmıştır.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme
İki Arduino Nano

Bu bağlantıda iki Arduino Nano kullanılmıştır.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme
Mega ve Uno

Yukarıdaki Arduino MEGA, D51-D11, D50-D12, D52-D13, GND-GND, 5V-5V ve D10’u RESET’e bağlayan bir Arduino UNO’yu programlıyor. Bu tip bir kart, RESET’e bağlı pozitif (uzun bacak) ile RESET ve GND’ye bağlı 10µF elektrolitik kondansatör gerektirir. Kondansatör, programlayıcı panosu ISP taslağı ile yüklendikten sonra yerleştirilmelidir.

Programlama kartının RESET ve GND’ye bağlı olan 10µF elektrolitik kondansatör, Mega, UNO, Mini, Nano gibi sadece mikrodenetleyici ile bilgisayarın USB’si arasında bir arayüze sahip olan kartlar için gereklidir. Leonardo, Esplora ve Micro gibi kartlar, doğrudan mikrodenetleyici tarafından yönetilen USB ile kapasitöre ihtiyaç duymazlar.

Voltajlar Hakkında

Arduino kart ailesi, 5V ve 3.3V cihazları içerir. Programlayıcı olarak 5V toleranslı olmayan (Due, Zero, …) bir Arduino kullanırken, programcının pinlerinden hiçbirini 5V’a maruz bırakmadığınızdan emin olun. Bunu başarmanın basit bir yolu, tüm sisteme (programcı ve hedef) 3V3’te güç vermektir.

Not: Bağlantıları ve kabloları kurarken lütfen USB’ye bağlamayın veya kartlara güç beslemesi yapmayın. Ayrıca, hedef karta kablolama işlemine geçmeden önce ISP programcısı olarak kullanılan Arduino’yu programlamanızı öneririz.

ArduinoISP’nin Yüklenmesi

Programcı olarak kullanacağınız Arduino’nun belirli bir koda ihtiyacı vardır. Dosya > Örnekler > 11. ArduinoISP > ArduinoISP altında bulabilirsiniz.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme

Kodun satırlarından geçerek, hedef panoya göre ayarlanması gereken bir dizi parametre bulursunuz. Ancak bu parametreler, Arduino Yazılımı (IDE) tarafından desteklenen her bir önyükleyici/kart için mevcut olan belirli bir dosya tarafından ayarlanır. Diğer parametreler yorumlarla açık bir şekilde açıklanmıştır ve yalnızca ne yaptığınızı biliyorsanız değiştirilmelidir. Çizim ayrıca, programlama süreci hakkında size görsel bir geri bildirim veren üç LED’i de destekler.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme

ArduinoISP kodunu Arduino kartınıza yüklemek için – programcı olarak kullanacağınız – kart tipini ve bağlantı noktasını seçmeniz gerekir, ardından her zamanki gibi yükleyebilirsiniz.

Bootloader(Önyükleyici)’ın Yüklenmesi

Tüm kablo bağlantıları ayarlandıysa, bootloaderı yüklemek istediğiniz kart tipine geçmeniz gerekir. Bu adım, uygun önyükleyici kodunu ve sigorta konfigürasyonlarını seçmek için zorunludur. Programlama prosedürü, herhangi bir yazma işlemi yapılmadan önce mikro denetleyicinin imzasını kontrol eder, ancak birçok kart aynı mikro denetleyiciyi paylaşır ve her kartın kendi önyükleyicisi vardır. Programlayıcı, ArduinoISP olarak kalmalı.

Araçlar altında “Önyükleyici yazdır/Burn Bootloader” seçeneğini seçin ve Arduino Yazılım (IDE) arayüzünün alt kısmındaki onay mesajını bekleyin. LED’leri bağladıysanız işlemi görsel olarak takip edebilirsiniz.

Arduino Bootloader Yükleme bootloader,arduino bootloader,arduino bootloader yükleme,arduino nano bootloader yükleme,arduino uno bootloader yükleme
Seri Programlama Modu

Programlama süreci, üç SPI hattını (MISO, MOSI ve SCK) standart SPI programlama protokolüne göre yönetir, aynısı SD hafıza kartlarını okumak ve yazmak için kullanılır. Hafıza kartlarının tek farkı CS (Chip Select) pininin olmamasıdır. AVR mikro denetleyicilerimizde, herhangi bir çizim veya önyükleyicinin yürütülmesini durduran ve mikro denetleyiciyi SPI arayüzünden gelen komutları dinlediği belirli bir duruma getiren RESET pinini kullanıyoruz. Protokolün gerektirdiği ilk komut, Seri Programlama Modunda mikrodenetleyiciye giren komuttur.

Bu özel mod aktif olduğunda, tüm mikrodenetleyici programlanabilir alanları yazabilir ve okuyabiliriz: Flash, EEPROM ve Sigortalar. Flash belleğin sonunda, bu makalenin başındaki resimde vurgulandığı gibi, önyükleyici kod alanımız var. “Burn Bootloader” prosedürü, kartın tasarımına göre mikrodenetleyicinin sigortalarını da uygun şekilde ayarlar. Listeden tam anakart modelinizi seçerek önyükleyiciyi yakmanızın nedenlerinden biri de budur.

Programlamanın Teknik Yönleri

Mikrodenetleyiciyi programlamak için kullanılan açık kaynaklı yazılım aracı avrdude’dir. İşlem dört adımdan oluşur: çipin bootloader bölümünün kilidinin açılması, çip üzerindeki sigortaların ayarlanması, bootloader kodunun çipe yüklenmesi, çipin bootloader bölümünün geri kilitlenmesi.

Sigortalar, kartla ilişkili her bir parametre dosyasında saklanan tercihlere göre yönetilir ve olası hatalar önlenir.

Genellikle üç bayttan oluşan (düşük, yüksek ve genişletilmiş) sigortaların yönetimi, önyükleyici programlamasının en hassas yönüdür: yanlış bir sigorta ayarı, mikrodenetleyiciyi ve kartı bozabilir. Sigortalar, mikrodenetleyicinin işlevlerinin birçok yönünü tanımlar: farklı saat kaynaklarının seçilmesi ve çipin çalışma hızının değiştirilmesi, çipin çalışması için gereken minimum voltajın ayarlanması (brownout), bir önyükleyicinin kullanılıp kullanılmayacağının ayarlanması, ne kadar bellek ayrılacağının ayarlanması ön yükleyiciye (256 ila 2048 kelime – 512 ila 4096 bayt), sıfırlama veya seri programlamayı devre dışı bırakarak ve yeni bir çizim yüklerken EEPROM verilerinin silinmesini durdurur.

Sigortaların ayrıntılı açıklaması, her bir mikro denetleyicinin veri sayfasında bulunabilir.

Her ayarın kendi kullanımı vardır ve geliştiricinin çipi kilitlemesine ve ISP programlamasından korumasına izin vermek mantıklıdır, ancak yanlışlıkla bir sigortayı yanlış şekilde ayarlayarak sizi ISP arayüzü aracılığıyla programlama sürecinin dışında tutabilir.

Özetle Bootloader Yüklemek

  • ArduinoISP kodunu (Örneklerde) Arduino kartınıza açın.
  • Arduino 1.0 için not: ArduinoISP kodunda küçük bir değişiklik yapmanız gerekir. Heartbeat() işlevinde “delay(40);” yazan satırı bulun. ve “delay(20);” olarak değiştirin.
  • Araçlar > Kart ve Seri Bağlantı Noktası menülerinde, programlayıcı olarak kullandığınız karta (programlanan karta değil) karşılık gelen öğeleri seçin.
  • ArduinoISP kodunu yükleyin.
  • Arduino kartlarınızı kablolayın..
  • Araçlar > Pano menüsünde, önyükleyiciyi yüklemek istediğiniz karta (programlayıcı olarak kullandığınız panoya değil) karşılık gelen öğeyi seçin. Ayrıntılar için ortam sayfasındaki pano açıklamalarına bakın.
  • Araçlar>Programlayıcı menüsünde ISP olarak Arduino’yu seçin.
  • Önyükleyici yazdır butonunu kullanın.