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