picwriter-1.1

このファイルは、の作成した、 picwriter の取り扱い説明書です。
picwriter は、EEPROM を内蔵している PIC マイコンに書き込みを行なうプログラムです。
  1. サポートする範囲
  2. 使用方法
  3. インストール
  4. 実現方法
  5. 関連情報
  6. 著作権とダウンロード

サポートする範囲

picwriter は以下をサポートします。
OS
Linux + gcc + PC/AT architecture をサポートします。
作者の環境は以下の通りです。
Linux 2.0.29
gcc version 2.7.2
Pentium 100MHz
制限の理由などの、詳しい情報は 実現方法の節を見て下さい。
2000/6/20
トラ技での記事に併せてソースコードをきれいにしました。
2000/1/12
光永さんより FreeBSD 対応のパッチを頂き、 マージしました。さらに、様々なバグフィクスと、 コードの整理まで頂きました。ありがとうございます。
2000/1/12
同じく光永さんより BUSY対応のパッチを 頂きました。パラレルポートからの取り込み では、トラ技式では BUSY を、AN589 式では *ACK を使っている のですが、コンパイル時に Makefile に -DUSE_BUSYを追加するとトラ 技式のライタでも動作します。
2000/1/12
手元にあった(すでに1年ぐらい寝かし続けてある) Pentium に依存し ないタイマーコードを追加しました。 PC/AT アーキテクチャなら Pentium 以外でも動作するはずです。
ターゲットデバイス
PIC16C84, PIC16F84, PIC16C509 に対応しようとしています。 PIC16C509 は対応予定です。
ソースファイル
IHX8M, IHX16, IHXHL, IHXLH
となっていますが、現在はIHX8M,IHX16 のみの対応です。
想定しているアセンブラは picasm version 1.05 が出力するフォーマットです。 詳しくは、option -f を見て下さい。

使用方法

引数をつけずに起動すると、簡単な使い方を表示します。
-v
Verbos level を指定します。デフォルトは -v1 と同じです。-v だけ 指定した時は、-v2 と同じです。
-v0
メッセージを極力出力しません。
-v1
通常のメッセージを出力します。
-v2
なるべくメッセージを出力します。
-t
続けて、ターゲットデバイスを小文字で指定します。
デフォルトは pic16c84 です。 pic16f84 にも対応しています。pic12c509 は対応予定です。
-f
アセンブルした結果のソースファイル のファイルタイプを指定します。-f に続けて ihx8m、ihx16、ihxhl、 ihxlh が指定できます。じっさいに動作するのは ihx8m, ihx16 だけ です。デフォルトは ihx8m。
このソースファイルは、プログラムとデータの EEPROM が同じファイ ルに書かれていて、データメモリが 0x2100 以降にオフセットされて いるフォーマット(要するに picasm 1.05の形式) を想定しています。
-c
Chip erase のみ行ないます。
書き込みを行なう時は、その前に Chip erase も自動的に行なわれま す。
-r
デバイスに記録されている内容を出力します。
出力フォーマットは、-f で指定できるようにする予定ですが、今のと ころ独自フォーマットです。
-h
簡単な説明を表示します。
ソースファイル
オプションに続けて、ソースファイル名を指定します。ただし、一つ だけしか指定できません。ファイルフォーマットは -f で指定します。
-- で、オプションの終りを指定して、その後に - を指定すると標準 入力から読み込みます。あなたの統合環境に組み込むのに便利でしょ。
ファイルタイプについてはoption -f を参 照して下さい。

インストール

Makefile があるので、
% make
とタイプすればコンパイルします。バイナリが無事できたら、 root に SetUID して下さい。 make install は対応していないので、自分でstrip して から、パスの通ったディレクトリに picasm 自体をほり込んで下さい。

実現方法

このプログラムで使用している方法について説明します。
情報の入手
トランジスタ技術 1996年12月号に PIC マイコンの詳しい説明があり ます。また、秋月電子、共立などの部品屋で資料を買うこともできま す。英語が得意なら、 マイクロチップ社の Web site からダウンロードしても良いでしょ う。
Hardware
前述のトラ技に載っていた回路を使用しました。ただし、パラレルポー トからのデータの取り込みは、BUSY ではなく、*ACK を使いました。 AN589 と互換性のある方が、他の Writer Program も使えて便利だと 思ったからです。つまり、パスコンを入れたと書いてあるところのみ Microchip 社 が配布している AN 589 に対して改良を加えました。
実装は、D-Sub 25 Pin のコネクタに、万能基板を直接半田付けして、 その基板上に、プログラム用の Textool ソケットを、また、コネクタ で IC クリップを引き出して、ISP(In System Programing) に対応で きる用にしてあります。電源は、18V の AC アダプタから取るように しています。回路自体は、小さく組めば 50×50[mm] には収まるでしょ う。
書き込み電圧 Vpp は12V〜14V って書いてあるけど、なるべく低くし た方が EEPROM の持ちがよい気がするのは僕だけでしょうか。
パラレルポートの取り扱い
Linux からパラレルポートに出力するために、ioperm(2) システムコー ルを使っています。ioperm は root で実行しなければならないので、 書き込みプログラム自体は SetUID します。おかげで、Linux に依存 してしまいました。
この部分は、io_lp.h にライブラリとして使えるようにまとめてあり ます(全てマクロ)。
Delay の取り扱い
Linux I/O ポートプログラミングミニハウツー によると、I/O ポートの 0x80 に出力すれば 1μs だけ待つことがで きるそうです。それ以下の遅れは無視、それ以上の長い遅れは、繰り 返し outb(0x80,0) を呼ぶことで実現しています。
IHX 形式のファイルの取り扱い
ダロカンで読み込んでいます。IHX8M なら多分読めています。
ihx.[c|h] を参考して下さい。
書き込みアルゴリズムの実現
AN589 に書いてある通りに パラレルポートを ON/OFF しています。 writer.[c|h] にほとんど書いてあります。picwriter.c の、やたらに 長い main() は、オプションを解析して、ファイル読み込みと書き込 みの関数を呼ぶだけのフロントエンドとして動作します。
EEPROM メモリに Chip Erase せずに書き込むとかは、writer.o をリ ンクすればできるはずです。
ただし、全てのメモリを上書きするという間抜けな仕様になっていま す。

関連情報

トランジスタ技術 1996年12月号
PIC マイコンについての日本語のまとまった情報源として、一度読ん でおくと良いかと思います。
AN589
書き込み方法や PIC Writer の公式資料です。秋月などから入手可能
GNUPIC
ソースつきの PIC 関連のプログラムがいろいろおいてあります。
picasm 1.05
ソースつきの PIC Assembler です。多分どんな環境でも動くと思います。
後閑さんの Web Page
電子工作についてかなり詳しく取り上げてあります。
Linux I/O ポートプログラミングミニハウツー
JF からダウンロードできる Linux Document の一つです。Linux から ハードウエアをコントロールしようとする時は読みましょう。I/O ポー トのアクセスの方法や、ディレイの掛け方などが詳しく書いてあります。
PIC-ML
最近入った、PIC に関する ML です。fj.engr.elec とかではあんまり 話題に登らないと思ったら、こんなところで話してたんですね。僕も 初心者なのでほとんど ROM してます。
Linux 研究所
三岩さんによる、Linux + EDA のページ。目指す所は私と同じような 気がしますが、より充実しています。

著作権とダウンロード

それではダウンロードしてお楽しみ 下さい。アーカイブ中には、このファイル、ソース一式、Linux 用実行ファイ ルが入っています。実行ファイルは、Linux では root に SetUID すればその まま使えます。コンパイルは、このファイル(アーカイブ中の index.html)を 見て下さい。

近藤靖浩