概要
- AVR の安価な書き込み環境を作る
- Arduino IDE と連携させる
FT232RL とは
FT232RLは安価なUSBシリアル変換ICで、秋月等で入手可能。
今回は、同じく秋月で手に入るコネクタ搭載済みモジュールを使う。
書き込みに必要な機材はこのモジュール(950円)と配線だけ。
FT232RL には BitBang モードというものが用意されており
USB を汎用の入出力端子として使うことができる。
今回はこのモードにに対応した avrdude である、avrdude-serjtag を用いる。
avrdude-serjtag を用いた書き込み
avrdude-serjtag
下記サイトより avrdude-serjtag04n をダウンロードする。
FT245R/FT232R で avrdude (2) - すzのAVR研究
接続
FT232RL と AVR の接続は、avrdude.conf に合わせて行う。
avrdude-serjtag の avrdude.conf には、 ft232r0 と ft232r1 という2種類のピン割り当てが記述されている。
本記事では ft232r1 を用いる。
programmer
id = "ft232r1";
desc = "Synchronous BitBang channel 1";
type = ft245r;
miso = 3; # D3/CTS (AVR の miso を FT232RL の CTS に接続。以下同様)
sck = 5; # D5/DSR
mosi = 6; # D6/DCD
reset = 7; # D7/RI
;
接続テスト
配線後、下記コマンドを実行する。
# Windows 以外の環境では .exe 不要
$ avrdude.exe -n -p m328p -C avrdude.conf -c ft232r1 -P ft0
avrdude.exe: BitBang OK
avrdude.exe: pin assign miso 1 sck 2 mosi 0 reset 4
avrdude.exe: drain OK
ft245r: bitclk 230400 -> ft baud 115200
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e950f
avrdude.exe: safemode: Fuses OK
avrdude.exe done. Thank you.
Arduino IDEとの連携
avrdude-serjtag によって書き込みやヒューズの設定は可能だが、せっかくなので
Arduino IDE と連携させたい。
Arduino IDE 標準の avrdude に対して avrdude-serjtag のバージョンが古いため
単純に置き換えると他の書き込み器への対応が怪しくなる。
そのため、標準の avrdude と avrdude-serjtag を GUI 上で切り替えて利用できるように導入し、素の AVR マイコンに書き込む際だけ avrdude-serjtag を呼び出すようにする。
Arduino IDE のインストールディレクトリ (Windows では C:\Program Files (x86)\Arduino) をカレントディレクトリとして、以下の設定を行う。
- hardware/arduino/avr/programmers.txt の末尾に追記
bitbang.name=FTDI Bitbang
bitbang.protocol=ft232r1 -Pft0 -p m328p
bitbang.program.tool=avrdude_ftdi
bitbang.speed=115200
- hardware/arduino/avr/platform.txt の末尾に追記
# avrdude_ftdi
tools.avrdude_ftdi.program.params.verbose=-v -v -v -v
tools.avrdude_ftdi.program.params.quiet=-q -q
tools.avrdude_ftdi.program.pattern="{cmd.path}" "-C{config.path}" {program.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{build.path}/{build.project_name}.hex:i"
tools.avrdude_ftdi.erase.params.verbose=-v -v -v -v
tools.avrdude_ftdi.erase.params.quiet=-q -q
tools.avrdude_ftdi.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m
tools.avrdude_ftdi.bootloader.params.verbose=-v -v -v -v
tools.avrdude_ftdi.bootloader.params.quiet=-q -q
tools.avrdude_ftdi.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i" -Ulock:w:{bootloader.lock_bits}:m
- hardware/arduino/avr/boards.txt の末尾に追記
- 利用する AVR マイコンの種類に合わせる
- 下記は ATmega328P の例
atmega328p.name=Arduino ATmega328p (20MHz)
atmega328p.vid.0=0x2341
atmega328p.pid.0=0x0043
atmega328p.vid.1=0x2341
atmega328p.pid.1=0x0001
atmega328p.upload.tool=avrdude_ftdi
atmega328p.upload.protocol=arduino
atmega328p.upload.maximum_size=32256
atmega328p.upload.maximum_data_size=2048
atmega328p.upload.speed=115200
atmega328p.bootloader.tool=avrdude_ftdi
atmega328p.bootloader.low_fuses=0xFF
atmega328p.bootloader.high_fuses=0xDE
atmega328p.bootloader.extended_fuses=0x05
atmega328p.bootloader.unlock_bits=0x3F
atmega328p.bootloader.lock_bits=0x0F
atmega328p.bootloader.file=optiboot/optiboot_atmega328.hex
atmega328p.build.mcu=atmega328p
atmega328p.build.f_cpu=20000000L
atmega328p.build.board=AVR_naked
atmega328p.build.core=arduino
atmega328p.build.variant=standard
- avrdude-serjtag04n の avrdude.exe を hardware/tools/avr/bin に avrdude_ftdi.exe とリネームして配置 (Win以外は .exe 不要)
- avrdude-serjtag04n の avrdude.conf を hardware/tools/avr/etc に avrdude_ftdi.conf とリネームして配置
ここまで実行して Arduino IDE を起動すると、下記が追加されている
- ボード: Arduino ATmega328P
- 書込装置: FTDI Bitbang
これで、Arduino IDE 上でブートローダやスケッチの書き込みができる。
ブートローダの書き込み
ツールから下記を選択し、ツール > ブートローダを書き込む を実行
- ボード: Arduino ATmega328P
- 書込装置: FTDI Bitbang
ブートローダを書き込む場合は、忘れずに外部クロックを取り付けること。
スケッチの書き込み
ツールから下記を選択し、ファイル > 書込装置を使って書き込む を実行
- ボード: Arduino ATmega328P
- 書込装置: FTDI Bitbang
書き込み後、AVR の RESET 端子と FT232RL の RI を接続している線を外すと
スケッチが実行される。
課題
シリアル通信
FT232RL を AVR とのシリアル通信にも使う場合
一度 USB ケーブルを抜かないと動作しない?
avrdude のバージョン
最新の Arduino IDE に付属する avrdude は 6.0.1 だが
今回利用した avrdude-serjtag04n は 5.10 とだいぶ古い。
Windows 環境で bitbang 対応の avrdude 最新版が正しくビルドでき次第
avrdude-serjtag から乗り換え予定。