ATMEL社のAVRマイコン用
ライタ・プログラム avrsp
をWindowsXPのユーザ・モードで実行する
ためのレポート
(2009.01.02)
【 目 次 】
■開発の経緯
■改造のポイント
■DLPortIOの入手とインストール
■avrspの入手
■avrspの改造
■コンパイル
■使用方法
■テスト環境
■Windows Vistaではどうか
■ダウンロードと謝辞
■開発の経緯
ATMEL社のマイコンAVR用のライタ・プログラムとして広く利用されているChaN氏のavrspをWindowsXPで利用する場合,アドミニストレータ・モードで実行する必要があります.
個人ユーザが自分のパソコンで利用する分には何ら問題はありません.しかし,学生教育やセミナーなどで利用する場合,アドミニストレータ・モードでの利用には難があります.
小職の勤務先の学校でも,学生やセミナー受講者はユーザ・モードでパソコン(WindowsXP)にログインさせている関係でavrspの利用をためらっていました.
そこで,avrspをユーザ・モードでも利用できるようにできないか検討していたところ,意外と簡単に改造できることがわかりました.ChaN氏より許可を頂きましたので,ここでそれを紹介します.
■改造のポイント
avrspはシリアル・ポートを使ってAVRマイコンと接続し,デバイスのプログラミングを行います.ところが,WindowsXP(NTや2000なども同様)ではI/Oポートが保護されており,ユーザ・プログラムで直接操作することはできません.そのため,avrspではgiveioなるDLLを使ってシリアル・ポートの操作を行っています.
このgiveioはアドミニストレータ・モードでみ利用可能なプログラムであるため,ユーザ・モードでログインした利用者はavrspを使うことができません.
そこで,以前から使っていたDLPortIOというユーザ・モードのプログラムでもI/Oポートの操作ができる同種のDLLを利用することでユーザ・モードでもavrspを使えるようになりました.
■DLPortIOの入手とインストール
DLPortIOはScientific Software Tools, Incが無償で提供しているI/Oポートを直接操作するためのdllです.
●入手
DLPortIO(port95nt.exe)の入手は次のURLより行えます.
http://www.driverlinx.com/DownLoad/DlPortIO.htm
〔注意〕 Scientific Software Tools, Incのサイトからのリンクもありますが,たどり着けないようです.
●インストール
DLPortIOのインストールはport95nt.exeをダブル・クリックし,必要な事項に答えていくだけです.全てデフォルトの設定で問題ありません.C:\Program
Files\DLportIO下にインストールされます.
●DLPortIOのドキュメント
詳細なドキュメントが次のURLにあります.
http://www.se-ed.net/mpu51/eprom/prog_doswin/DLPortIO.pdf
■avrspの入手
avrspはChaN氏のサイトより入手します.
ChaN氏のサイト
http://elm-chan.org/index_j.html
AVR関連ページ
http://elm-chan.org/works/avrx/report.html
AVRライタ・ツール
Win32版ライタ制御ツール for Windows9X/Me/NT/2k/XP
■avrspの改造
●作業フォルダの用意
適当な作業フォルダを作成し,ChaN氏のプログラムavrsp.c と hwctrl.cをコピーし,以下の改造を行ないます.
●hwctrl.cの改造
hwctrl.cにおいて,先頭の適当なところに
#include "dlportio.h"
を追加し,I/Oポートのアクセス関数を以下のように変更します.
_inp を DlPortReadPortUchar に
_outp を DlPortWritePortUchar に
ただし,変更箇所が多いので,
#define _inp DlPortReadPortUchar
#define _outp DlPortWritePortUchar
の2行を追加することで対応できます.
さらに,giveio用初期化関数本体(55行目付近)と呼出し部(360行目付近)を削除します.
・関数本体 全部削除
static int init_driver (void) {
:
return (0);
}
・呼び出し部分 周辺削除
if(init_driver()) {
pc->Info1 = "I/O driver, giveio.sys, is not available
due to any reason.\n
To install giveio, type \"move giveio.sys %%windir%%\\system32\"
and retry any function.\n";
return 1;
}
■コンパイル
今回,Cコンパイラとして,ボーランド社のフリーのコンパイラBCC32(バージョンは5.5.1)を使用しました.そのため,作業フォルダにDLportIOのインポート・ライブラリDlportbc.libとDlportio.hをコピーしておきます(DLPortIOを展開したフォルダDLPortIO\API下にある).
以上の準備をした後,コンパイルすればでき上がりとなりますが,BCC32でコンパイルするとワーニングがいろいろでます.
特に問題はありませんが,ワーニングが気になる場合は次の処置をします.
・プロトタイプ宣言の不一致
引数のない関数が func() となっているので, func(void) とする.
・if文における「代入後判定」の記述
if ( xxx = yyy() ) { ...
を
xxx = yyy();
if ( xxx ) { ...
に変更する.
・比較における型の違い
型キャストして整合性をとる.
コンパイルはDOSプロンプトを開き,作業フォルダに移動し,次のコマンドを入力します.
bcc32 avrsp.c hwctrl.c Dlportbc.lib
以上で,ユーザ・モードでも実行できるavrspができ上がります.オリジナル版と区別するために,適当に名前を変更しておいた方がよいかもしれません.その他,コマンド・パスの設定をしておくとどのフォルダでも実行できます.
■使用方法
使い方はオリジナルのavrspと全く同じです.プログラムの使用にあたってはChaN氏のサイトを参照してください.
■テスト環境
でき上がったavrspは,次の環境でテストしています.
●OS:
・Windows XP Pro SP2
・Windows XP Home SP2
●ライタ用ハードウェア:
・ストロベリー・リナックス社の簡易型AVRライターキット
・自作ISP回路
●デバイス:
・ATmega128
・ATmega168
■Windows Vistaではどうか
Windows Vistaでも同様に利用可能です.注意点として,VistaにDLPortIOをインストールする時に,「互換モード」を「Windows
XP」に設定して行う必要があります(DLPortIOのアイコンを右クリックしてPropertiesを選択し変更してからインストールする).
■ダウンロードと謝辞
上記のような改造を行ってコンパイルをすれば作成できますが,面倒な方はここからユーザ・モードで実行できるavrspを入手可能です.
なお,本プログラムを利用して発生したいかなる問題・損害に対しても,本サイトの管理者は(もちろんChaN氏も)一切責任を負いません.自己責任で利用してください.
最後になりますが,ユーザ・モードで実行できるavrspの作成および本レポートを公開するに当たり, ChaN氏より快諾を頂きました.ここに記して深く感謝いたします.