回答:
Arduinoは、基本的にはAtmel AVRマイクロコントローラーであり、動作させるのに十分なサポート電子機器を備えています。AVRには内蔵のフラッシュがあり、電源を切ってもプログラムを維持できますが、AVRチップを直接プログラムするには、STK-500のようなツールが必要です。Arduinoは、ボード上に小さなUSBインターフェイスを備え、Arduinoブートローダーコードをすでにチップに搭載することで、これを克服しています。これにより、PC側のアプリケーションがプログラムをデバイスに転送し、本質的にそれをフラッシュさせることができます。
つまり、Arduinoを入手した場合、ブートローダーはすでにそこにあり、その仕事は自動的に行われます。PCでプログラムをコーディングし、IDEの「アップロード」ボタンを押すと、数分以内にプログラムがArduinoで実行されます。ブートローダーはその仕事を完全に透過的に行います。
fwiw、私はArduino 2009 と STK-500 を個人的に所有しており、AVRでオンザメタルプログラミングを実行できますが、Arduinoのブートローダーをバイパスする必要はありません。
Arduinoでは、シリアル/ USB経由でスケッチをプログラムするためにブートローダーが必要です。それがなければ、AVRチップのフラッシュメモリを直接プログラムするためのAVRインシステムプログラマー(ISP)が必要です。
Arduinoを購入すると、すでにAVRチップに焼き付けられたブートローダーが付属しています。あなた自身のボードを構築している場合にのみ、それについて心配する必要があります。
これは役立つはずです: Arduinoのコンセプトがわかりません
もう少し理論的な答えを挙げます。他の答えは実用的な観点からはかなり良いです。ブートローダーは、フラッシュメモリの特別なセグメントに常駐するコードです。そのセグメントに常駐するコードは、セルフプログラミング命令の実行が許可されているため、STK500などの従来のプログラマー(つまり、インシステムプログラミングISPまたは高電圧プログラミングHVP)なしでフラッシュメモリ(つまり、ユーザーコードが常駐する場所)を変更できます。またはAVRISP mkII。
原則として、UART受信データ割り込みサービスルーチン(ISR)は、ブートローダーコードに関数呼び出しを行い、シリアルに送信されるプログラムイメージをフラッシュメモリのユーザープログラム空間にコピーします。起動時に、チップ上にあるすべてのプログラムが実行を開始しますが、適切に形成されたシリアルデータが早い段階で受信されると、AVRは一種の自己プログラミングモードに入ります。UART ISRには、起動時の短い期間のみブートローダーコードに依存するロジックがあります。詳細はそれより少し複雑ですが、それが基本的な考え方です。
これの利点は、Arduinoを購入するだけで、無料の統合開発環境(IDE)をダウンロードし、Arduinoスケッチ(プログラム)の作成を開始して、USB経由でそのままAVRにダウンロードできることです。 Arduinoボードに統合された豪華な小さなFTDI ICチップに。