PICでブートローダ

PICでブートローダ

概要

PIC18F27J53を使おう

以前 PIC18F27J53のすすめ という記事を書きました。それの続きで、今回はUSBブートローダの使い方について書きたいと思います。

ブートローダとは

ブートローダとは自分自身にプログラムを書きこむプログラムです。これを使うとPICkitなどのライタを使わなくてもプログラムの書き込みをすることができるようになります。

ただし、初回に一度だけブートローダ用のプログラムをPICkitなどで書きこむ必要があります。

ユーザープログラム

ユーザープログラムとは、ブートローダーにより書き込むプログラムです。あなたが作った、実際に動かすプログラムということです。

回路

後述のI/Oピンによるブートロードモードへの移行をオンにする場合はRB0(21 pin)をプルアップしておいてください。そこをLOWにするとブートロードモードに入るので、SWなどをつけてもいいでしょう。

また、RC2(13 pin)がブートローダのステータスを出力するのでLEDをつけるといいでしょう。

どちらもユーザープログラムには影響はありません。

回路図

PIC18F27J53の回路図

PIC18F27J53の回路図

ブートローダプログラム

HEXファイル

以下のHEXファイルをPICに書き込むだけで動作します。HEXファイルをPICに書き込むには、MPLAB X IDEと一緒についてきたMPLAB IPE.exeを使います。

以下のHEXファイルはMicrochip公式ライブラリ(MLA)のソースをPIC18F27J53用に編集して作りました。コンパイルにはXC8のPRO版が必要なため、ソースではなくHEXファイルを配布します。(XC8には60日間無料のPRO体験版があります)

ソフトウェアまたはハードウェアでブートモードへ切り替えHEX(推奨)
HID_Bootloader_PIC18F27J53(RB0-software-enter).hex
ソフトウェアでブートロードモードへ切り替えHEX(I/Oピンを減らしたくない人向け)
HID_Bootloader_PIC18F27J53(software-enter).hex

ユーザープログラムの書き方

Configration Bitsは不要

Configration Bitsはハードウェアにかなり寄り添ったプログラムなため、ブートローダで書き換えることができません。上のHEXファイルでは、以下のConfigration Bitsがあらかじめ書き込まれています。

なお、このConfigration Bitsを変更したい場合は、ブートローダプログラムを再コンパイルする必要があるので、XC8コンパイラのPROライセンスが必要です。

// CONFIG1L
#pragma config WDTEN = OFF, PLLDIV = 2, CFGPLLEN = ON, STVREN = OFF, XINST = OFF
// CONFIG1H
#pragma config CPUDIV = OSC1, CP0 = OFF
// CONFIG2L
#pragma config OSC = INTOSCPLL, SOSCSEL = LOW, CLKOEC = OFF, FCMEN = OFF, IESO = OFF
// CONFIG2H
#pragma config WDTPS = 1024
// CONFIG3L
#pragma config DSWDTOSC = T1OSCREF, RTCOSC = T1OSCREF, DSBOREN = OFF, DSWDTEN = OFF, DSWDTPS = G2
// CONFIG3H
#pragma config IOL1WAY = OFF, ADCSEL = BIT12, MSSP7B_EN = MSK7
// CONFIG4L
#pragma config WPFP = PAGE_127, WPCFG = OFF
// CONFIG4H
#pragma config WPDIS = OFF, WPEND = PAGE_WPFP, LS48MHZ = SYS48X8

ROMの範囲とオフセットを指定

  1. プロジェクトを右クリックして、Propertiesを開きます。
  2. 左側のXC8 linkerをクリックする。
  3. Option categories:Memory modelを開く。
  4. ROM rangesdefault,-0-FFF,-1006-1007,-1016-1017に指定する。(下図参照)
  5. Option categories:Additional optionsを開く。
  6. Codeoffset0x1000に指定する。(下図参照)
  7. 以上。

ROM rages

ROM rages

Codeoffset

Codeoffset

ブートロードモードへ移行するには

ソフトウェアでブートロードモードへ移行

ユーザープログラムからソフトウェアでブートモードへ移るには、以下のコードを書きます。

asm("goto   0x001C");

※ブートロードモードから、ユーザープログラムに移るにはMCLRなどのリセットが必要です。

I/Oピンでブートロードモードへ移行

PICに電源を投入またはPICをリセットしたときに、RB0端子がHIGHならばユーザープログラム、LOWならばブートローダプログラムが起動します。

ユーザープログラムを書き込み

  1. ここからMicrochip Libraris for Applicationsをダウンロードし、インストールする。
  2. インストール場所/mla_v2014_07_22/ apps/usb/device/bootloaders/ utilities/bin/win/ HIDBootloader.exeを起動する。
  3. ブートロードモードのPICをUSBで接続する。
  4. 上手く接続できると、右下にconnectedと表示されるので、ユーザープログラムのHEXファイルをロードして書き込めばOK。

上手くいかないときは、ドライバをインストールすればうまくいくかもしれません。ドライバも先ほどインストールしたMLAの中のutilities/usb_drivers/に入っています。

HIDbootloader.exe

HIDbootloader.exe

まとめ

USBブートローダを使えば、PICkitなどの周辺機器はほとんど必要なくなります。PICだけでPICの開発ができるようになるのです!

PIC最高ーーー!!!