2012年05月05日

guidude: Arduinoに任意のHEXファイルを書き込む。 AVRライタ不要 2012/05-2020/11

guidude: Arduinoに任意のHEXファイルを書き込む。 AVRライタ不要 2012/05-2020/11

guidude: Arduinoに任意のHEXファイルを書き込む。 AVRライタ不要 2012/05-2020/11

はじまり

実は、Arduinoというのは全部含めてArduinoなんだけど、:D
例えば、Arduino Unoボードだけを観察してみれば、
AVRマイコン(ATmega328p) + 基板や部品などという構成になっている。
そうすると、ArduinoというのはArduino IDEからAVRマインコンにHEXファイルを書く
システムと見ることができる。(注3)

じゃあ、任意のHEXファイルをArduino IDE経由でArduinoボードに書けるかというと、
今のところそうはなっていない。

任意のHEXファイルが書き込めれば
Arduinoボードを「一般的なAVRマインコンボード」(注2)としても使える様になるのだ。

AVRライタ不要でArduinoに任意のHEXファイルを書き込める

追加配線や改造も不要。 ArduinoさえあればOK。

原理

Arduino IDE(開発環境)が内部的に使っている「avrdude」というソフトにHEXファイルを渡せば
Arduino IDEと同じ原理でHEXファイルをArduinoボード上のAVRマイコンに書き込めるんです。
従って、この方式ならAVRライタは必要ないのだ。(注1)

改造や追加配線も一切不要で、
当然、そのままで元のArduinoシステムでも問題なく使えるのだ。
メリットだけがある話なんです。:D

もう少し書くと、以下の様なコマンドを発行すればArduinoボードにHEXファイルを書込み可能。

avrdude.exe -c arduino -P COM7 -p m328p -b 115200 -u -e -U flash:w:"blink.hex":a

上はArduino UnoにHEXファイルを書き込むコマンド。
このコマンドをバッチファイル化すれば、ひとまずOKなもののメンドクサイので GUI化してみました。

guidude

yuki-labさんのavrdude-GUI(以下、avrdude-GUI)
http://yuki-lab.jp/hw/avrdude-GUI/
というのがあって、これのソースコードを利用させていただいて作ったのが

guidude

ベタな名前でアレだけど、 まぁ、名前はぶっちゃけ何でもいいんだけどね、
識別できればいいわけで (爆

avrdude-GUIに「Arduino簡単HEX書き込みモード」と言うのを追加してみました。 (外見はちょっと違うけど。かなりか。) (^^;
リストからArduinoボードを選ぶだけでHEXファイルを書き込み可能です。

簡単、簡単 (^^)/

インストールと実行

  1. ダウンロードしたzipファイルを空白や漢字を含まないフォルダに解凍します。
    例えば、c:\guidudeに解凍します。
  2. 上記フォルダ内の「guidude.exe」をダブルクリックで実行します。
    以上です。

デスクトップにショートカット作っておくのが良いかも。

使い方

  • COMポート番号の確認

    • まずは、Arduino IDEを使って正常に動作していることが前提です。
      ArduinoボードとパソコンをUSBケーブルで接続します。

    • Arduino IDEを起動して、上図の様に「COMポート番号」(Port)を確認しておきます。
      この場合、「COM7」となります。
      (普段Arduinoで使っているCOMポートなので、人によって番号が変わります)
      Arduino IDEのシリアルモニタは念のため終了しておきます。(COMが競合しないように)
  • guidudeを起動する

    • 上で調べた「COM7」を下図のマル1の「Port」のところに設定、 (マル1のすぐ右の部分をクリックすれば選択できます)
    • マル2をクリックして「arduino_UNO_led_blink_atmega328p_38400bps.hex」を選択します。
      (このHEXはNanoでも動きます。)

  • 「Arduino 簡単 HEX 書込みモード」を設定する

    • Arudinoボードを以下のプルダウンメニューリストから選択します。

      上の図で0:Uno,Nano ...を選びます。
  • AVRライタなしでArduino UnoにHEXファイルを書く

    • これで準備完了です。 下図の「書込み」ボタンでFlash書き込みを開始します。

    • 書き込みが終われば自動でリセットがかかります
      Arduino Unoボード上のLEDがドキドキすれば成功です。(^^)/
    • TeraTermなどのターミナルツールで「COM7」に38400bps, s1/np で接続すると以下の様に ゆっくり文字列が表示されます。 1から9の数字を押せばLEDの点滅速度が変化します。

ダウンロード (2020/11/02)

動作仕様、外観、使い方等はこのページの説明と若干異なる可能性があります。

  • ver.0.2.4.1 (2020/11) guidude-v0.2.4.1-202011.zip

    • 新機能:
      1. TeraTerm自動再起動に対応
        • Flash書き込み後にTeraTermをTeraTerm終了前と同じCOMポート番号で自動起動します
      2. TeraTerm手動起動ボタンを追加
        • 現在設定されているCOMポート番号でTeraTermを起動します
    • 不具合修正:
      1. TeraTermが自動終了しないバグの修正
      2. ファイルのヒストリー機能のバグ修正
    • 問題点:
      1. 日本語・英語切り替えは動作しない
      2. 一部の表記が英語のまま
      • .NET Framework 2.0の問題
        • guidudeはWindowsXPでも動作する様に.NET Framework 2.0でコンパイルされて来ましたが、 あまりにも古すぎて上記の問題点が発生している様です。
        • したがって次のguidude-ver.0.3.0からは、.NET Framework 4.7に移行予定で、 WindowsXP/Vista上での動作は切り捨てることにしました。

4つの画面

使用状況に応じて4つの画面(上と合わせて)に素早く切り換えることが出来ます。

  • 実行過程の出力画面

上図は見やすいように加工してあります。実際はパス情報が付加されるのでもっと見にくいです。(^^;

guidudeの持つ機能

外観は大きく違いますが、内部機能的には元になったyuki-labさんのavrdude-GUIと だいたい同じというか、ほぼ同じです。(^^; avrdude-GUIでできることは、guidudeでも同様に出来ます。

  • 以下は、guidudeに固有の機能です。
    1. TeraTerm自動終了機能
      Arduino IDEが書込み時(アップロード時)に自動でシリアルモニタを閉じるのと同様な機能ですが、 guidudeは「TeraTerm」を自動終了させます。
      この機能は「通常のUART機能とHEXファイルのアップロード」を同じUARTライン(USB-CDC含む)で使うシステムでは、 非常に便利、と言うか、ほぼ必須の機能と言えると思います。
    2. 日本語メニュー/メッセージ対応
      現在、各種メッセージは大部分がavrd ude-GUIと同じ物が出ますが、徐々に日本語化対応していきます。
    3. 英語/日本語モード切り換え機能
      英語メニュー(メッセージ)に切り換えることが出来ます。
      初回起動時は、表示言語を自動判別します。 (この機能は現在うまく動きません。(^^;)

アンインストール

次の手順です。

  1. guidudeを終了します。
  2. guidudeフォルダごと削除します。
  3. Windows10の場合:
    C:\Users\[ユーザ名]\AppData\Local\<span class=cldg>guidude というフォルダを削除します。
  4. Windows XPの場合:
    C:\Documents and Settings\[ユーザ名]\Local Settings\Application Data\<span class=cldg>guidude というフォルダを削除します。

ライセンスと再配布

  • 現在guidude自身(実行ファイル)はBSDライセンスです。 従って、BSDライセンスに従って自由に転載、再配布することが可能です。
  • その他の同梱ツールについては「License.*」ファイルに記載してあります。 内容物の個別再配布も個々のライセンスに従うことで可能となりますが、ややこしいので、まとめた方が無難と思われます。
  • guidudeの使用や再配布は自己責任でお願いします。

動作確認環境

今時なのでWindows10でしか動作確認していません。 .NET Framework 4.7 を使用しているので Windows7以降なら動作可能と思われます。(未確認)
.NET Framework のバージョン対応表

動作確認環境 (旧版)

  • Windows XP でしか確認していませんが、XPより後のWindowsでもそれなりに動くと思われます。
  • またWindowsの画面設定の諸条件により文字が全部読めなかったりするかもしれません。
    • Windows XP SP3
    • デスクトップスタイル: Windows XP スタイル
    • 配色: 青
    • 画面のDPI: 96DPI
    • フォントサイズ: 標準
    • 注意:Windowsデスクトップのフォントサイズは標準以外だと画面が微妙に変になるので、 フォントは標準を使って下さい。 画面のDPIも同様です。
    • 画面解像度 1280x1024

Windows XPのみ:.NET Framework 2.0のインストール

Windows XP では、guidudeを動作させるために.NET Framework 2.0のインストールが必要です。
以下の2つをインストールするか、
Microsoft .NET Framework Version 2.0 再頒布可能パッケージ(x86)
Microsoft .NET Framework 2.0 日本語 Language Pack (x86)
或いは、「Microsoft update」を実行し選択肢から2つを選択して下さい。

Windows7で実行してみた

Windows7上で実行してみました。 画面解像度1280x1024、後はデフォルト。
本当はメニューの一番左に「Help」が見えるハズ。 あとは問題なさそうな感じ。

Windows8で実行してみた

Windows8 Release Preview(RP版)上で実行してみました。 画面解像度1280x1024、後はデフォルト。 Windows7と違い設計通りメニューの一番左に「Help」がちゃんと見える。
よ〜く見るとフォントの大きさが微妙に違うのがわかる。
あとタイトルフォントがWin7より大きくてタイトル文字の一部が欠けている。orz
あとは問題なさそうな感じ。

めんどくさいので次の版では「Help」を「ツール」の中に移動することにする。:D
タイトル文字はもう一ランク小さくと。

Windows10で実行してみた

大丈夫なので省略 (オイ

ブートローダと書き込み速度のメモ

一時期、「中華製Nanoボードにスケッチ書き込み出来ない問題」(Amazon等)があったみたいだけど、 これは2018年初頭に本家Arduino Nanoのブートローダ(ボーレート57600bps)が「optiboot版(115200bps)」に 変更され、ブートローダ(ボーレート)の異なる2系統のNanoが純正/中華製含めて出回ったために起きた問題。
以下は Arduino1.8.x/hardware/arduino/board.txt を参考に作ったもの。

protocol=arduino
    115200bps:
        optiboot_atmega328.hex
            Arduino Uno
            Arduino Nano
            Arduino Ethernet
            Arduino Uno WiFi
        optiboot_atmega328-Mini.hex
            Arduino Mini w/ ATmega328P
    57600bps:
        ATmegaBOOT_168_atmega328.hex
            Arduino Nano (Old Bootloader)
            Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328P
            Arduino Duemilanove or Diecimila w/ ATmega328P
            AE-ATMEGA-328 MINI 秋月電子製
        ATmegaBOOT_168_atmega328_pro_8MHz.hex
            Arduino Pro or Pro Mini (3.3V, 8 MHz)
            Arduino Fio
            LilyPad Arduino
        ATmegaBOOT_168_atmega1280.hex
            Arduino Mega
    19200bps:
        ATmegaBOOT_168_atmega328_bt.hex
            Arduino BT
        ATmegaBOOT_168_diecimila.hex
                Arduino Duemilanove or Diecimila w/ ATmega168
                Arduino Nano w/ ATmega168
                Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168
        ATmegaBOOT_168_ng.hex
                Arduino Mini w/ ATmega168
ブートローダのHEXの種類とモデル 115200bps 57600bps 19200bps
[ optiboot_atmega328.hex ] - - -
Arduino Uno o
Arduino Nano o
Arduino Ethernet o
Arduino Uno WiFi o
[ optiboot_atmega328-Mini.hex ]
Arduino Mini w/ ATmega328P o
[ ATmegaBOOT_168_atmega328.hex ] - - -
Arduino Nano (Old Bootloader) o
Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328P o
Arduino Duemilanove or Diecimila w/ ATmega328P o
AE-ATMEGA-328 MINI 秋月電子製 o
[ ATmegaBOOT_168_atmega328_pro_8MHz.hex ] - - -
Arduino Pro or Pro Mini (3.3V, 8 MHz) o
Arduino Fio o
LilyPad Arduino o
ATmegaBOOT_168_atmega1280.hex o
Arduino Mega o
[ ATmegaBOOT_168_atmega328_bt.hex ] - - -
Arduino BT o
[ ATmegaBOOT_168_diecimila.hex] - - -
Arduino Duemilanove or Diecimila w/ ATmega168 o
Arduino Nano w/ ATmega168 o
Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168 o
[ ATmegaBOOT_168_ng.hex ] - - -
Arduino Mini w/ ATmega168 o

Arduino Nano(atmega328p版)の場合ブートローダが115200pbs版なのか
57600bpsの「Arduino Nano (Old Bootloader)」版なのかを確認する必要があります。

ダウンロード 旧版

動作仕様、外観、使い方等はこのページの説明と若干異なる可能性があります。

以下はver.0.2.3.32(2020/10)までの内容となります。

  • 実行に必要なファイル
    • 実行には「libusb0.dll」というファイルが必要になりますが、同梱し忘れたので (汗
      Arduinoのインストールフォルダにある「libusb0.dll」を、guidudeの「avrdude」フォルダにコピーしてください。
      あるいは、「Libusb-win32」をインストールすることでも同様の効果があります。
  • 認識済みの不具合
    • Arduinoモード中にavrdude.exeを切り換えると設定が乱れる。 (Arduinoモードのチェックをし直せば直るはず。又は再起動)
    • この問題は次のバージョンで修正予定です。
  • 古い版:

注意

  • (注1) 書き込み可能なFlashサイズについて
    • 書き込もうとするFlashサイズはコンパイル時に確認してください。(HEXファイルのサイズではないです)
    • 例えば、Arduino Uno(atmega328p)の場合、書き込もうとするFlashサイズは30Kbyte以内にしておくのが 無難です。(Bootloaderやavrdude側にリミッタがあるかどうか未確認なので)(あるとは思うけど)
  • (注2) ブートローダ付のボードね
  • (注3) 正確にはHEXファイルに含まれているマイコン用のFlashデータ
  • (注4) avr-gccはArduinoの中に一式含まれているのだ
    • 例えば、Aruduinoのzip版を使っている場合、 c:\arduino-1.8.13\hardware\tools\avr\binに実行パスを通せばMS-DOSコマンドラインから C/C++言語のコンパイルが出来る

参考リンク

次版メモ

  • D&Dで.elfファイルが無視される。Open時も選択肢がないが指定すれば書き込みはできる
  • ヒストリーの文字が長いと切れる場合がある?
  • ヒストリーの数
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(11) | duino系 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
便利なツールなので、使ってみようと思っています。
ターゲットがATMEGA328,PRO Mini3.3V,8MHzなのですが、どう設定すれば書き込めるのでしょうか?
お手数をお掛けしますが、教えて下さい。
Posted by 今木 at 2022年05月11日 11:11
お世話になります。Haitakaです。
先日、avrdudeが、Windowsでビルドした時に、USB/HIDがうまく働かないと書きましたが、その後どうやら解決できたみたいなので、連絡いたします。
パッチデータと、avrdudeのUML図を含んだPDFしか公開しておりませんが、
https://github.com/takachinss1001jp/avrdude-windows-svn1450-
に上げておきました。なお、この元データは
https://github.com/mariusgreuel/avrdude
https://github.com/microtherion/ScratchMonkey になっています。
少し古い2017年の段階でのavrdudeをベースにしていたので、それにパッチを当てております。(そのパッチの副作用も残っているかもしれません。)
よく知られている、cygwinやMSYS2の環境ではなく、Microsoft Visual Studio 2019と、Build Tools for Visual Studio 2017が必要になります。
上のScratchMonkeyWriterのKiCAD(回路図/基板)とavrdude-gui-TPIのデータは、もう少しお時間を下さい。データのpushが完了したら、再び連絡します。
よろしくお願いします。
Posted by Kazuhiro Haitaka at 2021年02月21日 23:56
こんばんは。お忙しい所早速の回答ありがとうございます。
ソースコードの開示をご検討いただけるとのことで、期待してお待ちします。
実は、avrdudessの方も試してみたのですが、これも同じようにガードタイムらしき問題があります。(TPIの時だけで、ISPやHVPPの時は問題ありません。)
千秋ゼミ版のavrdude-guiでは、100発100中ではないのですが、約95%の確率でTPIもうまくいきます。そもそもavrdudeの方がTPIに対する処理が中途半端の様ですし、書き込みソフトもその手順に沿っていないとうまくいかない様です。
お恥ずかしい話ですが、ご連絡のついでにと探した所、僕のTPI専用版は、操作を間違って消してしまったようです。そこでやった概要は、次のUSBaspの手順とほぼ同じです。
https://qiita.com/odaki/items/06ae0462738d275a8c0b
修復が終わり次第、僕のコードも何らかの形で公開いたします。
よろしくお願いします。
Posted by Kazuhiro Haitaka at 2021年02月08日 21:45
こんにちわ
guidudeに添付のavrdudeは
arduino-1.8.13に付属のバイナリをコピペしただけなので
詳細は不明です。
TPIについては対応するAVRを持っていないのでよく分かりません。

avrdudeのソースコードはここから、
savannah.nongnu.org/svn/?group=avrdude
patchについては不明です。
コンパイル方法はこのあたり、
github.com/arduino/avrdude-build-script

他にもavrdudeのGUIクライアントはAVRDUDESSがあります。
日本語環境下では日本語表示になります。
blog.zakkemble.net/avrdudess-a-gui-for-avrdude/
AVRDUDESSのソースコードはここ。
github.com/zkemble/AVRDUDESS

guidudeのソースコードは準備中です。
Posted by audin at 2021年02月06日 10:54
こんにちは、Yuki Labさんのavrdude-guiとその改良版千秋ゼミ版は、以前から便利に利用させていただいていました。
そこに、「マイコン風雲録」さん版があることを知って、この連絡をさせていただくことにしました。
Yuki Labさん(だいぶ前の物なので)は、avrdude 5.6を使うような書き方になっていますが、マイコン風雲録さん配布のものでは、avrdude 6.3になっていて一歩進んでいますね。
僕も、Yuki Labさんの物を元に、TPI専用版というのを製作・評価中なのですが、もし出来たら、ソースコードを公開していただくわけにはいかないでしょうか?(実は、僕の場合はavrdudeがUSBにうまく対応出来なくて困っております。誠にわがままで申し訳ないですが、出来ればavrdudeも、公式版とのpatchデータで良いので一緒に)
また、ついでながら、ちょっと気になることがありましたので、一つだけ書いておきます。そのTPI利用時なのですが、
stk500v2_program_enable(): program enable instruction not defined for part "ATtiny10"とウインドウに表示され、得られたSignatureは、Device signature = 0x656570、Expected signature for ATtiny10 is 1E 90 03となります。よく分かりませんが、Yuki Labさんの原本でもそうなんですが、TPI時のガードタイムの取り方がうまくいっていないのかも知れません。僕の場合は、TPI専用版ですので、おおむねうまくいくのですけどね。
長い書き込みで申し訳ありませんが、ご検討よろしくお願いします。
Posted by Kazuhiro Haitaka at 2021年02月02日 14:08
ATmega2560を追加した新しいバージョンのものをアップロードしたので、それで試してみて下さい。
Posted by audin at 2020年11月02日 20:23
無事ダウンロードできました,ありがとうございます.
こちらで使おうとしているのがArduino MEGA (正確にはATmega2560を搭載した3Dプリンターのマザーボード)なのですが,その場合プログラムするボードはどれを選択すればよいのでしょうか?
他の方法でhexファイルを書き込もうとした際にも「avrdude.exe: stk500_getsync(): not in sync: resp=0x00」という応答なし?のエラーが出てしまいまして.
Posted by 韋駄天 at 2020年11月02日 13:51
こんにちわ
(ダウンロード 旧版) のところから取得できると思います。
Posted by audin at 2020年11月02日 12:36
こんにちは
3Dプリンターのファームウェア書き換えのためhexファイルを直接書き込む方法を探しており,こちらのサイトを見つけました.guidudeのファイルの再アップロードをしていただけませんでしょうか?(「2020/09: ダウンロードファイル全消失のお知らせ」の記事も確認しました.)
Posted by 韋駄天 at 2020年11月01日 22:39
こんばんわ、
USB部分は作ったものではなく、
以下の完成品を載せています。
akizukidenshi.com/catalog/g/gK-01977/
Posted by audin at 2014年03月26日 20:55
はじめまして。

貴方様の製作された、Arduinoボードを、
私も、製作したと、思っています。

USB部分の小基板の製作方法が、解りませんので、
教えて頂けませんか。

以上です。 川内
Posted by 川内英樹 at 2014年03月26日 20:38
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。