2013年11月4日月曜日

PIC18F14K50用にブートローダを準備する

PIC18F4550でブートローダが動いたので、次に本来のターゲットであるPIC18F14K50で動かしてみます。

1.ブートローダの準備

PIC18F4550のプロジェクトを開きます(自分の場合にはディレクトリごとコピーしてから開いてリネームしています)。次にProjectのPropertyを開き、PIC18F14K50の設定をActiveにして、PICkit3から電源供給するように設定変更します。
ブートローダ用のSWとLEDは io_cfg.h の131行目付近からに記述がありますので、
    /** LED ************************************************************/
//    #define mInitAllLEDs()      LATC &= 0xFE; TRISC &= 0xFE;
//    #define mLED_1              LATCbits.LATC0
//    #define mLED_1_On()         mLED_1 = 1;
//    #define mLED_1_Off()        mLED_1 = 0;
//    #define mLED_1_Toggle()     mLED_1 = !mLED_1;
    #define mInitAllLEDs()      LATBbits.LATB4 = 0; TRISBbits.RB4 = 0;
    #define mLED_1              LATBbits.LATB4
    #define mLED_1_On()         mLED_1 = 1;
    #define mLED_1_Off()        mLED_1 = 0;
    #define mLED_1_Toggle()     mLED_1 = !mLED_1;

    /** SWITCH *********************************************************/
//    #define mInitAllSwitches()  mInitSwitch2();
//    #define mInitSwitch2()      {ADCON1 = 0x0F;}
//    #define sw2                 PORTAbits.RA3
//    #define mDeInitSwitch2()    {ADCON1 = 0x07;}
    #define mInitAllSwitches()  mInitSwitch2();
    #define mInitSwitch2()      {TRISBbits.RB5 = 1; ANSELHbits.ANS11=0;}
    #define sw2                 PORTBbits.RB5
    #define mDeInitSwitch2()    {TRISBbits.RB5 = 1; ANSELHbits.ANS11=1;}
という感じで、修正します。ここではLEDはポートC0、SWがポートA3に接続する前提だったのを、LEDはポートB4、SWはポートB5に接続するように修正しています。そして、main.cの325行目にある ENABLE_FLASH_SIGNATURE_VERIFICATION の定義はコメントアウトして、SIGNATUREのチェックはしないようにします。
これでビルドを行い、PIC18F14K50に書き込みを行うと、無事にブートローダアプリから認識されるようになりました。

2.ブートローダでロードするサンプルの準備

サンプルは例によってCDC Basic Demoを使いました。同様にProjectのPropertyを開き、PIC18F14K50の設定をActiveにします。プロジェクトのディレクトリ内に「microchip_solutions_v2013-06-15/USB/Device – Bootloaders/HID/Firmware – PIC18 Non-J/Linker files for applications」の下にある「rm18f14k50_g.lkr」をコピーして、Projectsの「Linker files」を右クリックして「Add Existing Item...」を選択してプロジェクトに加えます。他にもリンカファイルは存在しますが、今回加えたファイル以外は薄文字になっていることを確認します。
さらに、このままビルドすると「p18f14k50.libが見つからない」というエラーに遭遇します。これはライブラリとして実在するのは「p18F14K50.lib」なのに対して、探しているのが「p18f14k50.lib」と全て小文字のファイル名のためです。ですので、
$ cd /opt/microchip/mplabc18/v3.40/lib
/opt/microchip/mplabc18/v3.40/lib $ sudo ln -s p18F14K50.lib p18f14k50.lib
として、大文字でも探せるようシンボリックリンクを張って誤魔化します。(Windowsでは問題にならず、Linuxでは問題になるケース)
これでビルドすると無事に通るようになりました。
ビルドしたアプリケーションは「microchip_solutions_v2013-06-15/USB/Device – CDC - Basic Demo/Firmware/MPLAB.X/dist/LPC_USB_Development_Kit_PIC18F14K50/production」の下に置かれますので、ここにできたHEXファイルをブートローダアプリケーションで指定して書き込んでやると無事にCDC Basic Demoとして動作しました。

0 件のコメント: