[トップページへ戻る]

AVR 高電圧パラレル/シリアルライター

製作:2011年12月-2012年1月/記事公開:2012年2月
AVRマイコン用の高電圧パラレル/シリアルライターを作りました。
ヒューズビットの設定をミスって外部クロック供給にしてしまったが、発振器を持ってないのでSPIライターで読み書きできない、ということがあります。そんなときは高電圧パラレル/シリアルライターの出番です。
また、8ピンAVRでピン数を稼ぐためRESETピンをI/O利用に設定することがあります。この場合、高電圧シリアルライターでないとプログラミングできません(ファームの書き込みやヒューズの設定)。元のRESETピンに戻すにも高電圧シリアルライターが必要です。
通常利用するSPIライターの他に、高電圧ライターが1台あると安心・便利です。

この記事でのライターの呼び方
高電圧パラレルライター … 5V/12Vを使うパラレルライター。
高電圧シリアルライター … 5V/12Vを使うシリアルライター。20ピン未満のAVR用。
SPIライター … 5Vのみを使うシリアルライター。SPI = Serial Peripheral Interface.


ライターの概要
本ライター AVR High Voltage Parallel/Serial Writer の特徴は次の通りです。
  • AVR用 高電圧パラレル/シリアル兼用ライター。
  • USB接続。USB-シリアル変換モジュールを利用し、PCからシリアル通信(COMポート)で制御する。
  • MAX662Aにより12Vを生成しているので、5V単一電源(USB給電)で動作する。
  • ライター本体にATmega88Pを使用している。
ライター本体の名称: FTHVW
書き込みソフトの名称: ftmhvw.exe

製作のヒント
ATmega88Pに本ライター機能のファームを書き込むために、AVRライターが別途必要となります(鶏と卵の問題)。
ただし、秋月電子FT232RモジュールがあればそれがSPIライターになるので、鶏と卵の問題は生じません。
どのみち本ライターではUSB-シリアル変換モジュールが必要なので、FT232Rモジュールがあれば一石二鳥です。
※詳しくはこちら「FT232Rモジュール活用 #3 FT232-AVRライター

何らかのAVRライターを既に持っているなら、USB-シリアル変換モジュールはFT232Rのものでなくとも構いません。
CP2103やPL-2303HXのモジュールが利用できます。
※詳しくはこちら「FT232Rモジュール活用 #1 ドライバのインストールからソフト開発まで

左はブレッドボード上で完成したもの。

右は開発初期、実験中の様子。
テスト用ターゲットにATtiny2313を使用した例です。
Signature Byte 1E-91-0A が読み込めています。
奥のLEDは12V, 5Vの通電を表しています。

ピンアサイン
ライター本体とターゲットデバイスの、高電圧パラレル/シリアルプログラミングに関するピンアサインを示します。
ATtiny2313など20ピンのデバイスにはライターの信号線を兼用するピンがあります。PAGEL/BS1, XA1/BS2です。本ライターは20ピンのデバイスが設置されると、自動的にこれらの信号線をそれぞれ1本に共通化して動作します。
ターゲットデバイスへ供給する電源5V/12VはPNP型トランジスタで制御します。そのため、ライターの5V-CTRLピン/12V-CTRLピンは負論理となります。

■ライター本体(FTHVW)であるATmega88P ■ターゲットデバイスの例
高電圧パラレルライター
. RESET PC6 PC5 CLK
TXD→ RXD PD0 PC4 BS2
RXD← TXD PD1 PC3 PAGEL
Target_VCC← 5V-CTRL PD2 PC2 XA1
Target_RESET← 12V-CTRL PD3 PC1 XA0
. . PD4 PC0 BS1
. . VCC GND . .
. . GND AREF . .
←→ DATA6 PB6 AVCC . .
←→ DATA7 PB7 PB5 DATA5 ←→
RDY/BSY PD5 PB4 DATA4 ←→
OE PD6 PB3 DATA3 ←→
WR PD7 PB2 DATA2 ←→
←→ DATA0 PB0 PB1 DATA1 ←→

8ピンデバイスのプログラミング時は下記のピン対応。
高電圧シリアルライター
8ピンAVR . ライター
SDO PD5 (RDY/BSY)
SDI PC0 (BS1)
SII PC1 (XA0)
CLKI PC5 (CLK)
・CLKIにはライター側クロック出力CLKが対応する。
・SDO(出力)にはライター側入力設定のピンを割り当てる(RDY/BSY)。
・SDI,SIIの割り当てがBS1,XA0であることに意味はない。
 単にPC0,PC1と順に割り当てただけ。

ATmega88P(28ピン)
高電圧パラレルプログラミング
+12V RESET PC5 . .
. . PD0 PC4 . .
RDY/BSY PD1 PC3 . .
OE PD2 PC2 BS2
WR PD3 PC1 DATA7 ←→
BS1 PD4 PC0 DATA6 ←→
+5V VCC GND . .
. . GND AREF . .
XTAL1 PB6 AVCC +5V
. . PB7 PB5 DATA5 ←→
XA0 PD5 PB4 DATA4 ←→
XA1 PD6 PB3 DATA3 ←→
PAGEL PD7 PB2 DATA2 ←→
←→ DATA0 PB0 PB1 DATA1 ←→

ATtiny2313(20ピン)
高電圧パラレルプログラミング
+12V RESET VCC +5V
. . PD0 PB7 DATA7 ←→
RDY/BSY PD1 PB6 DATA6 ←→
. . PA1 PB5 DATA5 ←→
XTAL1 PA0 PB4 DATA4 ←→
OE PD2 PB3 DATA3 ←→
WR PD3 PB2 DATA2 ←→
PAGEL/BS1 PD4 PB1 DATA1 ←→
XA0 PD5 PB0 DATA0 ←→
. . GND PD6 XA1/BS2

ATtiny13A(8ピン)
高電圧シリアルプログラミング
+12V RESET VCC +5V
CLKI PB3 PB2 SDO
. . PB4 PB1 SII
. . GND PB0 SDI


回路図と配線図
回路図

FT232Rモジュール MAX662Aモジュール



ターゲットデバイスが28ピンAVRの場合
同名の信号線を全結線します。

ターゲットデバイスが20ピンAVRの場合
兼用ピンがあります。PAGEL/BS1, XA1/BS2.
これらのうち、ライター側のPAGELとXA1は
ターゲットデバイスに結線しません。
※PAGEL信号はBS1線から出力され、XA1信号はBS2線から
出力されます。ライターが自動判別して動作します。


ターゲットデバイスが8ピンAVRの場合
高電圧シリアルプログラミングに必要な信号
(CLKI, SDO, SDI, SII)に対応した信号線のみを
結線します。

配線図
青線は基板ウラ面の配線(スズメッキ線)。
緑線は基板ウラ面の配線(被服線)。
赤線は基板オモテ面の配線(ジャンパー)。
信号線の配線は描き込んでいません。実際はUEWで配線します。

左上に秋月電子FT232Rモジュールをマウントします。ピンヘッダでRXD/TXD/VCC/GNDを出してあるので、代わりの適当なUSB-シリアル変換モジュールを接続することもできます。
その右の8ピンICは秋月電子のMAX662Aモジュールを表しています。
2個のZIFソケットのうち、左側は28ピンのターゲットデバイス用(ATmega328Pなど)。右側は上寄せで8ピン(ATtiny13A/ATtiny45など)、下寄せで20ピン(事実上ATtiny2313専用)に対応します。

配線図(参考)
小さい基板でやれないものか、なんとなく検討した結果、このようになりました。※作る気はしませんが。
両基板右側のコネクタは各々ピンソケットとピンヘッダとし、左の基板の上に右の基板を重ねる構造です。
ただ、秋月電子FT232Rモジュールは背が高い上にジャンパーピン2つがさらに出っ張るので、背の高いスペーサとピンヘッダを使うか、上側の基板に穴を開けねばなりません(灰色の×枠)。
上側の基板は、一応、ICソケットでなく28ピンZIFソケットを置くだけのスペースはあります。

作り方
概要で説明したように、本ライターにはAVR(ATmega88P)を使用しています。従って、現在何らかのAVRライターを持っているかどうかで、本ライターの作り方が異なります。
AVRライターを持っている AVRライターを持っていない
手順1. 手持ちのAVRライターで、ATmega88Pに、本ライターのファームを書き込む。
手順2. 本ライターを作る。
手順3. 適当なUSB-シリアル変換モジュールを利用して本ライターとPCを接続する。
※TTLレベルのTXD/RXDで通信できれば、変換ICはFT232RでもCP2103でも何でもよい。
手順1. 秋月電子FT232Rモジュールを用意する。
手順2. FT232Rモジュール活用 #3」に従い、ATmega88Pに、本ライターのファームを書き込む。※FT232RモジュールをSPIライターとして使う。
手順3. 本ライターを作る。
手順4.
(*)
FT232Rモジュールを利用して本ライターとPCを接続する。※FT232Rモジュールを本来のUSB-シリアル変換モジュールとして使う。

ライター本体となるATmega88Pは、8MHz動作(内蔵8MHz/分周なし)にヒューズを設定してください。
その他はデフォルト値のままです。Fuse Lo:0xE2 Hi:0xDF Ex:0xF9

(*) FT232Rモジュールのジャンパー設定
J1 [1-2-3] [2-3]をショートする。I/Oピン(RXD,TXD)が5V入出力になる。
※[1-2]をショートするとI/Oピンが3.3V入出力になります。本ライター向きの設定ではありません。
J2 [1-2] FT232Rモジュールの使用法として基本的に常時ショートさせておく。
(FT232Rモジュールへ供給する電源5Vを、USBコネクタから取る)

FT232RにしろCP2103などにしろ、USB-シリアル変換モジュールのドライバは、お使いのPC環境に合った最新版をインストールすることをお勧めします。バージョンの確認方法などは各ICメーカーのサイトをご覧ください。

ソフトウェア
本ライター FTHVWの書き込みソフト ftmhvw.exeです。
ダウンロードftmhvw.zip
ftmhvw.exe v1.00
開発/動作確認環境
WindowsXP, .NET Framework 3.5/SP1

zipファイルの中身
avrhvw.hex ライター本体(ATmega88P)に書き込むファーム。
ATmega88Pは8MHz動作(内蔵8MHz/分周なし)にヒューズを設定してください。
Fuse Lo:0xE2 Hi:0xDF Ex:0xF9
ftmhvw.exe Windows上で使う書き込みソフト。姉妹機FTAVRWとほぼ同じ内容。
sample_ftmhvw.ini ftmhvw.exeで使う設定ファイルのサンプル。
readme.txt 説明書。
画像 回路図。

本ライターは、ライター本体であるATmega88Pを8MHzで動作させ、38400bpsで書き込みソフトと通信します。

参考資料
AVR_High-Voltage_Serial_Programming_Instruction_Set.txt
8ピンAVR 高電圧シリアルライターの命令一覧です。AVRのデータシートはPDF形式で、コマンド一覧は表形式で記述されています。これを行単位でコピー&ペーストすることはできないので、手作業で整形し、テキストファイルに保存しました。自分で書き込みソフトを作ろうと思っている人には、少し役立つと思います。

使い方とオプションスイッチ
ヘルプ画面
……。見ての通り「雰囲気英語」です。オプションの意味が思い出せればよし。※日本語だと文字数が多くて画面に収まらない。
使い方とオプションスイッチは拙作AVRライター「FTAVRW」と同様です。※元々はavrsp.exe(ChaN氏)を参考にしています。


ターゲットデバイスの設置と取り外し
本ライターはターゲットデバイスへのアクセス中のみ電源(5V,12V)をオンにし、処理が終わると電源オフにします。
本ライターがコマンドプロンプトで入力待ちの状態にあるとき、ターゲットデバイスは電源オフになっています(回路図のLED2:busyが消灯)。このときターゲットデバイスをソケットに設置したり、取り外したりできます。アクセス中(同・点灯中)には抜き差ししないでください。

ターゲットデバイスは単独でICソケットに設置してください。※このページのトップにある写真を参考にしてください。
  • ICソケット上のターゲットデバイスには何も配線しないでください。電源は本ライターから供給されます。
  • 何らかの基板上に既に取り付けられているターゲットデバイスから、ジャンパー線でICソケットに配線するような使い方をしてはいけません。
  • ターゲットデバイスをICソケットに設置しつつも、そこからジャンパー線やソケット(アダプタ)で何らかの機器に接続してあるような使い方をしてはいけません。

書き込み方法
方法1
コマンドライン入力で実行します。
'ftmhvw'の後にHEXファイル名やEEPROMファイル名を指定します。オプションスイッチも一緒に指定します。

方法2
ftmhvw.exeのアイコン/ショートカットアイコンに、HEXファイルやEEPROMファイルをドラッグ&ドロップします。オプションスイッチは別途iniファイルに記述しておきます(後述)。

ヒント/注意
  • ファイル名やオプションスイッチの記述順は特に決まっていません。
  • HEXファイル+EEPROMファイル+ヒューズ設定が統合された形式のファイルには対応していません。
  • HEXファイルやEEPROMファイルはそれぞれ複数のファイルを指定することもできます。
    その際、アドレスが重なった部分があると、後ろのファイルの内容が有効となります。
    例: >ftmhvw file1.eep file2.eep file99.hex
    file1.eepとfile2.eepでアドレスが重なっている部分があると、その部分はfile2.eepの内容が有効になる。
  • Flashメモリ領域に書き込まれたプログラムコードを残したままEEPROMデータを書き込むことはできません。
    これはAVRの高電圧パラレル/シリアルプログラミングの仕様です。
    (*1)
    書き込み済みのプログラムコードに影響を与えずEEPROMデータを書き込みたい場合は、SPIライターを使用して下さい。
(*1)の例
>ftmhvw file1.hex file2.eep …両方ともターゲットデバイスに書き込まれる。期待通りの動作。
>ftmhvw file1.hex の後に >ftmhvw file2.eep …file1.hexは消去され、file2.eepのみが書き込まれた状態になる。
>ftmhvw file2.eep の後に >ftmhvw file1.hex …file2.eepは消去され、file1.hexのみが書き込まれた状態になる。ただしヒューズ設定でEEPROMを保護していた場合、file2.eepは消去されずにfile1.hexが書き込まれる。

オプションスイッチ
オプション 説明
-rp -rp<n>
-re -re<n>
-rf
ターゲットAVRの内容を読み出します。
順に、プログラムコード(Flashメモリの内容)、EEPROMデータ、現在のヒューズ設定。
プログラムコードとEEPROMデータはインテルHEX形式で表示します。ファイルへ保存するにはリダイレクトしてください。例: ftmhvw -rp >flash.hex
プログラムコードとEEPROMデータは1レコード内のデータ数を1〜255byteで指定できます。デフォルトは16byteです。例: ftmhvw -rp32 >flash.hex ※1レコードあたり32byteで出力。
'-rf'の裏技: ftmhvw.exeと同じフォルダにavrsp付属のfuse.txtがあると結果表示に利用します。
-r ターゲットAVRに関する情報を表示します。
署名バイトやメモリサイズなど。
-v 書き込みせず、ベリファイのみ行います。
ターゲットAVRからプログラムコードやEEPROMデータを読み出し、指定したHEXファイルやEEPROMファイルの内容と照合します。
-v- 書き込み後、ベリファイしません。
プログラムコードやEEPROMデータを書き込んだ後、通常は自動的にベリファイしますが、それをスキップします。
-e ターゲットAVRのプログラムコード(Flashメモリの内容)とEEPROMデータを消去します。
ヒューズ設定は影響を受けません。また、ヒューズ設定によりEEPROMデータを保護している場合は消去されません(プログラムコードのみ消去される)。
プログラムコードやEEPROMデータを書き込むとき、ライターソフトが内部で自動的に実行しています。
-fl<b> -fl<h>
-fh<b> -fh<h>
-fx<b> -fx<h>
ヒューズバイトを設定します。
順に、ヒューズLowバイト、ヒューズHighバイト、拡張ヒューズバイト。
<b>は8桁の0/1で指定します。例: -fh11010011 ※'0'がプログラム、'1'がアンプログラム。
<h>は1byteの16進数で指定します。大文字小文字は区別しません。「0x」は付けません。例: -fh2A
'-fl', '-fh', '-fx' とも、値を省略するとそのデバイスのデフォルト値が書き込まれます。とりあえずヒューズバイトをリセットしたい(工場出荷設定に戻したい)場合に便利です。
-l<b> -l<h> ロックビットを設定します。※'l'は小文字のエル。
<b>は8桁の0/1で指定します。例: -l11111100 ※'0'がプログラム、'1'がアンプログラム。
<h>は1byteの16進数で指定します。大文字小文字は区別しません。「0x」は付けません。例: -lF8
-com<n> 本ライターを接続したCOMポート番号を指定します。デフォルトは'-com1'。
本ライターは自動的にCOMポートをスキャンする機能を備えていますが、時間がかかるので、あらかじめCOMポート番号が分かっている場合はオプションで指定した方がよいです。
特に、常に同じUSBコネクタ(仮想COMポート)に本ライターを接続しているのであれば、iniファイル(後述)に記述しておくとよいです。
-8 本ライターを最初から高電圧シリアルライターとして動作させます。
本ライターで8ピンデバイスにアクセスするとき、最初に高電圧パラレルライターとしてアクセスします。アクセスは失敗するので、続けて高電圧シリアルライターとしてアクセスします。このときデバイスへの電源供給を一旦OFF→再度ONとしています。
上記の動作内容が気になるようなら、このオプションで高電圧パラレルライターの動作をスキップしてください。
-w
-w1
-w2
1回の処理が終わった後のキー入力待ちをどうするかです。デフォルトは'-w'。
-w : 常時キー入力待ちをする。
-w1 : エラー発生時のみキー入力待ちをする。
-w2 : 常時キー入力待ちをしない。
アイコンへドラッグ&ドロップする使い方をしていると、実行時にコマンドプロンプトが開き、結果を表示したあと勝手に閉じてしまいます。エラーが発生してもメッセージが読めません。そのためこのオプションを指定し、PAUSE状態にします。
あらかじめコマンドプロンプトを開いてコマンドラインからキー入力する使い方をしている場合は、キー入力待ちをする意味がないので(コマンドプロンプトは勝手に閉じない)、'-w2'指定でよいです。
高度な設定
-t<name> 何らかの理由で署名バイトが読めないターゲットAVRに対し、名前を指定してライターに認識させます。AVRの型番の「AT」を除いた部分を記述します。
例: -ttiny2313 ※ATtiny2313として認識させる。
例: -tmega88P ※ATmega88Pとして認識させる。大文字小文字に注意。

書き込みソフトの使い勝手について
通常、AVRのライターとしてはSPIライターを使用します。高電圧パラレル/シリアルライターは、どちらかというと臨時的に使う場面が多いと思います。本ライターの出番もあまりなさそうなので、書き込みソフトの操作性やUIにはあまり気を配っていません。例えば処理の進行度を示すプログレスバー的な表示はありません。

iniファイル/AVR定義ファイル
ftmhvw.ini
オプションスイッチをftmhvw.iniに記述しておくと、ftmhvw.exe実行時にそれが反映されます。
ftmhvw.iniはftmhvw.exeと同じフォルダに置きます。
iniファイルとコマンドラインに、値が違う同じオプションスイッチがあった場合、コマンドラインの方が有効となります。
例: iniファイルに'-com2'が記述されていて、コマンドラインから'-com4'を指定すると、'-com4'の方が有効となる。

avrinfo.txt
FTHVWがデフォルトで対応しているAVRは下記のものですが、
・ATtiny = 13A/2313/45/85/861A
・ATmega = 8/48/48P/88/88P/168/168P/328P
これ以外にも対応させることができます。追加するAVRの定義を、決められた書式でavrinfo.txtに記述します。
avrinfo.txtはftmhvw.exeと同じフォルダに置きます。

定義するAVRはtinyシリーズ、megaシリーズを想定しています。ただし、それら全てに対応できるわけではありません。
※実際のところ、やってみないと分からない。もし失敗してもAVRが壊れることはない(単に読み書き命令が通用しないだけ)。
※もちろんピンアサインを合わせた上での話。特に5V/12Vのピンを間違えないこと。


書式 下記内容を1件1行で書きます。
AVR名, "署名バイト", Flashページサイズ(word), Flashページ数, EEPROMページサイズ(byte), EEPROMページ数, "ヒューズマスク", "ヒューズデフォルト値", ロックビットマスク, オシレータ校正数
AVR名 AVRの名前。先頭の「AT」は省く。「"」で囲わない。
署名バイト SignatureByteを16進数3バイトで。プレフィックス「0x」は省く。「"」で囲う。
Flashページサイズ(word) データシートに記載されている値を書く。↓例:ATtiny2313の場合
(データシートより抜粋、編集)
Flashページ数
EEPROMページサイズ(byte)
EEPROMページ数
ヒューズマスク ヒューズバイトの有効なビット(何らかの役割が定義されているビット)。
データシートを参照し、有効なビットを'1'、無効なビットを'0'としてマスクパターンを作る。
16進数3バイト。プレフィックス「0x」は省く。並び順は「Lo-Hi-Ex」。「"」で囲う。
ヒューズデフォルト値 ヒューズバイトのデフォルト値。データシートに記載されている。
16進数3バイト。プレフィックス「0x」は省く。並び順は「Lo-Hi-Ex」。「"」で囲う。
ロックビットマスク ロックビットの有効なビット(何らかの役割が定義されているビット)。
データシートを参照し、有効なビットを'1'、無効なビットを'0'としてマスクパターンを作る。
16進数1バイト。プレフィックス「0x」を付ける。
オシレータ校正数 オシレータ校正値の個数。データシートに記載されている。

記述例 ATtiny2313とATmega328Pの定義。
tiny2313, "1E 91 0A", 16, 64, 4, 32, "FF DF 01", "64 DF FF", 0x03, 2
mega328P, "1E 95 0F", 64, 256, 4, 256, "FF DF 07", "62 D9 FF", 0x3F, 1
※ftmhvw.exeはもともと上記2品種に対応しているのでavrinfo.txtに記述する必要はないが、ここでは例として挙げた。

部品について
MAX662Aは5V→12Vの昇圧用ICです。
5Vを12Vに昇圧するには様々なICや回路があります。ここでは、部品数が少なく小型であるMAX662Aをお勧めします。秋月電子では8ピンDIPの形で使いやすくしたモジュールが販売されています。

ACアダプタなどで12V電源を別途用意せず、5Vから昇圧することのメリットは、電源が1つで済むということ自体と、on/offの制御が5Vでできることです。マイコンで高電圧(12V)を受け流す必要がありません。
※ダーリントン接続が不要な分、トランジスタを削減できます。

LEDは動作確認のために付けています。無駄に明るくする必要はありません。一覧に挙げた電流制限抵抗R1,R2の値は、LEDのVF = 2.0V と仮定した例です。


AVR 高電圧パラレルライター 部品一覧 (回路図はここをクリック
部品名 部品番号 個数 参考価格/備考
MAX662Aモジュール U1 MAX662A 1 400円(秋月電子
AVR(マイコン) U2 ATmega88P 1 160円(秋月電子)
デジトラ PNP型 Tr1,Tr2 RN2205 2 10個100円(鈴商
積層セラミックコンデンサ C1,C2 0.22uF [224] 2 10個100円
積層セラミックコンデンサ C5,C6 0.1uF [104] 2 10個100円
電解コンデンサ C3,C4 10uF/25V 2 1個20円
電源LED/動作確認LED LED1,LED2 -- 2 色と形は好みで
LEDの電流制限抵抗 R1 470Ω [黄紫茶金] 1 明るさは好みで
LEDの電流制限抵抗 R2 1kΩ [茶黒赤金] 1 明るさは好みで
USB-シリアル変換モジュール -- FT232Rモジュールなど 1 950円(秋月電子)
ZIFソケット または
丸ピンICソケット
-- -- -- お好みで


◆ ◆ ◆
AVR高電圧パラレルライターの自作例をネットで検索したところ、
(1) LPTポートを使ったもの (ELM/ChaN氏)
(2) USB機能内蔵でブートローダ書き込み済みの市販AVRボードを使ったもの (サイト
の2点しか見つかりませんでした。※2011/12現在
自分はこれまでに、FT232Rモジュールを利用したSPIライターを製作しています。その流れから
(3) USB-シリアル変換モジュールを使ったもの …を製作しました。
モジュールを活用することにより、シンプルでコンパクトなものが出来ました。


(C) 『昼夜逆転』工作室 [トップページへ戻る]
inserted by FC2 system