LoginSignup
19
23

More than 5 years have passed since last update.

素のAVRマイコンに安価に書き込む

Last updated at Posted at 2015-01-02

概要

  • 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 を用いる。

avrdude.conf
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 の末尾に追記
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 の末尾に追記
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 の例
boards.txt
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 から乗り換え予定。

19
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
23