title0a.gif

Memorandumの小部屋

本ページは金銭授受を伴う行為を含むAuctionや商用Web Pageからの無断リンク・無断参照を禁じます。
無断リンク・無断参照が判明した時点で然るべき処置をとらさせて頂きます。


にわとりたまご! Arduino用ブートローダの巻

 このWebページはArduino IDEのターゲットとなるワンチップマイコンにブートローダを書き込んだ経緯を記録として残した個人的なメモです。 当方にしか役立たない情報です。 その点、ご了承願います。 


− 目次 −

1.はじめに

2.ブートローダ書き込み(ハードウエア)

3.ブートローダ書き込み(ソフトウエア)

4.Arduino UNO R3互換機によるブートローダ書き込み

5.Avrdude
 


1.はじめに

 まじめに(?)Arduinoに取り組み始めた初期のメモ書きです。 実は「ブートローダ書き込み済みATMEGA328P−PU」を含んだキット類を所有していたのです 。 このメモ書きを作成した時点ではその事実に気付いていませんでした・・・・・。

 aitendo 「2022お楽しみ福袋」に含まれていた「あちゃんでいいの (2022お楽しみ福袋) (AKIT-ADINO)」を組み立ててみようと思ったのが始まりです。 2013年頃からArduino関連の図書や部品・キット・機器を集め始めていましたが、マイコン関連は「CLASSIC TV GAME / MK121 NTSC (TVテニスゲーム)」・「電池ボックス電子工作(その6)   どこでもブロック崩し」などで興味を持ったPICマイコンやRaspbery関連に時間を取られており、Arduino関連に着手することはありませんでした。

 今回、短時間でコンテンツを作成しようと部品点数の少ない「あちゃんでいいの (2022お楽しみ福袋) (AKIT-ADINO)」の組み立てに着手しました。 基板自体の組み立てはすぐにできましたが、ATMEGA328P−PUにプログラムを 書き込むところで手が止まりました。 これまでArduino関連の図書は簡単に目を通していましたが、応用例ばかりで実際の立上げに関してはまじめに読まず理解していなかったのです。 今回 、まじめに情報収集すると下記の2点に関する記載を多く目にしました。

 こんな基本的な事すら理解していなかったのです。 (知識のないことを年齢のせいにする今日この頃です。 新しい情報に接した際に一瞥で内容を理解することが若い頃のように出来なくなっているのは事実です。) 上記を理解したうえでブートローダを 書き込もうにもブートローダ書き込み済みの「Arduino UNO」や「Arduino UNO R3」を所有していません。 「Arduino UNO R3」互換基板は所有していますが、価格比較をして安価なブートローダを 書き込んだATMEGA328P−PU未実装基板を購入していました。 ATMEGA328P−PUも複数所有していました、ケチケチして何も書き込まれていないATMEGA328P−PUを購入していました。

 さて、これは困りました。 ブートローダを書き込むためには「Arduino UNO R3」(互換基板)を手に入れないといけないのですね。 あれ?ATMEGA328P−PUを用いた「Arduino UNO R3」を立ち上げるためには、 ブートローダが書き込まれたATMEGA328P−PUを実装した「Arduino UNO R3」が必要?? ATMEGA328P−PUが「たまご」ならば「Arduino UNO R3」は「にわとり」です。 「にわとり」を得るためには「たまご」が必要ですが、「にわとり」 に実装する「たまご」はありません!!! ここで「にわとりたまご」状態に陥りました。

 

2.ブートローダ書き込み(ハードウエア)

 とりあえず安価な「Arduino UNO R3」(互換基板)を入手するかブートローダ書き込み済みのATMEGA328P−PUを入手しようかなと思いショップで価格比較をしていると、プログラマを使ってブートローダを書き込むとの情報を目にしました。 「AVR ISP」、「「AVR ISPシールド」、「USBasp」などの他に「AVRISPmkU」の記載がありました。 「AVRISPmkU」はどこかで見た記憶があります。 早速、保管用段ボール箱置場の奥を探して見つけ出しました。 この「AVRISPmkU」は2015年に購入していました。 この度、やっと日の目を見ることになりました。

 

【 「AVRISPmkU」パッケージ外観 】

 

【 「AVRISPmkU」本体外観 】

 

【 「AVRISPmkU」ISPコネクタ外観 】

 

 ATMEGA328P−PUに書き込みをするためのターゲットとして「ブートローダライタキット (SBW-S-Z)」を利用しました。 これは、いつかArduinoを使おうと思って購入していたものです。  もう少し詳しくいうならば、2017年にaitendo直営店の店頭で、「そうか、これを使えばArduinoマイコンのプログラムを書き込みできるのか、やり方はわからないけれどもゼロプレッシャーICソケット付きで500円なので、とりあえず買っておこう。」と、仕様も使い方もわからず衝動買いしたキットです。 この時、「AVRISPmkU」購入済であることは忘れていたと思います。  

 

【 「ブートローダライタキット (SBW-S-Z)」パッケージ外観 】

 

【 「ブートローダライタキット (SBW-S-Z)」基板完成外観 】

 

 書き込み時の外観を下記に掲載します。

 

【 AVRISPmkUブートローダライタキット (SBW-S-Z)による書き込み 】

 

 残念ながら「AVRISPmkU」のISPコネクタ を直接「ブートローダライタキット (SBW-S-Z)」に接続することができません。 このため、接続用の専用ケーブルも自作しました。 下記の回路となるように接続用ケーブルを製作しました。

 

【 AVRISPmkUブートローダライタキット (SBW-S-Z)接続ケーブル外観 】

 

上記画像をクリックすると原寸大回路図をダウンロード/閲覧できます。

【 AVRISPmkUブートローダライタキット (SBW-S-Z)接続ケーブル回路図 】

 

 「AVRISPmkU」のISPコネクタにあるVCCピン はターゲットデバイスの電圧検出用です。 「AVRISPmkU」からターゲットデバイスへの電源供給はでき ないため、別途DCジャックを追加して「ブートローダライタキット (SBW-S-Z)」へ5Vdcの電源供給 できるようにしました。

 

3.ブートローダ書き込み(ソフトウエア)

 ハードウエアの準備が済みましたので、つぎはソフトウエアの準備です。  本Wab公開時点では、「AVRISPmkU」をMicrochip Studioで利用することになります。  実は一番最初はMicrochip Studio を用いてブートローダの書き込みをしました。 その際、ブートローダのHEXファイルを入手するためにArduino IDEをダウンロードしたり、Fuse設定をしたりなど結構めんどうな手順を経て 書き込みをしました。 その後、Arduino IDEのみでブートローダを書き込みできることを知り、その後はArduino IDEのみでブートローダを書き込みしました。 (最後に記載していますが、結局はMicrochip Studioの方が良さそうです。)

 以下にArduino IDEによるブートローダ書き込み手順とMicrochip Studioによるブートローダ書き込み手順を下記に記載します。

 

Arduino IDEによるブートローダ 書き込み

 Arduino IDEのメニューバーで「ツール」→「ボード:”XXXXX”」を選択してボードマネージャを開きます。 ここで「 Arduino Uno」を選択します。

【 ボード設定 】

 

 Arduino IDEのメニューバーで「ツール」→「書き込装置:”XXXXX”」を選択して書き込装置選択を開きます。 ここで「 AVRISP mkU」を選択します。

【 書き込装置設定 】

 

 Arduino IDEのメニューバーで「ツール」→「ブートローダを書き込む」をクリックするとブートローダの書き込みが開始されます。

【 「ブートローダを書き込む」選択 】

 

【 ブートローダ書き込中 】

 

【 ブートローダを書き込み完了 】

 

 

Microchip Studioによるブートローダ 書き込み

Microchip Studioのメニューバーで「TOOL」→「Device Programming」を選択して「Device Programming」を開きます。

 ここでTOOL「AVRISP mkU」、Device「ATmega328P」を選択し て「Apply」ボタンを押します。

 

【 「Apply」ボタンを押した後 】

 

 次に「Fuses」ウィンドウで「Fuse Register」の値を設定してProgramボタンを押しました。 今回はEXTENDED:0xFC、HIGH:0xDA、LOW:0xDFとなるように設定 しました。 この設定ではATMEGA328P−PUを電源電圧5Vで動作させることになります。

 

【 Program FUSES 】

設定内容

BODLEVEL = 4V3
RSTDISBL = [ ]
DWEN = [ ]
SPIEN = [X]
WDTON = [ ]
EESAVE = [ ]
BOOTSZ = 1024W_3C00
BOOTRST = [X]
CKDIV8 = [ ]
CKOUT = [ ]
SUT_CKSEL = EXTXOSC_8MHZ_XX_16KCK_14CK_0MS

EXTENDED = 0xFC (valid)
HIGH = 0xDA (valid)
LOW = 0xDF (valid)

 

 なお、「Fuses」ウィンドウを選択した時点で「Device Information」が更新されます。

 

【 Device Information  】

 

 次に「Lock bits」ウィンドウで「Lock bit Register」の値 を設定してProgramボタンを押しました。 今回はLOCKBIT:0xCFとなるように設定しました。

 

【 Program Lock bits 】

設定内容

LB = NO_LOCK
BLB0 = NO_LOCK
BLB1 = LPM_SPM_DISABLE

LOCKBIT = 0xCF (valid)

 

 次にブートローダ用HEXファイルを書き込みます。 Arduino IDEをexeファイルでインストールすると「C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\atmega\」フォルダに格納されています。 

 

【 ブートローダ用HEXファイル選択 】

 

【  ブートローダ用HEXファイル設定 】

 

 Flash段の「Program」ボタンを押すとブートローダの書き込みが始まります。

【  ブートローダ用書き込み完了 】

 

 

4.Arduino UNO R3互換機によるブートローダ書き込み

 ここまでで、やっとブートローダの書き込み済みATMEGA328P−PUを手に入れることができました 。 これで「にわとりだまご」の「たまご」から「にわとり」を作ることができます。 Arduino UNO R3互換機「びんぼうでいいの (U3R)」 にブートローダ書き込み済みATMEGA328P−PUを実装して、「ブートローダライタキット (SBW-S-Z)」を用いてブートローダを 書き込みました。

 まず、ハードウエアです。 Arduino UNO R3互換機「びんぼうでいいの (U3R)」 と「ブートローダライタキット (SBW-S-Z)」を下記のように接続しました。

 

【 びんぼうでいいの (U3R)ブートローダライタキット (SBW-S-Z)による書き込み 】

 

 「びんぼうでいいの (U3R)」 と「ブートローダライタキット (SBW-S-Z)」を直接接続することができないため、接続用の専用ケーブルも自作しました。 下記の回路となるように接続用ケーブルを製作しました。

 

上側 : 状態表示用ケーブル
下側 : ISP用・電源用ケーブル

【 びんぼうでいいの (U3R)ブートローダライタキット (SBW-S-Z)接続ケーブル外観 】

 

上記画像をクリックすると原寸大回路図をダウンロード/閲覧できます。

【 びんぼうでいいの (U3R)ブートローダライタキット (SBW-S-Z)接続ケーブル回路図 】

 

 次にソフトウエアです。 今回はArduino IDEによりブートローダを書き込みました。

Arduino UNOとArduino IDEによるブートローダ 書き込み

 最初にArduino UNO R3互換機「びんぼうでいいの (U3R)」 (以下、Arduino UNOと記載します。)をISPとして動作させる必要があります。 そのためArduino UNOにISPとして動作させるスケッチを書き込みます。
 Arduino IDEのメニューバーで「ファイル」→「スケッチ例」→「11.ArduinoISP」を選択し ISP用のスケッチを書き込みます。

【 「11.ArduinoISP」選択 】

 

 Arduino IDEのメニューバーで「ツール」→「書き込装置:”XXXXX”」を選択して書き込装置選択を開きます。 ここで「 AVRISP mkU」を選択します。

【 ArduinoISPのコンパイル・書き込み 】

 

【  ArduinoISPのコンパイル・書き込み完了 】

 Arduino IDEのメニューバーで「ツール」→「ブートローダを書き込む」をクリックするとブートローダの書き込みが開始されます。

【 「ブートローダを書き込む」選択 】

 

【 ブートローダ書き込中 】

 

【 ブートローダを書き込み完了 】

 

 

 これで「にわとりたまご」は解決してブートローダ書き込みATMEGA328P−PUをいくつも入手することができました。 とても簡単です。 おしまいおしまい。

 あれ? Arduino UNOとArduino IDEによるブートローダ書き込みはできましたが、「Fuse Register」と「Lock bit Register」の設定はどうなっているの?

 

5.Avrdude

 この疑問は「AVRDUDE」(以下、Avrdudeと表記)を用いると解決するとのことでした。 Arduino IDEも内部でAvrdudeを利用していると記載がありました。 もともとのAvrdudeとは「Microchip社製AVRマイクロコントローラのオンチップメモリをダウンロードおよびアップロードするためのプログラム。」とのことでした。

 

AVRDUDE - AVR Downloader Uploader - is a program for downloading and uploading the on-chip memories of Microchip’s AVR microcontrollers.

参照元 : https://github.com/avrdudes/avrdude/

 

 確かに、Arduino IDEをインストールすると、デフォルトで「C:\Program Files (x86)\Arduino\hardware\tools\avr\bin」に「avrdude.exe」がインストールされていました。 このプログラムはコマンドプロンプトで利用するキャラクタベースのツールでした。 つまり、「まじめに理解しておかないと使ってはいけないプログラムくん達」のお仲間です。 上記参照元(https://github.com/avrdudes/avrdude/)を調べていくと「avrdude.exe」の説明書 (今回はavrdude-doc-6.4.pdf)がありましたのでダウンロードして読んで(正しくは眺めて)みましたが、最初は何をすればよいのかすら分かりませんでした。

 しかし、今はインターネット時代です。 下記のホームページ(Webページ)でAvrdudeの使い方を教えていただき、やっと「Fuse Register」と「Lock bit Register」の読出し、 書き込みをすることができました。

 

しなぷすのハード製作記 (参照元 : https://synapse.kyoto/)

読み物・Tipsなど

ArduinoISPを汎用AVRライタとして使う

 

 この場を借りて、これらの情報を公開されている谷川 寛氏に感謝申し上げます。 「しなぷすのハード製作記」には他にもいろいろな情報が分かりやすく、具体的に掲載されています。 また、「Arduino電子工作」も2016年6月に購入させて頂いておりました。(でも、詳しく 読んでいませんでした。。。。。。) 

 これらの情報を元に、いろいろ試行錯誤した内容をまとめて記載します。

(1) 「avrdude.conf」ファイルが必要です。

 「avrdude.exe」のディレクトリに移動後、「avrdude.exe」を実行すると「config file」を開くことができないとのメッセージが表示されて起動できませんでした。

「avrdude.exe」実行例(「avrdude.conf」ファイルの指定無し)

Microsoft Windows [Version 10.0.19044.1889]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\SysWOW64>cd C:\Program Files (x86)\Arduino\hardware\tools\avr\bin

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude -c avrisp -P COM11 -b 19200 -p m328p

avrdude: can't open config file "": Invalid argument
avrdude: error reading system wide configuration file ""

 

 

 「config file」は「avrdude.conf」名で「C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\」に格納されていました。 「avrdude.conf」ファイルの場所を指定する、もしくは「avrdude.conf」ファイルの格納ディレクトリをカレントディレクトリにすることで起動できました。 一例として 下記のディレクトリ構造で試した結果を掲載します。

「avrdude.exe」実行例(「avrdude.conf」ファイルの場所を指定、もしくはカレントディレクトリ)

Microsoft Windows [Version 10.0.19044.1889] (c) Microsoft Corporation. All rights reserved.

C:\Windows\SysWOW64>cd C:\Program Files (x86)\Arduino\hardware\tools\avr\bin

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude -c avrisp -P COM11 -b 19200 -p m328p
avrdude: can't open config file "": Invalid argument
avrdude: error reading system wide configuration file ""

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude -c avrisp -C ..\etc\avrdude.conf -P COM11 -b 19200 -p m328p

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)

avrdude: safemode: Fuses OK (E:FC, H:DA, L:DF)

avrdude done. Thank you.

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>cd C:\Program Files (x86)\Arduino\hardware\tools\avr\etc

C:\Program Files (x86)\Arduino\hardware\tools\avr\etc>..\bin\avrdude -c avrisp -P COM11 -b 19200 -p m328p

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e950f (probably m328p)

avrdude: safemode: Fuses OK (E:FC, H:DA, L:DF)

avrdude done. Thank you.

C:\Program Files (x86)\Arduino\hardware\tools\avr\etc>
 
tc>

 

 「avrdude.exe」ファイル・ 「avrdude.conf」ファイルは必ずしも「C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\」にある必要はありません。 例えば、下記のサンプルのディレクトリ構造でも利用できます。

 

ディレクトリ構造(サンプル)

  
ファイル/フォルダ名                                                                バイト数 
───────────────────────────────────────────────
E:\avr                                                                            < Folder > 
├ avrdude                                                                        < Folder > 
│ ├ avrdude.conf                                                                   506,993 
│ └ avrdude.exe                                                                    562,688 
├ avrdude_conf                                                                   < Folder > 
│ └ avrdude.conf                                                                   506,993 
└ avrdude_exe                                                                    < Folder > 
 └ avrdude.exe                                                                     562,688 
───────────────────────────────────────────────

 

「avrdude.exe」実行例(任意ディレクトリの「avrdude.exe」・「avrdude.conf」の場合)

Microsoft Windows [Version 10.0.19044.1889] (c) Microsoft Corporation. All rights reserved.

C:\Windows\SysWOW64>e:

E:\>cd avr

E:\avr>cd \avr\avrdude

E:\avr\avrdude>avrdude -c avrisp -P COM11 -b 19200 -p m328p

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e950f (probably m328p)

avrdude: safemode: Fuses OK (E:FC, H:DA, L:DF)

avrdude done. Thank you.

E:\avr\avrdude>cd \avr\avrdude_exe

E:\avr\avrdude_exe>avrdude -c avrisp -C ..\avrdude_conf\avrdude.conf -P COM11 -b 19200 -p m328p

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)

avrdude: safemode: Fuses OK (E:FC, H:DA, L:DF)

avrdude done. Thank you.

E:\avr\avrdude_exe>cd \avr\avrdude_conf

E:\avr\avrdude_conf>..\avrdude_exe\avrdude -c avrisp -P COM11 -b 19200 -p m328p

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)

avrdude: safemode: Fuses OK (E:FC, H:DA, L:DF)

avrdude done. Thank you.

E:\avr\avrdude_conf>
  

 

(3) 「Fuse Register」と「Lock bit Register」は「−U」オプション(-U memtype:op:filename[:format])で読み書きできます。

 「−U」オプションは説明書avrdude-doc-6.4.pdfに記載されていますので参照していただければと思います。 下記に「Fuse Register」と「Lock bit Register」の読出し例を掲載します。

「avrdude.exe」実行例(任意ディレクトリの「avrdude.exe」・「avrdude.conf」の場合)

E:\avr\avrdude>avrdude -c avrisp -P COM11 -b 19200 -p m328p -U lfuse:r:con:h -U hfuse:r:con:h -U efuse:r:con:h

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e950f (probably m328p) avrdude: reading lfuse memory:

Reading | ################################################## | 100% 0.02s

avrdude: writing output file "con" 0xdf avrdude: reading hfuse memory:

Reading | ################################################## | 100% 0.02s

avrdude: writing output file "con" 0xda avrdude: reading efuse memory:

Reading | ################################################## | 100% 0.00s

avrdude: writing output file "con" 0xfc

avrdude: safemode: Fuses OK (E:FC, H:DA, L:DF)

avrdude done. Thank you.

E:\avr\avrdude>

 

(4) Teaminal Modeを利用すると操作が少し楽になります。

 

「avrdude.exe」実行例(任意ディレクトリの「avrdude.exe」・「avrdude.conf」の場合)

E:\>cd \avr\avrdude

E:\avr\avrdude>avrdude -c avrisp -P COM11 -b 19200 -p m328p -t

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude> d efuse
>>> d efuse
0000  fc                                                |.               |

avrdude> d hfuse
>>> d hfuse
0000  da                                                |.               |

avrdude> d lfuse
>>> d lfuse
0000  df                                                |.               |

avrdude> d lock
>>> d lock
0000  0f                                                |.               |

avrdude> pgm
>>> pgm

E:\avr\avrdude>

 

 以上、一通りブートローダ書き込みを試してみました。 ブートローダの書き込み自体はArduino IDEによるブートローダ書き込み の方が簡単でした。 しかし、「Fuse Register」や「Lock bit Register」の設定や確認が必要であれば、avrdudeの操作が必要となるためMicrochip Studioによるブートローダ 書き込みの方がGUI操作だけで済みます。

 

 目次に戻る  Memorandumの小部屋 へ戻る   ホームページへ戻る


End of This Page.