[トップページへ戻る]

FT232Rモジュール活用 #3 FT232-AVRライター とにかく導入が簡単

2011年10月
マイコンにプログラムを書き込むにはライター(書き込み器)を使います。
ライターは自作することができます。その際、ハードに合った書き込みソフトが必要です。
今回、FT232Rモジュールを使ったAVRライターと書き込みソフトを作りました。
ソフトは導入の手間がなく、いきなりドラッグ&ドロップで使えるほど簡単です。

シリーズ記事
#1 ドライバのインストールからソフト開発まで
#2 ビットバンモードでLCDモジュールを制御する
#3 FT232-AVRライター とにかく導入が簡単
#4 ビットバンモードで7セグを制御する

秋月電子通商
FT232RL USBシリアル変換モジュール (商品ページ)

2015/12 追記 v1.20に更新。安定性が向上しました。


FT232-AVR Writer
FTAVRW : FT232-AVR Writer
ダウンロードftavrw.zip
FTAVRW v1.20 / FTAVRW-GUI v1.00 同梱
開発環境
Windows7, .NET Framework 4.5

FTAVRWはFT232Rモジュールを使ったAVRマイコンのライターと書き込みソフトです。
AVRライターとしての基本機能はもちろんのこと、常用するに耐える速さと手軽さを備えています。
定義ファイルを記述すれば、ユーザーが自分で書き込み対応AVRを増やせるという特徴があります。
また、HIDaspx(千秋ゼミ)を作るための、最初に使うAVRライターとしても有効です。

書き込み例 (v1.00) HIDaspxライターの
一番早い作り方




読み書きの速さはPC環境にほとんど依存しません。
左(オレンジ)はAtom搭載ネットブックを使用した例です(WindowsXP/SP3)。
1MHz動作のATtiny2313に、プログラムコード2KBとEEPROMデータ128byteを書き込み、ベリファイして3秒。
中(紫)はCore2DuoのPC環境です。1MHz動作のATmega88Pに、同8KBと同512byteで12秒。8MHz動作では5.4秒。
右(紫)は、1MHz動作のATmega328Pに、同32KBと同1024byteで41秒。
【参考】書き込みテスト用のダミーファイル詰め合わせ → dmyhexeep.zip

【予定】コンソールアプリは取っ付きにくい、という人もいると思うので、GUI(いわゆるウインドウが表示されるマウス操作中心のアプリ)を開発予定です。ftavrw.exeに被せて使う形です。
2011/10 追記
FTAVRWにGUIを用意しました。上記ダウンロードファイル「ftavrw.zip」に同梱してあります。
テキストファイルの説明書はありません。オンラインマニュアルをこちらからどうぞ。→FTAVRW-GUI 操作説明書


配線図
ATtiny2313に書き込む例


ATmega88Pに書き込む例


FT232Rモジュールのジャンパー設定
J1 [1-2-3] ターゲットデバイスが3.3V回路ならば、[1-2]をショートする。(I/Oピンが3.3V入出力になる)
ターゲットデバイスが5V回路ならば、[2-3]をショートする。(I/Oピンが5V入出力になる)
※基板上のAVRにISPで書き込むのではなく、ブレッドボード上で単独のAVRに書き込む場合、[2-3]をショートする。
J2 [1-2] FT232Rモジュールの使用法として基本的に常時ショートさせておく。
(FT232Rモジュール自体の電源5VをUSBコネクタから取る)

配線例

RESET/SCK/MISO/MOSI のピンさえ合わせればATmega88やATtiny13などにも書き込めます。
外部クロックで駆動するようヒューズバイトを設定すると、それ以降セラロックや発振器が必要になります。
3.3Vで動作する基板上のAVRに対して書き込む場合、FT232Rモジュールの3.3Vピンから電源を供給すると便利です。
通信線にLEDを付けると動作確認ができてよいです。抵抗は470Ω〜1kΩで適当に。
より安定した動作のため、ターゲットデバイスの近くにパスコンを入れることをお勧めします。

基板で仕上げる場合
配線図


※FT232Rモジュールのジャンパーピンを改造しているので、抵抗の付け方が
配線図と異なります。

青線は基板ウラ面、赤線は基板オモテ面の配線です。グレーの四角枠で基板をカットします。
※上端の細々した線はVCC,GND,I/Oのメモ書きです。配線には関係ありません。

ブレッドボード上で再現するより少し丁寧に作ります。
SCK/MISO/MOSI/RESET線には過電流対策に100Ω程度の抵抗を入れます。
LEDは、SCK/MISO/MOSIの3線に付けても全て同時に点灯しているようにしか見えないので(高速な送受信であるため)、動作確認用としてはSCKに付ければ十分です。

コネクタ(6ピンのピンソケット)の信号の並び順は配線の都合で決めました。準拠した仕様などは特にありません。
FT232Rモジュールの取り付けには24ピン600milのICソケットを使用します。平ピンより丸ピンの方がよいと思います。
ミニUSBコネクタはモジュールの向きを示すために描いたもので、実際に部品を取り付けるわけではありません。

電源は5V/3.3Vをジャンパーピンで切り替えられるようにします。小型スイッチにしても構いません。
ターゲットAVRに電源を供給しない場合は両方ともジャンパーピンを外します。

FT232RモジュールはI/Oピンからの出力を5Vにするか3.3Vにするか、モジュール上のジャンパーピンで設定できます(詳しくは製品付属の説明書を見てください)。ターゲットAVRへ供給する電源電圧に合わせ、I/Oピンの出力電圧も変更しましょう。そうすれば電位差によるAVRの故障を未然に防げます。

使い方とオプションスイッチ
ヘルプ画面
……。見ての通り「雰囲気英語」です。オプションの意味が思い出せればよし。※日本語だと文字数が多くて画面に収まらない。


使い方とオプションスイッチはavrsp.exe(ELM/ChaN氏)を参考にしています。※現時点で私が常用しているライター。
HIDaspxの書き込みソフトはavrsp.exeを拡張したものです。従ってFTAVRW(当ライター)でHIDaspxライターを作る人は、その後戸惑うことなくそちらへ移行できます。※書き込みソフトの使い方やオプション指定がほぼ同じ。

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

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

ヒント/注意
  • ファイル名やオプションスイッチの記述順は特に決まっていません。
  • HEXファイル+EEPROMファイル+ヒューズ設定が統合された形式のファイルには対応していません。
  • HEXファイルやEEPROMファイルはそれぞれ複数のファイルを指定することもできます。
    その際、アドレスが重なった部分があると、後ろのファイルの内容が有効となります。
    例: ftavrw file1.eep file2.eep file99.hex
    file1.eepとfile2.eepでアドレスが重なっている部分があると、その部分はfile2.eepの内容が有効になる。
使い方:コマンド指示
ターゲットAVRからISPケーブルを抜かずに、AVRの動作を開始することができます。いわゆる「ライターを論理的に切り離す」機能です。コマンドラインから「go」コマンドを入力します。例: ftavrw go
動作中のAVRを書き込み待機状態に戻すには「stop」コマンドを入力します。例: ftavrw stop
ただ、「stop」コマンドを実行せずとも、AVRの動作中にいきなりhexファイル/eepファイルをドラッグ&ドロップしても書き込みはできるので、「stop」コマンドはあまり使わないかもしれません。

コマンド 説明
go ライターをターゲットAVRから論理的に切り離し、AVR内のプログラムを実行します。
技術的には、FT232RモジュールのI/Oピンを全てハイ・インピーダンスにしています。
stop ターゲットAVRにリセットをかけ、プログラム書き込みモードに遷移します。
技術的には、FT232RモジュールのI/Oピンのうち、RESET線にLoを出力し、SCK/MISO/MOSI線をハイ・インピーダンスにしています。

オプションスイッチ
オプション 説明
-rp -rp<n>
-re -re<n>
-rf
ターゲットAVRの内容を読み出します。
順に、プログラムコード(Flashメモリの内容)、EEPROMデータ、現在のヒューズ設定。
プログラムコードとEEPROMデータはインテルHEX形式で表示します。ファイルへ保存するにはリダイレクトしてください。例: ftavrw -rp >flash.hex
プログラムコードとEEPROMデータは1レコード内のデータ数を1〜255byteで指定できます。デフォルトは16byteです。例: ftavrw -rp32 >flash.hex ※1レコードあたり32byteで出力。
'-rf'の裏技: ftavrw.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
-l<b> -l<h> ロックビットを設定します。※'l'は小文字のエル。
<b>は8桁の0/1で指定します。例: -l11111100 ※'0'がプログラム、'1'がアンプログラム。
<h>は1byteの16進数で指定します。大文字小文字は区別しません。「0x」は付けません。例: -lF8
-dev<n> PCに接続したFT232Rモジュールのインデックスを指定します。デフォルトは0番。
モジュールを1個しか接続していない場合は0番に確定しています。2個以上接続している場合に、どのモジュールを使用するのか指定します。例: -dev2 ※3番目のモジュール。
-br<n> FT232Rモジュールのボーレートを設定します。デフォルトは28800bps (= 9600 * 3)
<n>はボーレートを直接指定するか、9600bpsの何倍かで指定します。
直接指定の例: -br38400 ※最大115200まで指定できます。
倍数指定の例: -br2 ※-br19200と同じです(9600 * 2 = 19200)。
-w
-w1
-w2
1回の処理が終わった後のキー入力待ちをどうするかです。デフォルトは'-w'。
-w : 常時キー入力待ちをする。
-w1 : エラー発生時のみキー入力待ちをする。
-w2 : 常時キー入力待ちをしない。
アイコンへドラッグ&ドロップする使い方をしていると、実行時にコマンドプロンプトが開き、結果を表示したあと勝手に閉じてしまいます。エラーが発生してもメッセージが読めません。そのためこのオプションを指定し、PAUSE状態にします。
あらかじめコマンドプロンプトを開いてコマンドラインからキー入力する使い方をしている場合は、キー入力待ちをする意味がないので(コマンドプロンプトは勝手に閉じない)、'-w2'指定でよいです。
高度な設定
-pa<nnnn> RESET/SCK/MISO/MOSIと、FT232RモジュールD0〜D7のピンアサインを指定します。
<nnnn>は0〜7を組み合わせた4桁の数字列です。数字の重複は許可しません。
4桁の数字列は左から順にRESETピン、SCKピン、MISOピン、MOSIピンの対応を表します。
例: -pa1042 …RESET=D1、SCK=D0、MISO=D4、MOSI=D2 ※これがデフォルト値(配線図と同じ)。

図示した配線図と異なるピンアサインでライターを使用したい場合、このオプションでピンアサインを指定し、iniファイルに記述しておきます。
-t<name> 何らかの理由で署名バイトが読めないターゲットAVRに対し、名前を指定してライターに認識させます。AVRの型番の「AT」を除いた部分を記述します。
例: -ttiny2313 ※ATtiny2313として認識させる。
例: -tmega88P ※ATmega88Pとして認識させる。大文字小文字に注意。
-ftl<n> FT232Rのレイテンシータイマー。0〜16msの整数で指定します。デフォルトは16ms. 値が小さいほど読み書きが速くなりますが、動作が不安定になります。
※ボーレート、ターゲットAVRの動作クロック、PC環境によります。
-ftw<n> FT232Rの内部処理でWrite直後にReadする際の待ち時間(ms)。0〜20ms程度の整数で指定します。デフォルトは8ms. 値が小さいほど読み書きが速くなりますが、動作が不安定になります。
※ボーレート、ターゲットAVRの動作クロック、PC環境によります。

ボーレート(通信速度)の設定について 「-brオプション」
FTAVRWはAVRとの通信において、送受信タイミングの待ち時間(ディレイ、ウェイト)を指定するのではなく、通信速度そのものを指定することが特徴です。オプションスイッチ'-br'でボーレートを直接指定する他、9600bpsの何倍かで指定することができます。※FT232Rのボーレートのデフォルトが9600bpsなので、単にそれを基準とした。

具体的な通信速度はターゲットとなるAVRの動作クロックによります。
FTAVRWのデフォルトは28800bps(9600*3)で、「-br28800」または「-br3」と指定したのと同じです。
これは1MHz動作のAVRと安定して通信できる速度です。

直接指定
最大115200bpsまで指定できます(9600*12=115200)。指定値は4800単位で丸め込まれます。
4800bps未満を指定することもできますが、そこまでの遅さが必要な場面はないと思います。
指定値の大きさと書き込み時間の短さは比例しません。ある程度大きな指定値で頭打ちになります。

倍数指定
1〜12倍で指定できます(9600〜115200bps)。0倍は1倍指定と同じになります(エラーになりません)。
直接指定に比べて感覚的な指定方法です。

【参考】
AVRの動作クロックが4MHz以上の場合、最大速度(115200bps)で通信できました。
1MHzの場合、28800bps(9600*3)で通信できましたが、38400bps(9600*4)では通信できませんでした。
184kHzの場合、4800bpsないし9600bpsで通信できました。
※いずれも開発環境において、ATtiny2313へ書き込みテストした結果。

2012/08 追記
v1.08で'-ftl','-ftw'オプションを追加しました。開発環境を含む2台のPCにおいてデフォルト値で安定動作しています。しかし他のPC環境では動作が不安定かもしれないので、適宜調整してください。設定値を導き出す計算式のようなものは特にないので試行錯誤してください。
【参考】 v1.08
ATtiny4313への書き込み例
・オプション指定なし(全てデフォルト値)。
・iniファイル指定なし。
・WindowsXP(32bit)/SP3.

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

avrinfo.txt
FTAVRWがデフォルトで対応しているAVRは下記のものですが、
・ATtiny13A/ATtiny2313
・ATmega8/ATmega48/ATmega48P/ATmega88/ATmega88P/ATmega168/ATmega168P/ATmega328P
これ以外にも対応させることができます。追加するAVRの定義を、決められた書式でavrinfo.txtに記述します。
avrinfo.txtはftavrw.exeと同じフォルダに置きます。

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


書式 下記内容を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」。「"」で囲う。
ロックビットマスク ロックビットの有効なビット(何らかの役割が定義されているビット)。
データシートを参照し、有効なビットを'1'、無効なビットを'0'としてマスクパターンを作る。
16進数1バイト。プレフィックス「0x」を付ける。
オシレータ校正数 オシレータ校正値の個数。データシートに記載されている。

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


◆ ◆ ◆
FT232Rモジュールを利用してAVRライター(AVRマイコンの書き込み器)を作りました。
ハードの配線が少なく、ソフトの導入も手間がなく、簡単に使えます。
AVRに興味はあるが、ライター購入費が惜しいので自作したい、しかしソフトの設定が面倒くさい、
…そう思っていた人は是非「FTAVRW」を試してください。


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










HIDaspxライターの一番早い作り方
USB接続の自作AVRライターとして人気のHIDaspx。 自作するにあたり、それ自身にAVR(ライターのプログラムを書き込んだATtiny2313)を使うので、じゃぁそのAVRへはどのライターで書き込むの? という「鶏が先か卵が先か」の問題が生じます。そのため、AVRライターが別途必要になります。そこでFTAVRWを使います。

準備
FTDI社のサイトからFT232Rのドライバをダウンロードし、インストールする。シリーズ記事#1を参照。
FT232RモジュールがPCに認識されていることを確認しておく。※デバイスマネージャを見て確認。

手順1
HIDaspxのファームをダウンロード(千秋ゼミ)、任意のフォルダに解凍する。
「main-00.hex」が必要。00は適当な数字。(\hidspx-2011-0000\bin\firmware\main-00.hex)

手順2
FTAVRWをダウンロード(このページの先頭にあり)、任意のフォルダに解凍する。

手順3
FT232RモジュールとATtiny2313を配線図の通り配線する。ブレッドボード上でOK.
FT232RモジュールをPCのUSBコネクタに接続する。※モジュールが自動的に接続確認を開始する。約5秒待つ。

手順4
ftavrw.exeにmain-00.hexをドラッグ&ドロップする。※オプション指定やiniファイル編集は不要。
ATtiny2313へ書き込みが始まる。数秒で完了する。



手順5
ヒューズバイトを書き換える。HIDaspx回路図の指示は Lo=0xFF, Hi=0xDB, Ex=0x01。
コマンドプロンプトを開き、下記の通り入力する。白文字部分をコピー&ペーストすればOK.
Z:\>ftavrw -flFF -fhDB -fx01
※以降、このATtiny2313の動作にはセラロックや発振器が必要。
 もし手順4,5をやり直す場合はその点に注意。



これでHIDaspxのファームが書き込まれたATtiny2313ができました。
あとはこのATtiny2313を使ってHIDaspxライターの回路図通りハードを製作するだけです。


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