2012年05月05日

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

guidude: Arduinoに任意のHEXファイルを書き込む。 AVRライタ不要 2012/05-2020/11
* はじまり
* AVRライタ不要でArduinoに任意のHEXファイルを書き込める
* guidude
* インストールと実行
* 使い方
「Arduino 簡単 HEX 書込みモード」を設定する
* ダウンロード(2020/11/02)
* 4つの画面
* guidudeの持つ機能
   TeraTerm自動終了機能:
   日本語メニュー/メッセージ対応:
   英語/日本語モード切り換え機能:
* アンインストール
* ライセンスと再配布
* 動作確認環境
* 動作確認環境 旧版
    * Windows XPのみ:.NET Framework 2.0のインストール
    * Windows7で実行してみた
    * Windows8(RP)で実行してみた
    * Windows10で実行してみた
* ブートローダと書き込み速度のメモ
(* ダウンロード 旧版)
* 参考リンク

* はじまり
実は、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。

HEXファイル:
HEXファイルの入手方法は、例えば
Arduinoのavr-gcc環境、(注4)
Great Cow Basic
AVR Studio環境
mikroC, mikroBasic, mikroPascalの無料版
MPLAB X IDE
等でコンパイル、生成することが可能。

原理:
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」 ベタな名前でアレだけど、 まぁ、名前はぶっちゃけ何でもいいんだけどね、識別できればいいわけで (爆 guidude-main.gif avrdude-GUIに「Arduino簡単HEX書き込みモード」と言うのを追加してみました。 (外見はちょっと違うけど。かなりか。) (^^; Arduino UnoにHEXファイルを書き込むときの設定。 リストからArduinoボードを選ぶだけでHEXファイルを書き込み可能です。 簡単、簡単 (^^)/ * インストールと実行 1,ダウンロードしたzipファイルを空白や漢字を含まないフォルダに解凍します。   例えば、c:\guidudeに解凍します。 2,上記フォルダ内の「guidude.exe」をダブルクリックで実行します。 以上です。 デスクトップにショートカット作っておくのが良いかも。 * 使い方 用意する物:   例として以下のArduinoボードを使います。 Arduino Uno (atmega328p) または、互換ボード AE-ATmega(atmega328p/16MHz) Arduino: 秋月のAE-ATmega基板 2011/08 COMポート番号の確認:   まずは、Arduino IDEを使って正常に動作していることが前提です。   ArduinoボードとパソコンをUSBケーブルで接続します。   arduino-ide-port-2020.png 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でも動きます。) guidude-start-up-2020.png 「Arduino 簡単 HEX 書込みモード」を設定する Arudinoボードを以下のプルダウンメニューリストから選択します。 guidude-simple-list-0.2.4.1-2020.png AVRライタなしでArduino UnoにHEXファイルを書く: これで準備完了です。 下図の「書込み」ボタンでFlash書き込みを開始します。 guidude-write-2020.png 書き込みが終われば自動でリセットがかかります。 Arduino Unoボード上のLEDがドキドキすれば成功です。(^^)/ TeraTermなどのターミナルツールで「COM7」に38400bps, s1/np で接続すると以下の様に ゆっくり文字列が表示されます。 1から9の数字を押せばLEDの点滅速度が変化します。 guidude-teraterm.gif * ダウンロード (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-small.gif guidude-tiny.gif guidude-vtl.gif 実行過程の出力画面 guidude-output.gif 上図は見やすいように加工してあります。実際はパス情報が付加されるのでもっと見にくいです。(^^; * guidudeの持つ機能 外観は大きく違いますが、内部機能的には元になったyuki-labさんのavrdude-GUIと だいたい同じというか、ほぼ同じです。(^^; avrdude-GUIでできることは、guidudeでも同様に出来ます。 以下は、guidudeに固有の機能です。 TeraTerm自動終了機能: Arduino IDEが書込み時(アップロード時)に自動でシリアルモニタを閉じるのと同様な機能ですが、 guidudeは「TeraTerm」を自動終了させます。 この機能は「通常のUART機能とHEXファイルのアップロード」を同じUARTライン(USB-CDC含む)で使うシステムでは、 非常に便利、と言うか、ほぼ必須の機能と言えると思います。 残念ながらWindows10の場合,TeraTermの終了が1度空振ります。 もう一度書き込みボタンを押せば終了後書き込み開始します。 でも1回でうまく行く時もある。 終了させたら今度は起動ボタンが欲しくなりますが、今後のバージョンで追加予定。 日本語メニュー/メッセージ対応: 現在、各種メッセージは大部分がavrdude-GUIと同じ物が出ますが、徐々に日本語化対応していきます。 英語/日本語モード切り換え機能: 英語メニュー(メッセージ)に切り換えることが出来ます。 初回起動時は、表示言語を自動判別します。 * アンインストール 次の手順です。 1,guidudeを終了します。 2,guidudeフォルダごと削除します。 3, Windows10の場合: C:\Users\[ユーザ名]\AppData\Local\guidude というフォルダを削除します。 Windows XPの場合: C:\Documents and Settings\[ユーザ名]\Local Settings\Application Data\guidude というフォルダを削除します。 以上です。 * ライセンスと再配布 現在guidude自身(実行ファイル)はBSDライセンスです。 従って、BSDライセンスに従って自由に転載、再配布することが可能です。 その他の同梱ツールについては「License.*」ファイルに記載してあります。 内容物の個別再配布も個々のライセンスに従うことで可能となりますが、 ややこしいので、まとめた方が無難と思われます。 guidudeの使用や再配布は自己責任でお願いします。 * 動作確認環境 今時なのでWindows10でしか動作確認していません。 .NET Framework 4.7 を使用しているので Windows7以降なら動作可能と思われます。(未確認) .NET Framework のバージョン対応表 * 動作確認環境 (旧版) Windows XP でしか確認していませんが、XPより後のWindowsでもそれなりに動くと思われます。 またWindowsの画面設定の諸条件により文字が全部読めなかったりするかもしれません。 1、Windows XP SP3 デスクトップスタイル:  Windows XP スタイル 配色: 青 画面のDPI: 96DPI フォントサイズ: 標準 注意:Windowsデスクトップのフォントサイズは標準以外だと画面が微妙に変になるので、    フォントは標準を使って下さい。 画面のDPIも同様です。 2、画面解像度 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」が見えるハズ。 あとは問題なさそうな感じ。 guidude-win7.gif * Windows8で実行してみた Windows8 Release Preview(RP版)上で実行してみました。 画面解像度1280x1024、後はデフォルト。 Windows7と違い設計通りメニューの一番左に「Help」がちゃんと見える。 よ??く見るとフォントの大きさが微妙に違うのがわかる。 あとタイトルフォントがWin7より大きくてタイトル文字の一部が欠けている。orz あとは問題なさそうな感じ。 guidude-win8.gif めんどくさいので次の版では「Help」を「ツール」の中に移動することにする。:D タイトル文字はもう一ランク小さくと。 * Windows10で実行してみた 大丈夫なので省略 (オイ * ブートローダと書き込み速度のメモ 一時期、「中華製Nanoボードにスケッチ書き込み出来ない問題」があったみたいだけど、 これは2018年初頭に本家Arduino Nanoのブートローダが115200bps対応の「optiboot版」に 変更されブートローダの異なる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
* ダウンロード 旧版 動作仕様、外観、使い方等はこのページの説明と若干異なる可能性があります。 guidude-simple-list-old-2020.png 以下はver.0.2.3.32(2020/10)までの内容となります。 実行に必要なファイル:  実行には「libusb0.dll」というファイルが必要になりますが、同梱し忘れたので (汗  Arduinoのインストールフォルダにある「libusb0.dll」を、guidudeの「avrdude」フォルダにコピーしてください。  あるいは、「Libusb-win32」をインストールすることでも同様の効果があります。 認識済みの不具合: Arduinoモード中にavrdude.exeを切り換えると設定が乱れる。 (Arduinoモードのチェックをし直せば直るはず。又は再起動)  この問題は次のバージョンで修正予定です。 古い版: ver.0.2.3.32 (2012/06) guidude-v0.2.3.32-201206.zip 変更点: (1) ファイルオープン時のヒストリー機能追加。 (2) Arduino Leonard を簡単リストに追加。(動作は未確認) ver.0.1.2.31 (2012/05) guidude-v0.1.2.31-201205.zip 最初の版 (注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++言語のコンパイルが出来る。 Arduinoのインストーラ版を使っている場合、 参考リンク: avrdude-GUI (yuki-lab.jp Version) ArduinoISPを汎用AVRライタとして使う(2) 外付けAVRライタ無しでBootloaderを書き込む 秋月ATMEGA168/328用IOボードでArduino 千秋ゼミ avrdude00
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(10) | duino系 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
はじめまして。

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

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

以上です。 川内
Posted by 川内英樹 at 2014年03月26日 20:38
こんばんわ、
USB部分は作ったものではなく、
以下の完成品を載せています。
akizukidenshi.com/catalog/g/gK-01977/
Posted by audin at 2014年03月26日 20:55
こんにちは
3Dプリンターのファームウェア書き換えのためhexファイルを直接書き込む方法を探しており,こちらのサイトを見つけました.guidudeのファイルの再アップロードをしていただけませんでしょうか?(「2020/09: ダウンロードファイル全消失のお知らせ」の記事も確認しました.)
Posted by 韋駄天 at 2020年11月01日 22:39
こんにちわ
(ダウンロード 旧版) のところから取得できると思います。
Posted by audin at 2020年11月02日 12:36
無事ダウンロードできました,ありがとうございます.
こちらで使おうとしているのがArduino MEGA (正確にはATmega2560を搭載した3Dプリンターのマザーボード)なのですが,その場合プログラムするボードはどれを選択すればよいのでしょうか?
他の方法でhexファイルを書き込もうとした際にも「avrdude.exe: stk500_getsync(): not in sync: resp=0x00」という応答なし?のエラーが出てしまいまして.
Posted by 韋駄天 at 2020年11月02日 13:51
ATmega2560を追加した新しいバージョンのものをアップロードしたので、それで試してみて下さい。
Posted by audin at 2020年11月02日 20:23
こんにちは、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
こんにちわ
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
こんばんは。お忙しい所早速の回答ありがとうございます。
ソースコードの開示をご検討いただけるとのことで、期待してお待ちします。
実は、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
お世話になります。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
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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