ブートローダーを書き込むにはどうすればよいですか?


15

取得していたエラーを修正するために、Arduinoに「ブートローダーを書き込む」ように指示されました。これどうやってするの?(そして、ブートローダーとは正確には何ですか?)


正しい手順に従えば、ブートローダーをarduinoに書き込むのは非常に簡単です。このビデオが役立つかもしれません:YouTube-ブートローダーをATMEGA328P-AU(SMD)に書き込む方法| 自家製ARDUINO MINI
HS

回答:


15

ブートローダーは、(ほとんど)常にArduino上にある小さなプログラムです。作成したスケッチのアップロードと開始を管理し、ボードがリセットされるたびにピン13のLEDを点滅させます。


ブートローダーを書き込むには:

  1. AVR ISPUSBtinyISPParallelProgrammer、または別のArduinoボードを入手します。これがISPになります。
  2. 特に指示がない限り、ISPをボードのICSPピンに接続します。
  3. USBケーブルまたは外部電源のいずれかでボードに電力を供給します。
  4. Arduino IDEを開きます。
  5. Tools ► Board ►IDE で書き込み先の正しいボードを選択したことを確認してください。プログラムを正しくアップロードできる場合でも、これを再確認してください。アップロードには常に適切なボードが必要とは限りません。
  6. で適切なプログラマを選択しますTools ► Programmer ►
  7. をクリックTools ► Burn Bootloaderして待機します。1分以上かかることはなく、多くの場合数秒しかかかりません。

ソース:


1
この時点では、AVRISPはほぼEOL(サポート終了)です。少なくとも、AVRISPmk2が必要です。他にも多くのより手の込んだツール(AVR One!など)があります。あなたはおそらく言うべきです{line 1} or other dedicated ISP programmer.
コナーウルフ

Arduino Yunのようなボードでは、「wifi経由でアップロード」するたびに、スケッチとマージされたブートローダーを焼きます。これは、Linux CPUがSPIを介してAVR MCUに接続されているため、ソフトウェアでISPを模倣できるためです。
フェデリコフィッソー14

@FedericoFissore-それはなぜそんなに時間がかかるのですか?
TheDoctor

はい、それとGPIOビットバンギングが遅いという事実。それをスピードアップするための継続的な努力があります。
フェデリコフィッソー14年

8

ブートローダーとは何ですか?

そして、ブートローダーとは正確には何ですか?

ブートローダーは、プログラムメモリの「高い」部分にある小さなコードです。通常、新しいスケッチをアップロードしても消去されません。その目的は、リセットの直後にアクティブにすることです(ヒューズは、アドレス0x0000ではなく、ブートローダーアドレスでコードを開始するように構成されています)。ブートローダーは、「プログラミング」データがシリアルポートに到着しているかどうかを確認するために、短時間(1秒など)待機します。

  • その場合、そのデータを読み取り、それをデコードして、フラッシュメモリの残りを再プログラムします。アップロードプログラム(通常はavrdude)と連携して、新しいスケッチがシリアルポート経由で送信されます。ブートローダーはフラッシュメモリのページを消去し、新しいコードに置き換えます。完了すると、新しいコードを実行します。

  • 命令が届かない場合、ブートローダーはアドレス0x0000にジャンプして、ボード上の既存のスケッチを実行します。


ブートローダーの交換方法

ブートローダーをプログラムする別の方法は、先ほど書いたスケッチを使用することです:

  • Uno(またはDuemilanoveなど)
  • レオナルド
  • Mega2560

「プログラミング」ボードは、ハードコードされた多数のボードのブートローダーを含むスケッチを実行します。図のように、6本のフックアップワイヤを使用して、プログラミングボードをターゲットボード(ブートローダーが必要なボード)に接続します。

Unoのブートローダープログラマー

その特定の写真は、ある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


書き込み先のチップのタイプを選択する必要がありますか(ツール->ボード...)?ブートローダをスタンドアロンチップに書き込む場合、どのボードを選択すればよいですか?
カミロ

IDEでブートローダーを書き込むために使用しているボードのタイプを選択します。ブートローダースケッチは、ターゲットボードタイプを自動検出します。
ニックギャモン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.