Sırada uygulama yazılımını nasıl yazacağımızı göstereceğiz. Uygulama yazılımını yazarken yapmamız gereken 2 temel durum var. Birincisi bootloader ile aynı yerde olmaması için başlangıç adresini hafızasının ilerisinden başlatacağız. Buurada biz 0x300 den başlatacağız. İkinci olarak konfigurasyon bitlerini bootloader ile aynı yapacağız. Bu projeyi her detayı ile anlatmayacağım. Yoksa bu yazı bitmez.

1.Yeni projemizde yine PIC16F1827 seçiyoruz. Proje adını yazıp kaydettikten sonra Microchip Code Configurator (MCC) açıp gerekli ayarları yapınız.

2. Project Propertiese gidiniz.

3. Manage Configurations'a tıklayın.

4. Duplucate tıklayarak toplamda 3 adet kopya oluşturunuz.

5. Bu konfigurasyonlar şu şekilde olacaktır.

Stand Alone: Herhangi bir offset ayarı yok. Tek başına bootloader olmadan çalışan program için gerekli ayardır.

Offset: Offset ayarı yapılmış sadece uygulamanın yazılımının olduğu ayardır. Firmware update yapılacağı zaman bu hex dosyası kullanılacaktır.

Combined: Uygulama yazılımı ve bootloader yazılımının beraber olduğu yazılımdır. Ürün üretildiğinde bootloader ve uygulamayı tek seferde PIC e yüklemek için bu hex dosyası kullanılacaktır.

6. Aşağıda gördüğünüz gibi uygulama yazılımının başlangıç adresini yazınız.

7. Combinedda bootloader ve uygulama tek bir hex içerisine gömülecektir. Yine offset ayarı yapılır.

8. Bootloader yazılımı uygulama yazılımı içine gömülür.

9. Bootloaderı seçin.

10. Set Configuration ile bu üç konfigurasyon arasında geçiş yapabilirsiniz.

 

Standalone PIC'e yüklersek bootloader özelliği olmadan cihazımızı kullanırız.

Combined ticari uygulamalarda mantıklı olandır. Tek seferde bootloader ve uygulama yazılımı beraber yüklenmektedir. Yalnız eğer bootloader moduna girmek için buton yoksa sizin özel bir kod yazarak 0x300 adresini sildirip PIC resetletmeniz lazım. Yoksa bootloader moduna girmez.

PIC'e sadece bootloader yüklediyseniz, offset modunda derlediğiniz HEX dosyasını seriporttan PIC'e gönderebilirsiniz.

Örnek uygulama yazılımı olarak blink uygulaması yaptım. Ayrıca seriporttan gelen veriyi aynen geri gönderir.

#include "mcc_generated_files/mcc.h"

/*
                         Main application
 */


volatile uint8_t rxData;

void main(void)
{
    // initialize the device
    SYSTEM_Initialize();

    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    
    printf("Selam V0.1\r\n");
    __delay_ms(100);
    
    while (1)
    {
        // Add your application code
        pinLed_Toggle();
        __delay_ms(500);
        
        while (EUSART_is_rx_ready())
        {
            rxData = EUSART_Read();
            EUSART_Write(rxData);
        }
    }
}
/**
 End of File
*/

Bilgisayarda kullanmak için Microchip firmasının yazdığı bir bootloader host uygulaması var. Açıkcası ben beğenmedim. Java Runtime tüm sürümlerinde çalışmıyor. Bilgisayara Java Runtime v1.8.0_251 dan daha sonraki bir versiyon kurarsanız port seçimi esnasında uygulama aniden kapanıyor. O yüzden bu versiyonu bulup kurmanız gerekmektedir.

Unified Bootloader Host Application uygulamasını aşağıdaki linkten indiriniz.

https://www.microchip.com/en-us/tools-resources/develop/libraries/microchip-bootloaders/8-bit

1. İlk olarak PIC' sadece bootloader veya combined olarak derlediğimiz yazılımı yükleyelim. Boot butonuna basılı tutup PIC'i resetlediğinizde bootloader moduna girdiğini belirtenl led sürekli yanacaktır. Unified Bootloader Host programını çalıştırıp PIC'i seçiniz. Bootloader işleminin başarılı olması için Offset ve Program Memory adresleri doğru girilmeli yoksa bootloader işlemi gerçekleşmiyor. Aşağıda PIC16F1827 için kullandığım değerler var. EEPROM ve diğer adresler doğru olmayabilir test etmedim.

2. Tools->Console açınız

3. Sonrada Settings->Serial den seriport ayarlarını yapınız.

4. Program Device bastığınızda eğer başarılı olursanız aşağıdak gibi çıktı alırsınız.

Yazdığım örnek dosyaları aşağıdaki linkten indirebilirsiniz.

https://github.com/gencmucitler/bootloader

 

Kaynaklar:

https://www.microchip.com/en-us/tools-resources/develop/libraries/microchip-bootloaders/8-bit

https://ww1.microchip.com/downloads/en/DeviceDoc/40001779B.pdf

https://onlinedocs.microchip.com/oxy/GUID-C6916C91-B44E-4984-8A69-9C06B0E156FD-en-US-1/GUID-41C493BE-EE53-476B-B0B0-D106F168BCAD.html

http://www.picprojects.net/serialbootloader/

https://github.com/spanceac/PIC18-bootloader