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氏より快諾を頂きました.ここに記して深く感謝いたします.