組み込み系

Arduino Leonardoにブートローダーを書き込む

投稿日:

AVRISP mkII(ATMEL純正のAVRマイコンライター)を使って、ブートローダーを書き込むテストをしました。

ATmega32U4はArduino Leonardoにも搭載されており、Arduino IDEからAVRISP mkII経由でブートローダーを書き込んでみました。

すると、Arduino IDEでは何度やってもエラーが出て書き込みに失敗するので、Arduino IDE上で実行しているコマンドを抜き出して、コマンドプロンプトからブートローダー書き込みができたので記録として残します。

この作業は、失敗すると2度とボードが使えなくなったりする可能性がありますので、作業は自己責任でお願いいたします。

 

書込みコマンド(avrdude)

avrdudeというコマンド(avrdude.exe)は、Arduino IDEをインストールしたディレクトリ配下の"hardware\tools\avr\bin\"に入っています。

avrdudeのコマンドラインオプションは以下のようになります。

 

ブートローダー書込みに必要なファイル

avrdude.conf・・・Arduino IDEをインストールしたフォルダ配下の"hardware\tools\avr\etc\"に置かれているファイルで、avrdudeで使用する設定ファイル。
今回はArduino Leonardo用のブートローダー書込みのみですので、特に変更などはありませんがavrdudeが実行中に参照します。

Caterina-Leonardo.hex・・・Arduino IDEをインストールしたフォルダ配下の"hardware\arduino\avr\bootloaders\caterina\"に置かれているファイルで、Arduino Leonardo用ブートローダー本体のhexファイル。

 

コマンドライン

実際のコマンドは2つあります。

1. FUSE設定書込み

2. ブートローダー書込み

実行するのは、avrdudeというコマンド1つです。
avrdudeのコマンドラインオプションの組合せで、上記の2つの書き込みが実現されます。

 

FUSE設定書込み

FUSE設定書込みのコマンドは下記の通り

横2行では判りづらいので、オプションごとに改行するとこうなります。

コマンドラインオプションを順に並べるとこうなります。

-C <config-file> Specify location of configuration file.
どの設定ファイルを使用するか(このコマンドの場合、"C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf")

-v Verbose output. -v -v for more.
出力するかどうか(このコマンドの場合、「出力する」)

-p <partno> Required. Specify AVR device.
AVRデバイスの指定(このコマンドの場合、"atmega32u4")

-c <programmer> Specify programmer type.
プログラマのタイプ指定(このコマンドの場合、"stk500v2")

-P <port> Specify connection port.
接続ポート指定(このコマンドの場合、"usb")

-e Perform a chip erase.
チップ消去実行有無(このコマンドの場合、「チップ消去を実行する」)

-U <memtype>:r|w|v:<filename>[:format]
Memory operation specification.
Multiple -U options are allowed, each request
is performed in the order specified.
メモリ動作仕様
複数の-Uオプションは、各要求を許可。指定された順序で実行されます。
(このコマンドの場合、"lock:w:0x3F:m"、"efuse:w:0xcb:m"、"hfuse:w:0xd8:m"、"lfuse:w:0xff:m")

 

ブートローダー書込み

ブートローダー書込みのコマンドは下記の通り

こちらもオプションごとに改行するとこうなります。

-C <config-file> Specify location of configuration file.
どの設定ファイルを使用するか(このコマンドの場合、"C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf")

-v Verbose output. -v -v for more.
出力するかどうか(このコマンドの場合、「出力する」)

-p <partno> Required. Specify AVR device.
AVRデバイスの指定(このコマンドの場合、"atmega32u4")

-c <programmer> Specify programmer type.
プログラマのタイプ指定(このコマンドの場合、"stk500v2")

-P <port> Specify connection port.
接続ポート指定(このコマンドの場合、"usb")

-U <memtype>:r|w|v:<filename>[:format]
Memory operation specification.
Multiple -U options are allowed, each request
is performed in the order specified.
メモリ動作仕様
複数の-Uオプションは、各要求を許可。指定された順序で実行されます。
(このコマンドの場合、"flash:w:"C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\caterina\Caterina-Leonardo.hex":i"、"lock:w:0x2F:m ")

 

この2つのコマンドですが、実行するときにもう一つコツがあります(Arduino IDEでブートローダー書込みに失敗した理由もこれだった?)。
それは、この2つのコマンドは「ちょっとだけ時間を空けて実行する必要性がある」ということです。
間をおかずに実行すると、ブートローダー書込みのコマンド実行時に失敗してしまうので、そのままではまったくArduino Leonardoが使えなくなります。

-組み込み系

Copyright© プログラミングテクニック集キヤミー , 2020 All Rights Reserved.