Welcome, Ziyaretçi

Gönderen Konu: Mplab C(C18,C30,C32) PIC(18F,24F,32F) USB Bootloader Kullanımı  (Okunma sayısı 3016 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

smit

  • Administrator
  • Çavuş
  • ******
  • İleti: 92
  • Teşekkür: 32
    • Serbest Ucus Teknolojileri
ilk yapmanız gereken içinde USB modülü olan bir Pic seçmek ve Pic'in modeline göre Mplab ile C18,C30 veya C32 derleyicilerinden biri/birkaçı yüklü olması gerekir. Bunların yanında microchip'in her konuda derdinize deva olabilecek "Applications Library" uygulama kütüphaneleri yüklü olmalıdır bu kütüphane aşağıdaki linkten indirilebilir.

Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın

Şuan için(20.06.2011) en güncel kütüphane aşağıdadır.
Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın

Yüklediğinizde "C:\"'nin altında "Microchip Solutions" adında bir klasör oluşturur. USB bootlader dosyaları için aşağıdaki dizine ulaşın
C:\Microchip Solutions\USB Device - Bootloaders\HID - Bootloader\

Kullandığınız Pic'e en yakın klasörün içine girerek projeyi açın
Ben PIC24FJ256GB106 kullanacağım o yüzden "HID Bootloader - Firmware for PIC24FJ256GB110 Family Devices" Klasörü içindeki "HID Bootloader for PIC24FJ256GB110 Family Devices.mcw" projesini çalıştırıyorum. Hiç bir şey yapmadan içim rahat etsin diye projeyi derliyorum ileride kodları değiştirdiğimde acaba eskiden çalışıyor muydu demiyim ;)



Tamamdır dedikten sonra gelelim kodları kendi projemize uyarlamaya
Bootlader dosyamız Pic'in içine nasıl yerleşecek Reset Vectoru, İnterrupt vectorleri nasıl düzenlenecek bunları Linker Script ayarlar. Files panelinden "Linker Script" 'e sağ tıklayarak add diyoruz.


 
Proje klasörü içindeki "Boot loader linker files" klasörüne girerek buradan uygun linker scripti seçiyoruz. Ben "boot_hid_boot_p24FJ64GB106.gld" dosyasını seçtim. Daha sonra



Kullandığımız Pic'in modelini seçmek için "Configure/Select Device..." 'a tıklayarak pic modelini seçip OK diyoruz.


Sıra geldi Pic'in configurasyonlarını yapmaya bunun en kolay kısmı mplab'ın bize verdiği kolaylıklardan faydalanmaktır.



Bunun için "Configure/Configuration Bits..." adımını izleyerek ayarlar tablosuna ulaşıyoruz. Bu tablonun sol üst kısmındaki "Configuration bits set in code" check box seçili olursa derleyici bu tabloyu önemsemeden sizin kodlarda gerekli konfigurasyon ayarlarını yapmanızı bekler.
Dip not: Kullanmasakta bilelim
Aplication library'de ise bütün configurasyonlar kodlarda tanımlanmıştır main.c içinde CONFIG satırlarından bu ayarları değiştirebilirsiniz.

Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2)
        _CONFIG2( 0xF7FF & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_HS & FNOSC_PRIPLL & PLLDIV_DIV2 & IOL1WAY_ON)
        _CONFIG3( WPCFG_WPCFGDIS & WPDIS_WPDIS) //Disable erase/write protect of all memory regions.

Ama her zaman "Configuration bits" tablosu benim kolayıma gelmiştir o yüzden ayarları kodlarla yapmıyorum. Sol üst köşedeki check'i kaldırarak CONFIG satırlarını önemsemeden ayarlarımızı yapalım.


USB haberleşmesi için gereken registerlar aşağıdadır.

Internal USB 3.3V regulator disable bit ->
96Mhz PLL Disable -> Bu register enable konumundadır disable yapılamaz cristalden gelen frekansı katlayarak 96 Mhz'e çıkartır
USB 96Mhz PLL Prescaler Select Bits -> Kullandığınız kristale göre USB haberleşme frekansı bu registerdan ayarlanır. PIC, 96 Mhz'e ulaşmak için frekansı kaça katlaması gerektiğini bu register sayesinde hesaplar. USB haberleşmesinde atlanmaması gereken registerlardan biridir.

İşin kolay kısmı bitti gelelim kodları kedimize göre uyarlamaya
Pic ilk açılışta sizin tamınladığınız koşula bakar ve Programınızın mı yoksa Bootlader kodunun mu koşacağına karar verir.

işte bunuda ana döngünün başlangıcında ki kod ile yapar
Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
#if defined(__18CXX)
void main(void)
#else
int main(void)
#endif
{  
    mInitSwitch2();
    if((sw2==1) && ((RCON & 0x83) != 0)) //buton basılı ise sw2'den 0 bıraktığımızda 1 döner
    {
        __asm__("goto 0x1400");
    }

    InitializeSystem();

RCON reset control registerıdır bu registerda
EXTR: External Reset (MCLR) Pin bit
BOR: Brown-out Reset Flag bit
POR: Power-on Reset Flag bit
yukarıdaki resetlerden herhangi biri oluşmamış ve Sw2 butonuna basılmamışsa koşulun içine girer ve programımız başlar. Program koşulun içine girmezse bootlader programı başlar.

Devremize göre butonun pinini değiştirmek için  "HardwareProfile.h" kütüphanesinin içinde sizin picinize uygun hardware profil dosyasından gerekli düzeltmeyi yapabilirsiniz. Benim kullandığım model için "HardwareProfile - PIC24F Starter Kit.h" dosyası kullanılıyor. Bu dosya içinde led ve buton pinlerini projemize uygun şekilde düzenleyebiliriz. Eğer 2 adet uyarı lediniz yoksa tek led kullanacaksanız tanımları aşağıdaki gibi değiştirebilirsiniz.
Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
#define mGetLED_1()         ((TRISG & ~0x0180)?1:0)
#define mGetLED_2()         mGetLED_1()
#define mGetLED_3()         mGetLED_1()
#define mGetLED_4()         mGetLED_1()
   
hiç led kullanmayacaksanız ise "main.c" 'de "BlinkUSBStatus(void)" fonksiyonu içindeki tanımları değiştirebilir yada silebilirsiniz.

Gerekli düzenlemeleri yaptıktan sonra programı derliyoruz bir problem yoksa pice yüklüyoruz.

Şimdi USB kablosu takılı iken tanımladığımız butona basılı tutarak işlemciye enerji verdiğimizde bootlader kodu koşmaya başlayacaktır.
Driverı otomatik tanımazsa Driver dosyalarını "C:\Microchip Solutions\USB Tools" klasöründe bulabilirsiniz.

Bootladerımız hazır artık bu kodları unutabiliriz şimdi bootlader ile yükleyeceğimiz koda gelelim. Tek yapmamız gereken bootloaderını hazırladığımız işlemci ile yapılmış herhangi bir koda Aplication Linker Script dosyası eklemek, bu dosyaya da Bootlader klasörünün içindeki "\Application Files" klasöründen ulaşabiliriz. Proje dosyanıza bu kodu ekleyerek derlediğinizde oluşan hex dosyası yüklemeye hazırdır.

Yüklemek için Microchip USB HID Bootlader programı gerekli bu programa aşağıdaki dizinden ulaşabilirsiniz.
C:\Microchip Solutions\USB Device - Bootloaders\HID - Bootloader\HIDBootLoader.exe

Programı açın



USB kablosu takılıyken Bootlader kodunu çalıştırdığınızda programda "Device Attached" yazdığını gördüğünüzde tamamdır.



"Open Hex File" Butonu ile pice yükleyeceğiniz hex dosyasını gösterin ve "Program/Verify" Butonu ile işlemi tamamlayın.

Kolay gelsin herkese

Rev 1.(29.06.2011) Configuration Bit Tanımları Eklendi.
« Son Düzenleme: 08 Temmuz 2011, 08:58:23 Gönderen: smit »

Uykusuz

  • Administrator
  • Yarbay
  • ******
  • İleti: 2599
  • Teşekkür: 207
  • while(heart_rate>0){work();}
Ynt: Mplab C(C18,C30,C32) PIC(18F,24F,32F) USB Bootloader Kullanımı
« Yanıtla #1 : 20 Haziran 2011, 22:41:23 »
Süpersin smit, teşekkürler muhteşem bilgiler bunlar.
Projelerimiz için tıklayın Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
Sipariş ve Bilgi için satis@lugatek.com ile irtibata geçiniz.
Lütfen teknik sorularınızı forumda sorunuz özel mesaj göndermeyiniz

thepierces

  • Er
  • İleti: 1
  • Teşekkür: 0
Ynt: Mplab C(C18,C30,C32) PIC(18F,24F,32F) USB Bootloader Kullanımı
« Yanıtla #2 : 29 Haziran 2011, 15:06:40 »
Güzel bi anlatım olmuş.
Mplab C18 için konfigürasyon ve USB tanımlama konusunda bilgileriniz varsa bu konuda yardıma ihtiyacım var.