2011年4月16日作成 2010年4月17日更新

PICプログラマの製作にもどる

PIC24のプログラム書き込み方法

PICプログラマを作ったときに調べた書き込み手順を、自分が忘れてしまわないうちに書いておきます。

マイクロチップ社のデータシート(PIC24FJXXXGA0XX Flash Programming Specification 39768d)にすべて書かれているので、まずはそれを読みます。

PIC24FJXXXGA0XXシリーズは書き込みに高電圧を使用しないので、書き込み回路がらくちんです。

ICSPとEnhanced ICSP

ICSP

PIC24のICSPはPIC16のような書き込みや消去のコマンドが無く、CPUの機械語を1ワード送信してはそれを実行するという動作を繰り返してフラッシュメモリに書き込んでゆきます。そのため、PIC16と比べると通信量がだいぶ多くなります。

Enhanced ICSP

Enhanced ICSPでは、あらかじめ通常のICSPモードで書き込み用のファームウェアを専用のフラッシュメモリに書き込んでから、そのファームウェアと通信しながら書き込んでゆきます。CPUの機械語を1ワードずつ送信・実行する必要がないので、高速に書き込みする事ができます。

今回作成したプログラマでは、面倒なのでEnhanced ICSPモードには対応していません。

ICSPモードへの入り方

コマンド

PICへ機械語を1ワード送るコマンドと、PICからVISIレジスタの内容を受信するコマンドの二つしかありません。

クロック同期式のシリアル通信で、クロックの立ち上がりでデータ有効です。(PIC16と異なります)

SIX SERIAL EXECUTION

PICへ機械語を1ワード(24ビット)送ります。

コマンドの部分は4ビットですが、ICSPモードに入った直後の一回目のみ9ビット送らなければなりません。面倒なのでICSPに入った直後にNOPを一つ送っておけばよいようです。

REGOUT SERIAL EXECUTION

PICからVISIレジスタの内容(16ビット)を受信します。

実際の書き込み手順

たとえば、チップイレーズは

このように機械語を1ワードづつ送り行います。書き込みや読み出しも同じようにプログラムを1ワードづつ送って行います。

データシートには、上の表のように手順が載っているので、そのとおりに行えばよいでしょう。

書き込みのラッチは64ワードあるのですが、このうち一部にだけデータをセットして書き込みを行うと、(以前のデータが残って?)余計なデータ(ゴミ)がフラッシュメモリに書き込まれてしまったので、データの無いところは0xFFFFFFで埋めて64ワードすべてにデータをセットしてから書き込みを行うようにしました。

PIC24用HEXファイルの読み方

PIC24FJ64GA002でLEDを点滅させるプログラムのHEXファイル

ベクタテーブルの定義が含まれるので、短かいプログラムでもサイズがすこし大きい。pic24f_test.hex


:020000040000fa
:080000000002040000000000f2
:020000040000fa
:100400000f802000007f2200000188000000000013

(省略)

:020000040000fa
:020000040001f9
:0457f800af78000086
:020000040000fa
:020000040001f9
:0457fc007f3f0000eb

(省略)

:020000040000fa
:040578000000fe0081
:00000001FF

数はすべて16進。2文字で1バイトを表す。


PICプログラマの製作にもどる


webmaster@kyoutan.jpn.org

('A`)