OneBitLoaderの製作

ブートローダ(OneBitLoader)の製作

[TopPage] -> [PIC] -> [OneBitLoader]  |   [blog]

1. はじめに
 PICのプログラム書込み時間は数十秒で済み、一昔前にマイコンで2732等にプログラムを書いていた頃に比べたら隔世の感があります。
 しかし、「1BIT I/Oでのシリアル送受信実験」のページで紹介した1ビットシリアル通信を使ってディバッグしながらPICライタでプログラムを更新するためには、シリアルケーブルの繋ぎ替えが必要であり、またPIC自体の抜き差しも必要で不便でした。

 そこで1BITシリアル通信を使ったPIC16F88用のブートローダを作成しました。シリアル通信はソフト制御なので好きなI/Oピンを割り振ることができ、プログラム更新とディバッグとでケーブルの繋ぎ替えもPICの抜き差しも必要なくなるのでディバッグ環境がかなり改善されます。

 今回は勉強も兼ねてパソコン側のソフト開発環境としてマイクロソフトのホームページから無料でダウンロードできるVisual C++ 2005 Express Editionを使いました(自前でVC6は持っているのですが)。
 ガベージコレクションでメモリ領域が管理されたことで開放忘れを気にせずにプログラムできるのは良いのですが、慣れていないせいもあってヘルプを引き引きのんびりと作りました(VC6で作った方が絶対早かったでしょう・・まぁ馴れれば.Net環境でも効率が上がるのでしょうが)

2. 特徴
主な特徴は次のとおりです。
1) PCとの通信は1ビットのI/Oで行っており通信自体もソフト制御なので、ブートローダには任意のI/Oピンを一つだけ割り振るだけでよい。MCLRピンについても特に制約はありません。
2) ローダー自体のサイズは非常にコンパクト(133ワード)で、0F7BH〜0FFFHのアドレスに収められていてアプリケーション側のプログラムサイズをあまり圧迫しません。
3) アプリケーションプログラム側では0000H〜0F7AHまでの領域を使用可能です。多くのブートローダは最初の0000H〜0003Hを指定のコードにする等の条件が必要ですが、本ブートローダはそのような制約はありません。
4) ロード対象はアプリケーションのコードのある領域のみであり、かつEEPROM領域は無視するのでロードが非常に高速です。
5) PC側のプログラムでは設定条件を自動保存し、次回起動時に設定内容を受け継ぎます。また、HEXファイルの指定はエクスプローラからのドラッグ&ドロップに対応しています。(マイクロソフトのホームページから無料でダウンロード可能なVisual C++ 2005 Express Edition環境で開発)
6) PC側のプログラムでディバイス依存のパラメータは定義ファイルで設定するようにしているので他のフラッシュタイプのPICに対しても適用が容易(なはず)。
→16F88に内蔵のUSARTに対応。ブートローダサイズが、91ワードとブートローダとしては世界最小クラスになりました(アプリケーションからは0x0000〜0x0fa4の範囲が自由に使えます)
2008/11/23追記


3. 使用方法
 本ブートローダを使用するためには、PIC側ハードウェアがパソコンとシリアル通信できることが基本条件です。
 「1BIT I/Oでのシリアル送受信実験」のページで紹介している1bit通信用のハードウェアを作成することを推奨します(ディバッグにも役立ちます)。  MAX232等のI/F用ICを使ったインターフェースでも使用可能です。

 本ブートローダの使用手順は

1) ハードウェア条件
 PIC16F88側でパソコン側とシリアル通信可能なインターフェースを準備する。(「1BIT I/Oでのシリアル送受信実験」で紹介したI/Fの使用を推奨)
 通常の2ビットを使ったシリアルインターフェースでも使用可能です。
2) PIC側ローダプログラムの準備
 16F88内蔵のUSARTを使う場合は16F88RS9600.hex、ソフトウェアシリアル通信(使用ポートはPORTA.7)を使う場合は16F88SW9600.hexがそのまま使えます。
 シリアル通信に使用するI/Oピンを変更する場合は、条件に応じてPIC側ソースプログラム「Serial.h」内の
     bit RS232_OUTBIT @ PORTA.7;
     bit RS232_INPBIT @ PORTA.7;
     #define RS232C_SET_INP TRISA.7=1;
     #define RS232C_SET_OUT TRISA.7=0;
の4箇所を設定し(上記サンプルはRA7ポートで入出力する例)、BKD社のfreeのCコンパイラ(CC5X)でコンパイルしhexファイルを作成します 。
 尚、MAX232等を使用している場合はシリアル信号が反転するので「SERIAL_POLARITY」を「1」でdefineするようにしてください。
 またconfigワードを変更する場合は「OneBitLoader.c」内のconfig定義部分を変更して下さい。ディフォルトとして内蔵クロック(2MHz)使用に設定してあります(この場合シリアル通信速度は9600bps)。
 「1BIT I/Oでのシリアル送受信実験」で紹介したI/Fを使いRA7でシリアル通信する場合には公開しているhexファイルがそのまま使えます。
3) パソコン側ソフトのインストール
公開している
 ・OneBitLoader.exe パソコン側のブートローダソフト本体
 ・OneBitLoader.ini 設定ファイル
 ・16F88.def ソフトウェアシリアル通信用定義ファイル
 ・16F88SW9600.hex PIC用hexファイル(ソフトウェアシリアル通信用)
 ・16F88R.def USART通信用定義ファイル
 ・16F88RS9600.hex PIC用hexファイル(USART通信用)
を同じディレクトリに入れます。インストール作業はこれだけです(レジストリ設定はしていませんのでアンインストールする場合はこの3つのファイルを削除するだけです)
 但し、PC側ソフトはVisual C++ 2005 Express Editionで開発しているため、動作させるためには .NetFramework2.0 環境が必要です。インストールしていない場合はマイクロソフトのホームページからダウンロードしインストールして下さい。
4) PICへのブートローダの書込み
 PICライタを使って作成したブートローダhexファイルをPICへ書き込みます。
 RS−232CケーブルでPCとPICを接続し、ハイパーターミナル等の通信ソフトを起動します(シリアルのモードは8bit、no parity、stopbit=1、配布版での通信速度は9600bps)。この状態でPIC側の電源を入れると「8」または「9」の文字が一個送信され、その後、ターミナルソフト側からのキー入力文字がエコーバック表示されれば動作確認okです。
 一度PICにブートローダーを書き込めば、その後はPICライタなしでアプリケーションの書き換え(下記5項の手順)が可能になります。
5) アプリケーションプログラムのロード
 OneBitLoader.exeを起動すると右のようなウィンドが表示されます。
 "** start"以降のメッセージはこの時点では表示されません。

・「HexLoad」ボタンでhexファイル指定(またはエクスプローラからドラッグ&ドロップ)
・Serialの通信速度とポートを指定
・Deviceは現時点では16F88、16F88Rがそれぞれソフトウェア通信、USART通信に対応するので該当するものを選択します。

の設定後、「Write」ボタンを押し、5秒以内にPIC側の電源を入れるかリセットするとPICへのダウンロードが開始します。
 ダウンロード完了後、ダウンロードしたアプリケーションが自動的に起動されます。
 パソコン側で「Write」ボタンを押していない状態でPICを起動した場合は約200ms後に既にダウンロード済みのアプリケーションが起動されます(PCを繋げずにPIC側の電源を入れた場合も同様)。
 再度アプリケーションをダウンロードする場合は5)の手順だけでokです。
 ダウンロードしたアプリケーションはPIC内フラッシュメモリに書き込まれますのでPIC側の電源を切って消えません。
4.ダウンロード
本ソフトウェアのダウンロードはここをクリックしてください。

5.その他
1) 16F88以外のディバイスを追加したい場合、PC側のソフトに関してはOneBitLoader.ini内の「DEVICES = 16F88」の行の末尾に「, xxxxx」を追加し、xxxxx.defを「16F88.def」にならって作成すれば、Deviceのコンボボックスに追加され選択可能となります(xxxxxは追加するディバイス名)。PIC側のプログラムはFlashRomタイプのPICであれば移植は容易なはずです。


[history]
2008/11/23
 Ver 0.0.5
16F88に内蔵のシリアル通信機能(USART)に対応。従来のソフトウェア通信の場合のブートローダサイズをダイエット。
注意:バージョンアップはPIC側とPC側の両方行ってください
2008/10/04
 Ver 0.0.4
PC環境により、動作しないという報告を頂きましたので、WinXPで再コンパイルしました。(前回はWin2Kでコンパイル)
2008/04/19
 Ver 0.0.3
Vcc5V時の安定化のために配布版の通信速度を19200bpsから9600bpsに変更
 (通信速度を下げても予想に反して書込み時間はほとんどかわらず(EEPROM書込み自体に時間がかかっているということでしょう))
  0000hにgoto 1のようなコードはうまく動作しませんでしたが今回対応しました。(大久保様 バグレポートありがとうございました)
注意:バージョンアップはPIC側とPC側の両方行ってください
2006/02/12
 Ver 0.0.2
初期化処理を含まない部分的なコードの書込みに対応
2006/01/22 more shorter code and modify receive error function by T.Satoh
2006/01/09 first published by T.Satoh

[TopPage] -> [PIC] -> [OneBitLoader]  |   [blog]