Atmel Studio + USBasp + avrdude でAVRに書き込む

Atmel Studio 7.0でビルドしたバイナリをAVRに書き込む方法をまとめておく。

書込みツール

AVRにプログラムを書き込むには、ツール(ハードウェアとソフトウエア)が必要。ハードウェアは安価なUSBaspを使うことにする。USBaspは公式サイトで回路図も含めて公開されている。

USBaspの公式サイトに、対応しているソフトウェアがリストアップされている。ここでは、avrdudeを使う。ダウンロードサイトはこちら。

現時点は、バージョン6.3が最新。Windows用のコンパイル済みファイルは「avrdude-6.3-mingw32.zip」。これをダウンロードしておく。

USBaspのドライバ

インストール

OSはWindows 10(Pro 64bit)で行った。

USBasp本体をPCのUSBポートに差し込めば自動的に認識される。

『デバイス」の中に見えるようになる。しかし、使えるようにはなっていない。

そこで、USBaspの公式サイトで紹介されているZadigの出番。

ここからダウンロートする。インストールは不要。ダウンロードしたzadig-2.4.exeをダブルクリックすればそのまま動く。

こんなふうにUSBaspが認識されるはず(もちろん、USBasp本体を挿しておくこと)。

ちょっと余談。ここには、ドライバがインストールされていないものが出てくる。そのため、一旦、この作業を行った後(ドライバがインストールされた後)では、USBaspは出てこない。ドライバを再インストール(変更)する場合は、Optionsの中の「List All Devices」をチェックすれば、すべてのデバイスが出てくるようになる。

話を戻して、ドライバのインストール。

libusb-win32 (v 1.2.6.0)を選び、「Install Driver」を押す。これでドライバのインストールが始まるが、少々時間がかかる。「応答なし」になったりしてちょっと不安になるけれど、そのまま待つ。手元のPCで数十秒程度だったかな?

これでドライバのインストールは終了。

「ドライバーは使用できません。」の表示が消えている。

動作確認

念のため、ドライバが動作することを確認しておく。

  1. 先にダウンロードしておいたavrdudeのZIPを展開する。
  2. コマンドプロセッサ(コマンドプロンプト)を起動し、avrdudeを展開したディレクトリに移動する。
  3. avrdude.exeを実行する(引数なし)。
  4. 問題がなければ、avrdudeのヘルプが表示される。

    問題がある(ドライバがインストールされていない・間違っている)場合は、avrdudeが動作せず、エラーが表示される。
  5. USBaspが認識されるか確認しておく。”avrdude.exe -c usbasp”と入力すると、次のように表示される。

    これは本来はAVRのデバイスを指定するようにとのエラーメッセージではあるけれど、USBaspが認識されていることの確認には使える。

ここまで見ておけば、多分大丈夫。

このような感じで、avrdudeはコマンドラインで使用できる。以下、参考になるサイト。

Atmel Studioへのavrdudeの組込み

avrdudeはコマンドラインで使えるとは言え、やっぱり面倒。そこで、avrdudeをAtmel Studio 7.0の中から使えるように設定する。「使えるように」とは言っても、本格的に連携して何かができるようにと言うようなものではなくて、Atmel Studioから見て外部ツールとして起動できるようになるだけだけど。それでも、ワンタッチでプログラムの書き込みができるようになるので便利。

Atmel Studio 7.0自体のインストールはこちらの記事。

AVRのお勉強の続き。 開発環境Atmel Studio 7をインストールする。古い資料などを見ると、「AVR Studioと、別途フリー...

では、Atmel Studio 7.0にavrdudeを組み込む方法。

  1. Atmel StudioのToolsタブの「External Tools…」を開く。
  2. ここに必要なコマンド等を書き込む。

    • Titleは自分でわかり易い名前。AVRのデバイスごとに登録することになるのでそれを踏まえた名称や、プロジェクトに対応するものにすると良いだろうと思う。ここでは、デバイス名にしておく。
      USBasp ATtiny85
    • Commandはavrdude.exeの場所をフルパスで記入する(インストールした環境に合せて変更する)。
      D:\tools\AtmelStudio\avrdude-6.3-mingw32\avrdude.exe
    • Argumentsはavrdudeに与える引数。次の通り。
      -p t85 -v -v -c usbasp -P usb -U flash:w:"$(ProjectDir)Debug\$(TargetName).hex":i
      • -pはデバイスの指定。ATtiny85の場合は「t85」。その他のデバイスの場合は、上のavrdude + USBaspの動作確認でで表示されたものを参考に。
      • -vはメッセージのレベル。数が多ければ多いほど実行時に様々なメッセージが表示される。ここでは二つ付けている。お好みで。
      • その他は上の通り。コピペでOK。
    • Use Output windowにチェックを入れる。これでavrdudeからのメッセージがAtmel Studio内に表示される。チェックを入れないと別のコンソールが立ち上がってメッセージが表示されるが、avrdudeの終了とともにそのコンソールは自動で閉じられるので、実質、読めない。

      これで「OK」を押せば、設定完了。Toolsタブ内に登録したコマンドが見える。

      このまま選択すれば、即座に起動する。

追加も同様。Toolsタブの「External Tools…」を開く。

「Add」を押す。

後は、上と同じ手順。ATtiny13Aの場合は、-pで指定するデバイス名は「t13」(aは付かない)。必要に応じて、「Move Up」、「Move Down」で並び順を調整する。

Toolsタブ内に登録したコマンドが表示される(追加されている)。

使い方

まずは、Atmel Studioでプロジェクトをビルドする(当然、エラーがないように)。

続いて、ターゲットデバイスとUSBaspを接続する。

接続(向き)に充分注意して。

後は、上に書いた通り、Toolsタブ内に出てくるものを選ぶだけ。

これですぐに起動される。

(上の通りに「Use Output window」にチェックを入れていれば)Atmel Studio内に動作時のメッセージが表示される。

もし、下のようにエラーになってしまった場合は、もう一度書き込んでみる。それでもダメな場合は、USBaspを一旦PCのUSBポートから抜いて、挿し直す。いまのところ、これで解決している。

別のツール(ソフトウェア)

USBaspはavrdude以外のツールでも使用できる。手元で試したものでは、PROGISPでも動いた(書き込めた)。

ただし、PROGISPの公式サイトは消滅しているようなので、ここでは「動いた」という事実の紹介に留める。「progisp 使い方」や「progisp download」などで検索すると情報は見つかるはず。

スポンサーリンク
スポンサーリンク

コメント

  1. JJ1SWI 香川 より:

    「AVR最初の一歩」のキットのプログラムを書き換えてみました。
    書き込み時「もし、下のようにエラーになってしまった場合は」のポップアップはでないものの、これと同じ

    Would you like this fuse to be changed back? [y/n]

    の入力待ちとなり書き込みを終了できません。
    なんどやっても、USBを差し直しても同じです。

    「Use Output window」のチェックを外すと一瞬コマンド窓が出て閉じられ、書き込みは正常に行われました。

    コマンドラインからの実行でも [Y/N] の入力プロンプトもなく、正常に書き込めました。

    (プログラムはこのブログにあったキット付属のAVRのソース?の、LED信号を反転(排他的論理和)の1行のみをコメントアウトしたもので試しています。)

    • jh4vaj より:

      すみません。私のところではその現象は起きていないです。

      Atmel Studioからのavrdude呼び出しでは上手く行かず、直接叩くとOKだという現象はJI1PVVさんのブログで報告されています。

      http://ji1pvv.cocolog-nifty.com/blog/2019/09/post-982905.htm…

      しかし、これは別のAVR(ATtiny13A)を使った場合ですので、別の話かもしれません。

      試しに、ATtiny85をお送りしましょうか?

      • JJ1SWI 香川 より:

        JI1PVVさんのブログ、見ました。
        石も違いますし、こちらでは一回直接叩いてOKとなってもAtmel StudioはNGなのでやはり別の現象のようですね。
        AVRは買い足すつもりでいるので送付の必要はありません。

        ありがとうございました。

        • jh4vaj より:

          承知しました。AVRを換えた際の結果を教えてもらえると助かります。

  2. JJ1SWI 香川 より:

    ATTINY85を2個入手し、試してみましたが同じでした。

    ただ「Use Output window」のチェックを入れなければAtmel Studioでも書き込めました。
    このとき「Close on exit」のチェックを外せばコマンド窓が自動的にとじないのでメッセージは読めます。

    USBaspのファームのアップデートを促すメッセージがでているので、アップデートしてみない気もしますが。。。。。(汗)

    なお13Aでも試してみましたが、全く同じですね。

    • jh4vaj より:

      変化なしですか。USBasp自体に原因があるのかもしれませんね。迷惑でなければ、USBaspを送りますので送り先をお知らせ下さい(Twitter DMで)。違いがあるか見てみたいです。

      USBaspのアップデートはなぜか上手く行きませんでした。失敗すると二度と使えなくなり…。二つ潰しました^^;