Bootloader Geliştirme

Önyükleyici nedir?

Mikrodenetleyiciler genellikle aracılığıyla programlanır programcısı harici programcının gerek kalmadan yeni firmware yüklemeden izin verdiğinden mikrodenetleyici ürün yazılımının bir parça yoksa. Buna önyükleyici denir.

Önyükleyici kullanmamak

Çipin tam program alanını (flaş) kullanmak veya önyükleyici gecikmesini önlemek istiyorsanız, çizimlerinizi harici bir programlayıcı kullanarak yazabilirsiniz .

Bootloader'ı Yazdırma

Önyükleyiciyi yazmak için bir AVR-ISP (sistem içi programcı), USBtinyISP satın almanız veya bir ParallelProgrammer oluşturmanız gerekir. Programcı ICSP pinlerine (2 x 3 pin başlığı) bağlanmalıdır - doğru şekilde taktığınızdan emin olun. Karta harici bir güç kaynağı veya USB bağlantı noktası tarafından güç verilmelidir.

Araçlar'da doğru öğeyi seçtiğinizden emin olun | Yönetim Kurulu menüsü. Ardından, Arduino ortamının Araçlar> Boot Bootloader menüsünden uygun komutu başlatın. Bootloader'ı yakmak 15 saniye veya daha fazla sürebilir, bu yüzden sabırlı olun.

Arduino Mini'yi Önyükleme

İşte bazı ilişkin talimatlar verilmiştir Mini'yi bootloading Gian Pablo Vilamil için, teşekkürler.

Hala çalışmıyor! (Windows XP'de paralel programlayıcı)

Windows XP, paralel bağlantı noktanızı çağırıyor ve önyükleyici yazma işlemini bozuyor olabilir. Bu kayıt defteri yamasına ihtiyacınız olacak:

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Parport\Parameters] "DisableWarmPoll"=dword:00000001

Ayrıntılar için bu forum başlığına bakın.

Önyükleyicinin sürümleri

Önyükleyicinin farklı sürümleri vardır - hem farklı donanımlarda çalışmak için hem de zaman içinde değiştiği için.

Mevcut bootloader'lar (yani Arduino 0009'da bulunanlar) Diecimila ve NG ( ATmega168 ile) için neredeyse aynıdır. Her ikisi de 19.200 baud'da çalıştırmak ve Atmega168'in üzerinde flaş belleğin 2 KB kaplar. Tek fark, önyükleyicinin yeni bir programın gelmesini beklemesi ve başladığında pim 13 LED'inin yanıp sönme sayısıdır. Diecimila'daki otomatik sıfırlama nedeniyle, önyükleyicisinin sadece çok kısa bir süre beklemesi gerekir (bir saniyeden az) - zaman kazanmak için pim 13 LED'ini sadece bir kez yanıp söner. NG önyükleyici yaklaşık 6-8 saniye bekler ve LED'i üç kez yanıp söner.

Arduino NG'ye gönderilen bootloader biraz farklı. Pim 6'daki dahili çekme direncini etkinleştirir ve RX pimindeki dahili çekme direncini etkinleştirmez. Geçersiz veriler alındığında da zaman aşımı olmaz, bu nedenle verileri sıfırlandıktan hemen sonra veri gönderirseniz, çiziminiz asla başlamaz.

Arduino BT önyükleyici, bluetooth modülünün başlangıç yapılandırmasını yapar.

ATmega8 önyükleyici yalnızca 1 KB flaş alır. Geçersiz veri aldığında zaman aşımına uğramaz, önyükleyici çalışırken 6-8 saniye boyunca panoya hiçbir veri gönderilmediğinden emin olmanız gerekir.

Bootloader'ın bazı eski versiyonları 9600 baud'da (19200 yerine) çalışır. Bu bootloader ile skeçleri panolara başarıyla yüklemek için, tercihler dosyanızdaki serial.download_rate öğesini 9600 olarak değiştirmeniz gerekir.

Üçüncü taraflar da bootloader üzerinde çalıştı. Bu sayfa diğer bazı bootloader geliştirmelerine bağlantı

O nasıl çalışır?

Arduino ortamındaki "Burn Bootloader" komutları açık kaynak kodlu bir araç kullanır. Dört adım vardır: çipin bootloader bölümünün kilidinin açılması, çip üzerindeki sigortaların ayarlanması, bootloader kodunun çipe yüklenmesi ve çipin bootloader bölümünün kilitlenmesi. Bunlar Arduino tercihler dosyasındaki bir dizi tercih tarafından kontrol edilir.

ATmega8 önyükleyici için bunlar:

  • bootloader.atmega8.programmer (varsayılan değer: stk500), bootloader tarafından kullanılan protokoldür.

  • bootloader.atmega8.unlock_bits (varsayılan değer: 0xFF), bootloader bölümünün kilidini açmak için ATmega8 kilit baytına yazılacak değerdir.

  • bootloader.atmega8.high_fuses (varsayılan değeri: 0xca) ATmega8 sigortaların yüksek bayt için yazma değerdir.

  • bootloader.atmega8.low_fuses (varsayılan değeri: 0xdf) ATmega8 sigorta düşük byte'taki yazma değerdir.

  • bootloader.atmega8.path (varsayılan değer: bootloader), önceden derlenmiş önyükleyiciyi içeren yoldur (Arduino uygulama dizinine göre).

  • bootloader.atmega8.file (varsayılan değer: ATmegaBOOT .hex), önceden derlenmiş bootloader kodunu içeren dosyanın adıdır (bootloader.path dosyasında).

  • bootloader.atmega8.lock_bits (varsayılan değer: 0x0F), bootloader bölümünü kilitlemek için ATmega8 kilit baytına yazılacak değerdir (böylece bir çizim yüklediğinizde yanlışlıkla üzerine yazılmaz).

Atmega168'in, bu (burada <YÖNETİM> ya "Diecimila" ya da "ng" olduğu) şunlardır:

  • bootloader.atmega168- <BOARD> .programmer (varsayılan değer: avrispmkii), bootloader tarafından kullanılan protokoldür.

  • bootloader.atmega168- <KURULU> .unlock_bits (varsayılan değer: 0x3F) bootloader bölümün kilidini açmak üzere Atmega 168 kilit byte için yazma değerdir.

  • bootloader.atmega168- <KURULU> .extended_fuses (varsayılan değeri: 0x00) Atmega 168 sigortaların yüksek bayt için yazma değerdir.

  • bootloader.atmega168- <KURULU> .high_fuses (varsayılan değer: 0xDD) Atmega 168 sigortaların yüksek bayt için yazma değerdir.

  • bootloader.atmega168- <KURULU> .low_fuses (varsayılan değer: 0xff) Atmega 168 sigortalara düşük byte'taki yazma değerdir.

  • bootloader.atmega168- <BOARD> .path (varsayılan değer: bootloader168), önceden derlenmiş önyükleyiciyi içeren yoldur (Arduino uygulama dizinine göre).

  • bootloader.atmega168- <BOARD> .file (varsayılan değer: ATmegaBOOT _168_ <BOARD> .hex), önceden derlenmiş bootloader kodunu içeren dosyanın adıdır (bootloader.path dosyasında).

  • bootloader.atmega168- <KURULU> .lock_bits (varsayılan değer: 0x0F) (eğer bir çizim yüklediğinizde o kazara üzerine yazılır almaz böylece) bootloader bölümü kilitlemek için Atmega 168 kilit byte için yazma değerdir.

Kaynak kodu

AVR önyükleyici kaynak kodu ve SAMD önyükleyici kaynak kodu kullanılabilir.