現在、Arduino Uno (rev3) ボードを使用したプロジェクトに取り組んでいます。最終的には、Arduino から独立して実行できるようにする可能性があり、プログラミング全体とブートローダーがどのように機能するかを考えるようになりました。
これが私がこれまでに知っている/仮定していることです:
ボードには 2 つのチップがあります: ATmega328 (メイン チップ) と ATmega16u2 (USB-シリアル ビッジとして使用)。
ATmega16u2 のファームウェアは、DFU モードを有効にし、DFU プログラマなどを使用して変更できます。その後、Arduino は HDI / Midi デバイスとして認識されますが、プログラムできなくなります。
ATmega328をプログラミングするとき、チップはリセットされ、再起動時にブートローダーはシリアル接続とATmega16u2ブリッジを介して新しいプログラムをロードして書き込みます。チップの ISP インターフェイスは、新しいプログラムのアップロードには使用されません。そもそもリセットを開始しているのは誰ですか?
Arduino は、他の外部チップをプログラムするための ISP プログラマーとして使用できます。そのために、いくつかのファームウェアが AATmega328 にロードされ、プログラムされるチップの ISP ピンが Arduino ボードのピンに接続されます。次に、再プログラムするのではなく、Atmega328 をプログラマーとして使用するように Arduino-IDE を構成します。
少なくとも私が書いたことのほとんどが正しいことを願っています。私の質問は次のとおりです。
新しい/空の AVR をボードに配置した場合、ブートローダーはどのようにしてそのチップに取り込まれますか? 「ブートローダーの書き込み」コマンドはどのように機能しますか?
最初にブートローダをアップロードせずに ATmega328 に HEX ファイルをアップロードすることは可能ですか? これは、ATmega16u2 で特定のファームウェアを使用して実行できますか?
ありがとう!
ヨハネス