Bir önyükleyici, programlanacak mikrodenetleyicide çalışan bir programdır. Bazı iletişim araçları aracılığıyla harici olarak yeni program bilgisi alır ve bu bilgiyi işlemcinin program hafızasına yazar.
Bu, programı mikro-denetleyiciye sokmanın normal yolunun aksinedir; PIC’lerde bu, SPI benzeri bir arayüzdür. Doğru hatırlıyorsam, AVR'ler Jtag kullanıyor veya en azından bir kısmı kullanıyor. Her iki durumda da, bilgileri program belleğine tam olarak yazmak için programlama pimlerini sıkıştıran bazı harici donanımlar gerekir. Program hafızasının içeriğini tanımlayan HEX dosyası genel amaçlı bir bilgisayara dayanmaktadır, bu nedenle bu donanım bir tarafındaki bilgisayara ve diğer taraftaki mikro özel programlama pimlerine bağlanmaktadır. Şirketim PIC programcılarını başka şeylerin yanı sıra bir çizgi çiziyor, bu yüzden PIC'lerde bu süreci çok iyi biliyorum.
Özel programlama yoluyla harici programlamanın önemli noktası, mevcut program belleği içeriğinden bağımsız olarak çalışmasıdır. Mikrodenetleyiciler silinmiş program belleği ile veya bilinmeyen bir durumda başlar, bu nedenle ilk programlama bir mikro programa girmenin tek yolu dış programlamadır.
Ürününüze yüklemek istediğiniz programdan eminseniz ve hacimleriniz yeterince yüksekse, üreticiye veya bir distribütör programına sizin için uygun fişler alabilirsiniz. Çip, diğer çipler gibi tahtaya lehimlenir ve ünite çalışmaya hazırdır. Bu, örneğin bir oyuncak gibi bir şey için uygun olabilir. Üretici yazılımı bir kez yapıldığında, hemen hemen yapılır ve büyük hacimlerde üretilir.
Birimleriniz daha düşükse veya daha da önemlisi, devam eden ürün yazılımı gelişimi ve hata düzeltmeleri beklenirse, önceden programlanmış fiş satın almak istemezsiniz. Bu durumda, tahtaya boş talaşlar monte edilir ve ürün yazılımının çip üzerine üretim işleminin bir parçası olarak yüklenmesi gerekir. Bu durumda, donanım programlama hatları bir şekilde kullanıma sunulmalıdır. Bu, açık bir konektör veya bir üretim testi fikstürü oluşturmak için istekli iseniz pogo pin pedleri aracılığıyla olabilir. Çoğu zaman bu tür ürünler yine de test edilmeli ve belki de kalibre edilmelidir, bu nedenle programı işlemciye yazmanın ek maliyeti genellikle asgari düzeydedir. Bazen küçük işlemciler kullanıldığında, ilk önce işlemciye özel bir üretim test yazılımı yüklenir. Bu, ünitenin test edilmesini ve kalibrasyonunu kolaylaştırmak için kullanılır, daha sonra, donanımın iyi olduğu bilindikten sonra gerçek ürün yazılımı yüklenir. Bu durumda, programlama işleminin çalışması için programlama hatlarına yeterince erişime izin vermek, ancak aynı zamanda devreyi çok fazla rahatsız etmemek için bazı devre tasarımı hususları vardır. Bununla ilgili daha fazla ayrıntı için benimdevre içi programlama yazması.
Şimdiye kadar çok iyi ve hiçbir önyükleyici gerekli. Ancak, alanın yükseltilmesini istediğiniz veya son müşterinin yükseltmesine izin vermesini istediğiniz nispeten karmaşık bellenime sahip bir ürünü düşünün. Son müşteriden bir programcı gadget'ı olmasını ya da bir tane sağlamış olsanız bile nasıl doğru kullanacağını bilmesini bekleyemezsiniz. Aslında müşterilerimden biri bunu yapıyor. Özel alan özelleştirme seçeneklerini satın alırsanız, ürün programcılarımdan birini ürünle birlikte alırsınız.
Ancak, çoğu durumda sadece müşterinin bir bilgisayarda PC üzerinde bir program çalıştırmasını ve yazılımın sihirli bir şekilde güncellenmesini istiyorsunuz. Burası, özellikle ürününüzde USB, RS-232 veya ethernet gibi bir PC ile kolayca arayüzeyebilen bir iletişim portuna sahipse bir önyükleyicinin girdiği yerdir. Müşteri zaten mikroda bulunan önyükleyici ile konuşan bir bilgisayar programı çalıştırıyor. Bu, yeni ikili dosyayı program belleğine yazan ve ardından yeni kodun çalışmasına neden olan bootloader'a gönderir.
Kulağa basit geliyor, ama değil, en azından bu sürecin sağlam olmasını istiyorsan. Bir iletişim hatası meydana gelirse ve yeni üretici yazılımı bootloader'a ulaştığında bozulmuşsa ne olur? Önyükleme işlemi sırasında güç kesilirse ne olur? Önyükleyicide bir böcek varsa ve kendi kendine barbaz olursa ne olur?
Basit bir senaryo, bootloader'ın daima sıfırlamadan çalışmasıdır. Ev sahibi ile iletişim kurmaya çalışır. Ana bilgisayar yanıt verirse, ya önyükleyiciye yeni hiçbir şeyi olmadığını söyler ya da yeni bir kod gönderir. Yeni kod geldiğinde, eski kodun üzerine yazılır. Her zaman yüklenen kod içeren bir sağlama toplamı eklersiniz, böylece bootloader yeni uygulamanın sağlam olup olmadığını söyleyebilir. Değilse, geçerli bir sağlama toplamı olan bir şey belleğe yükleninceye kadar sürekli olarak bir yükleme isteğinde bulunur. Bu, her zaman bağlı olan ve muhtemelen önyükleyici isteklerine yanıt veren ana bilgisayarda bir arka plan görevinin çalıştığı bir cihaz için kabul edilebilir. Bu şema, büyük ölçüde özerk olan ve yalnızca zaman zaman bir ana bilgisayara bağlanan birimler için iyi değildir.
Genellikle yukarıda açıklandığı gibi basit bootloader, güvenli bir arıza olmadığından kabul edilemez. Yeni bir uygulama görüntüsü bozulmamışsa, cihazın eski görüntüyü çalıştırmaya devam etmesini, başarılı bir yükleme gerçekleştirilinceye kadar ölmemesini istersiniz. Bu nedenle, genellikle bellenimde iki özel modül vardır, bir yükleyici ve bir önyükleyici. Yükleyici, ana uygulamanın bir parçasıdır. Ev sahibi ile düzenli iletişimin bir parçası olarak, yeni bir uygulama görüntüsü yüklenebilir. Bu, harici bir EEPROM gibi ana uygulama görüntüsünden ayrı bellek gerektirir veya daha büyük bir işlemci kullanır, böylece program belleği alanının yarısı yeni uygulama görüntüsünü depolamak için tahsis edilebilir. Yükleyici, alınan yeni uygulama resmini bir yere yazar, ancak yayınlamaz. İşlemci sıfırlandığında, bir yükleme işleminden sonra ana bilgisayardan komutta gerçekleşebilecek olan, bootloader çalışıyor. Bu şimdi harici iletişim kabiliyetine ihtiyaç duymayan tamamen bağımsız bir programdır. Geçerli ve yüklenen uygulama sürümlerini karşılaştırır, sağlama toplamlarını kontrol eder ve sürümler farklıysa ve yeni görüntü sağlama toplamı kontrolleri ise yeni görüntüyü uygulama alanına kopyalar. Yeni görüntü bozuksa, eski uygulamayı önceden olduğu gibi çalıştırır.
Çok fazla bootloader yaptım ve hiçbiri aynı değil. Mikrodenetleyici firmalarının bazılarının inanmanı istediklerine rağmen, genel amaçlı bir önyükleyici yok. Her cihazın, ana bilgisayarla ilgili olarak kendi gereksinimleri ve özel koşulları vardır. İşte kullandığım bazı bootloader ve bazen uploader yapılandırmaları:
- Temel önyükleyici Bu cihazın seri bir hattı vardı ve bir ana bilgisayara bağlanır ve gerektiği gibi açılır. Önyükleyici sıfırlandı ve ana bilgisayara birkaç yükleme isteği yanıtı gönderdi. Yükleme programı çalışıyorsa, yanıtlar ve yeni bir uygulama görüntüsü gönderirdi. 500 ms içinde cevap vermezse, bootloader vazgeçip mevcut uygulamayı çalıştırır. Bu nedenle, yazılımı güncellemek için önce ana bilgisayarda güncelleyici uygulamasını çalıştırmanız, ardından cihaza bağlanmanız ve açmanız gerekir.
- Program hafıza yükleyicisi. Burada iki kat fazla program hafızasına sahip olan bir sonraki boy PIC'yi kullandık. Program hafızası kabaca% 49 ana uygulamaya,% 49 yeni uygulama resmine ve% 2 önyükleyiciye bölündü. Önyükleyici sıfırlamadan çalıştırılır ve doğru koşullar altında yeni uygulama görüntüsünü geçerli uygulama görüntüsüne kopyalar.
- Harici EEPROM görüntüsü. Yeni uygulama görüntüsünü saklamak için harici bir EEPROM kullanılmış olması dışında # 2 gibi. Bu durumda daha fazla belleğe sahip işlemci fiziksel olarak daha büyük ve ihtiyaç duyduğumuz çevre birimlerinin karışımına sahip olmayan farklı bir alt ailede olurdu.
- TCP önyükleyici. Bu hepsinden daha karmaşıktı. Büyük bir PIC 18F kullanılmıştır. Belleğin son 1 / 4'ü, bir TCP ağ yığınının tam kopyası olan bootloader'ı düzenledi. Önyükleyici sıfırlandı ve önceden yapılandırılmış bir IP adresindeki bilinen bir bağlantı noktasındaki özel bir yükleme sunucusuna bağlanmaya çalıştı. Bu, her zaman tüm sistem için ayrı bir sunucu makinesi bulunan büyük tesisler içindi. Her küçük aygıta, sıfırlama işleminden sonra yükleme sunucusu kontrol edilir ve uygun şekilde yeni bir uygulama kopyası verilir. Önyükleyici mevcut uygulamanın üzerine yeni kopyayı yazar, ancak sağlama toplamı kontrol edildiğinde çalıştırılır. Olmazsa, yükleme sunucusuna geri döner ve tekrar deneyin.
Önyükleyicinin kendisi tam bir TCP ağ yığını içeren karmaşık bir kod parçası olduğundan, aynı zamanda alan yükseltilebilir olması gerekiyordu. Bunu yaptığımız gibi, yükleme sunucusunun, tek amacı çalıştırıldıktan sonra önyükleyicinin üzerine yazmak olan özel bir uygulamayı beslemesini sağlamaktı, ardından makineyi sıfırlayın; böylece yeni önyükleyicinin çalışmasını sağlayacak şekilde yük sunucusunun göndermesini sağlayacaktı. En son ana uygulama görüntüsü. Teknik olarak birkaç milisaniye boyunca bir elektrik kesintisi, önyükleyici üzerine yeni bir görüntü kopyalamak için özel bir uygulama aldı ve onarılamaz bir hata olurdu. Uygulamada bu asla olmadı. Olası bir ihtimal olma ihtimali yoktu, çünkü bu cihazlar zaten sistemde bakım yapacak insanların bulunduğu büyük tesislerin parçalarıydı, bu da zaman zaman gömülü cihazları başka nedenlerle değiştirmek anlamına geliyordu.
Umarım, her biri kendine özgü risk, hız, maliyet, kullanım kolaylığı, duruş süresi vb. Gibi farklı olasılıkların olduğunu görebilirsiniz.