趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • PIC18F14K50用にブートローダを準備する

    投稿日 2013年 11月 4日 コメントはありません

    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として動作しました。


    コメントをどうぞ(日本語のみ/Only in Japanese)

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)