Haberler:

Değerli Üyelerimiz,
Forumumuzun altyapısını, sizlere daha iyi bir deneyim sunabilmek adına güncelledik. 2.0.14 sürümünden 2.1.4 sürümüne geçiş yaparak güvenlik, performans ve kullanım kolaylığı açısından önemli iyileştirmeler sağladık.

Main Menu

Mplab C(C18,C30,C32) PIC(18F,24F,32F) USB Bootloader Kullanımı

Başlatan smit, 20 Haziran 2011, 22:12:08

« önceki - sonraki »

smit

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.

Microchip Applications Library Archives

Şuan için(20.06.2011) en güncel kütüphane aşağıdadır.
Microchip Application Libraries v2010-10-19

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 ;)

[IMG]http://i39.photobucket.com/albums/e174/smitspics/siteler/build.jpg[/img]

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.

[IMG]http://i39.photobucket.com/albums/e174/smitspics/siteler/linkeradd.jpg[/img]

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

[IMG]http://i39.photobucket.com/albums/e174/smitspics/siteler/selectdevice.jpg[/img]

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.

[IMG]http://i39.photobucket.com/albums/e174/smitspics/siteler/configuration.jpg[/img]

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.

_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
#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.
#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

[IMG]http://i39.photobucket.com/albums/e174/smitspics/siteler/hidbootload.jpg[/img]

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

[IMG]http://i39.photobucket.com/albums/e174/smitspics/siteler/boot.jpg[/img]

"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.

Uykusuz

Süpersin smit, teşekkürler muhteşem bilgiler bunlar.
Projelerimiz için tıklayın http://www.lugatek.com/
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

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.