0

現在、Arduino Uno (rev3) ボードを使用したプロジェクトに取り組んでいます。最終的には、Arduino から独立して実行できるようにする可能性があり、プログラミング全体とブートローダーがどのように機能するかを考えるようになりました。

これが私がこれまでに知っている/仮定していることです:

  1. ボードには 2 つのチップがあります: ATmega328 (メイン チップ) と ATmega16u2 (USB-シリアル ビッジとして使用)。

  2. ATmega16u2 のファームウェアは、DFU モードを有効にし、DFU プログラマなどを使用して変更できます。その後、Arduino は HDI / Midi デバイスとして認識されますが、プログラムできなくなります。

  3. ATmega328をプログラミングするとき、チップはリセットされ、再起動時にブートローダーはシリアル接続とATmega16u2ブリッジを介して新しいプログラムをロードして書き込みます。チップの ISP インターフェイスは、新しいプログラムのアップロードには使用されません。そもそもリセットを開始しているのは誰ですか?

  4. Arduino は、他の外部チップをプログラムするための ISP プログラマーとして使用できます。そのために、いくつかのファームウェアが AATmega328 にロードされ、プログラムされるチップの ISP ピンが Arduino ボードのピンに接続されます。次に、再プログラムするのではなく、Atmega328 をプログラマーとして使用するように Arduino-IDE を構成します。

少なくとも私が書いたことのほとんどが正しいことを願っています。私の質問は次のとおりです。

新しい/空の AVR をボードに配置した場合、ブートローダーはどのようにしてそのチップに取り込まれますか? 「ブートローダーの書き込み」コマンドはどのように機能しますか?

最初にブートローダをアップロードせずに ATmega328 に HEX ファイルをアップロードすることは可能ですか? これは、ATmega16u2 で特定のファームウェアを使用して実行できますか?

ありがとう!

ヨハネス

4

1 に答える 1

1

ISP プログラマー (ArduinoISP または USBasp などのディスクリート プログラマー) を使用して、AVR のフラッシュ、EEPROM、ヒューズ ビット、およびロック ビットをプログラムできます。既存のブートローダーは必要ありません。デバイスの SPI ピンを使用してデバイスにコマンドを送信し、不揮発性ストレージの内容を操作します。

ATmega16U2 には '328 への UART 接続しかありません。'328 では、ブートローダーなしで UART を使用してプログラムする方法はありません。

于 2014-04-12T19:06:09.497 に答える