回答:
ブートローダーは、(ほとんど)常にArduino上にある小さなプログラムです。作成したスケッチのアップロードと開始を管理し、ボードがリセットされるたびにピン13のLEDを点滅させます。
ブートローダーを書き込むには:
Tools ► Board ►
IDE で書き込み先の正しいボードを選択したことを確認してください。プログラムを正しくアップロードできる場合でも、これを再確認してください。アップロードには常に適切なボードが必要とは限りません。Tools ► Programmer ►
。Tools ► Burn Bootloader
して待機します。1分以上かかることはなく、多くの場合数秒しかかかりません。ソース:
{line 1} or other dedicated ISP programmer.
そして、ブートローダーとは正確には何ですか?
ブートローダーは、プログラムメモリの「高い」部分にある小さなコードです。通常、新しいスケッチをアップロードしても消去されません。その目的は、リセットの直後にアクティブにすることです(ヒューズは、アドレス0x0000ではなく、ブートローダーアドレスでコードを開始するように構成されています)。ブートローダーは、「プログラミング」データがシリアルポートに到着しているかどうかを確認するために、短時間(1秒など)待機します。
その場合、そのデータを読み取り、それをデコードして、フラッシュメモリの残りを再プログラムします。アップロードプログラム(通常はavrdude)と連携して、新しいスケッチがシリアルポート経由で送信されます。ブートローダーはフラッシュメモリのページを消去し、新しいコードに置き換えます。完了すると、新しいコードを実行します。
命令が届かない場合、ブートローダーはアドレス0x0000にジャンプして、ボード上の既存のスケッチを実行します。
ブートローダーをプログラムする別の方法は、先ほど書いたスケッチを使用することです:
「プログラミング」ボードは、ハードコードされた多数のボードのブートローダーを含むスケッチを実行します。図のように、6本のフックアップワイヤを使用して、プログラミングボードをターゲットボード(ブートローダーが必要なボード)に接続します。
その特定の写真は、あるUnoが別のUnoをプログラミングしていることを示しています。
スケッチを実行します(シリアルモニターを介して操作し、コマンドを与えます)。まず、ターゲットチップを識別します。
Atmega chip programmer.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xCF
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Type 'G' to program the chip with the bootloader ...
Gを押してプログラムします。
Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xCF
Done.
Type 'C' when ready to continue with another chip ...
Unoの場合、これには1秒かかります。Mega2560をプログラムするには3秒かかります。
Atmegaブートローダープログラマーの詳細な手順
コードはGithubからダウンロードできます:nickgammon / arduino_sketches