<フラッシュツール/ライタープログラム>
フラッシュツール(pic24wr.exe)はこちらからダウンロード出来ます。
出荷時に書き込まれているPIC24で動作するライタープログラムはフラッシュメモリの上位アドレス(0x29000)に書き込まれていますのでユーザの作成したプログラムと共存することが可能です。ライタープログラムは割り込みベクタを使用しない構造になっているため、ユーザプログラムは割り込みベクタに関して意識する必要はありません。
<セルフ書き込み>
普通の場合はPIC24USB基板をPCに接続してライタープログラムを起動した状態で、自分自身(セルフ)のフラッシュメモリを書き換えます。
特に意識せずにMPLABを使用してPIC24用のプログラムを作成すると、リセットベクタや割り込みベクタはユーザのプログラムにジャンプするように作成されます。このため何もせずにフラッシュメモリーを書き換えてしまうと、リセットベクタも書き換わりライタープログラムが起動しない状態になります。
これを防ぐためにセルフ書き込みの場合は、書き込むユーザプログラムのリセットベクタ(0x0000)を書き換え、ライタープログラムの開始アドレス(0x29000)にジャンプするようにしています。ライタープログラムでは、PGD端子の状態を調べGNDに接続されていなければユーザプログラムの開始アドレス(0x0200)にジャンプしてユーザプログラムを動作させるようにしています。
セルフ書き込みを行うためにはPIC24USBのPGD端子をVSSにショートさせた状態でPCに接続します。
この状態でPCからはUSB機器として認識されるはずです。
(pic24wr.exe以外の書き込みツールでPIC24USBにプログラムを書き込んだ場合は、ライタープログラムも消去されてしまっています。その場合はtools.lzhに含まれるusb_loader.hexをPIC24USBに書き込んでください。)
この状態でコマンドプロンプト(コンソール画面)から「pic24wr ヘキサファイル名」を実行することで書き込みを行うことが出来ます。
<PIC24USBを2枚使用する>
他のライターツールでPIC24USBに書き込んだり、プログラムのバグなどで出荷時に書き込まれているライタープログラムが動作しなくなる場合があります。この場合はusb_loader.hexをPIC24USBに書き込む必要があるのですが、ライタープログラムが起動しないため書き込むことが出来ません。
このような場合はライタープログラムが生きているもう一枚のPIC24USB(ライター側)を使用して、別のPIC24USBを書き込むことが出来ます。
ライター側のPIC24USBは写真のようにソルダージャンパ(半田ジャンパ)を変更します。
(MCLR端子をPIC24のMCLR端子ではなく、I/OのRB3に変更しています。)
ライター側のPIC24USBのPGDをVSSにショートさせた状態でPCと接続します。
書き込み対象のPIC24USBとは写真のように接続します。書き込み対象のPIC24USBの電源はライター側のPIC24USBから供給されますので、書き込み対象のPIC24USBにはUSBケーブルを接続する必要はありません。
手前側のPIC24USBが書き込み対象で、奥のPIC24USBがライター側です。
結合部分のアップ写真です。今回はコネクタを使わずに書き込み対象のPIC24USB基板のスルーホールに直接ピンヘッダを挿入して、若干力を加えることで信号を接続しています。
この状態でpic24wrを「/isp」オプションを付けて起動します「pic24wr /isp usb_loader.hex」。
<EZ-USB FX2を使用する>
pic24wr.exeはEZ-USB FX2をライターとして使用することも可能です。
オプティマイズの「MINI FX2」、「FX2 USB2.0」、「カメレオンUSB FX2」を使用してPIC24USBを書き込むことが出来ます。
(カメレオンUSB FX2はCPLDを消去した状態で使用します。)
<配線表>
MINI FX2 FX2 USB2.0 カメレオンFX2 PIC24USB CN1-20 CN3-15 CN1-14 PGC CN1-6 CN3-16 CN1-13 MCLR CN1-5 CN3-17 CN1-12 PGD CN2-1 CN3-40 CN1-1 GND CN2-5 CN3-36 CN1-4 3V3
pic24wr.exeの起動は「/fx2」オプションを付けて起動します「pic24wr /fx2 usb_loader.hex」。
<バイナリファイルのダンプ・リストア>
PIC24のフラッシュメモリーは実行中のプログラムから書き換えることが可能ですので、アプリケーションの設定データなどを保存する目的で使用することが可能です。(0x29000以降のアドレスはライタープログラムで使用していますので注意してください。)
プログラムのデバッグなどでフラッシュメモリーの任意のエリアをバイナリファイルにダンプ・リストアできると便利です。
pic24wr.exeツールはライタープログラムを起動してバイナリデータのダンプ・リストアが可能です。
nnnnnn:16進アドレス、mmmm:16進バイト数
バイナリファイルのダンプ pic24wr /Dnnnnnn,mmmm バイナリファイル名 バイナリファイルのリストア pic24wr /Wnnnnnn,mmmm バイナリファイル名
<ブートローダのセルフ書き換え>
PIC24にはブートローダが予め書き込まれています。この予め書き込まれているブートローダは、起動時のRB0ポート(PGD)の状態を見て、GND接続ならブートローダ、オープンならユーザプログラムを起動する仕様になっています。
ところが、RBポートはPIC24の中で唯一連続で16bit(RB0〜RB15)を確保できる、汎用性の高いポートになっていて、ユーザ側で自由に使用したいという要求があります。
そこで、ブートローダの起動時のチェックをRB0ポートでは無く、汎用性の低いRC14ポートを使用するブートローダを用意しました。(usb_loader_rc14.hex)
このRC14用のブートローダをPickKitやICDなどを使用して書き込んで使用することが出来ます。
外部ライターを使用しないで書き換える方法は下記の手順になります。
- 「pic24wr usb_loader_self.hex」で自己書き込み用のローダを書き込む。
- RB0(PGD)はオープンのまま、PIC24をUSBポートから抜き差しする。
- 「pic24wr /L usb_loader_rc14.hex」でRC14用のブートローダを書き込む。(/Lオプションを忘れずに)
上記手順で、RC14を使用するブートローダに書き換わります。