ブートローダーを焼くにはどうすればよいですか?

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

コメント

回答

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


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

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

出典:

コメント

  • AVRISPはほとんどEOLです(寿命の終わり)この時点で。少なくとも、AVRISPmk2が必要です。他にも、より洗練されたツールがたくさんあります(たとえば、AVR One!)。おそらく、{line 1} or other dedicated ISP programmer.
  • Arduino Yunのようなボードでは、" Wi-Fi経由でアップロードするたびに"、'スケッチとマージされたブートローダーを焼き付けています。これは、LinuxCPUがSPIを介してAVRMCUに接続されているため、ソフトウェアでISPを模倣できるためです。
  • @ FedericoFissore-だからこそ、時間がかかるのですか?
  • はい、それとGPIOビットバンギングが遅いという事実。スピードアップするための継続的な取り組みがあります。

回答

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

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

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

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

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


ブートローダーを置き換える方法

ブートローダーをプログラムする別の方法は、先ほど書いたスケッチを使用することです。これは次の場所で実行されます。

  • Uno(またはDuemilanoveなどの類似)
  • Leonardo
  • 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でブートローダーの書き込みに使用するボードのタイプを選択します。 ブートローダースケッチは、ターゲットボードタイプを自動検出します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です