私はしばらくの間、Arduinoの作成に苦労しています(ISPプログラマーケーブルを使用してブレッドボードバージョンを作成することに成功しました)。彼らは、Arduinoブートローダーは、ATmega8をプログラムするために外部回路が必要ないように作られていると言います。しかし、回路図を見ると、シリアル接続に必要な通常の回路があります。では、ブートローダーは実際には何をしているのでしょうか?
私はしばらくの間、Arduinoの作成に苦労しています(ISPプログラマーケーブルを使用してブレッドボードバージョンを作成することに成功しました)。彼らは、Arduinoブートローダーは、ATmega8をプログラムするために外部回路が必要ないように作られていると言います。しかし、回路図を見ると、シリアル接続に必要な通常の回路があります。では、ブートローダーは実際には何をしているのでしょうか?
回答:
ブートローダーはAVRのフラッシュ内の小さなプログラムで、上書きされることはなく、電源投入時に実行されます。ブートローダーの仕事は、UARTからプログラムデータを読み取り、それを内部フラッシュに書き込むことです。ブートローダーがなければ、コードをロードする唯一の方法はISPを使用することです。
AVR ATMega8にはフラッシュ内のコードはありません。コードは、AVR ISPプログラマー(または別のArduino)を使用して、ISP(システム内プログラミング)ピン経由でアップロードできます。
Arduinoの場合、ISPは(製造時に)1回だけ使用され、小さなブートローダーをアップロードします。電源投入時に、ブートローダーが実行され、シリアルUART(TX + RXピン)と通信します。これで、Arduinoは、STK500プロトコルを使用してシリアルピン経由でプログラムできます。
シリアルピンは(通常)FTDI USB toシリアルチップに接続されているため、ArduinoはUSB経由でもプログラムできます。
Arduinoブートローダーの背後にある考え方は、それらを再プログラミングするために特別なハードウェアや回路を必要としないこと、または専用のプログラマー(PIC MCUのPicKit2など)をしばしば必要とする古いマイクロコントローラーと比較することです。ブートローダーは、基本的なシリアル接続を介したプログラミングを可能にします。
もちろん、当時は、シリアルリンク、通常はTTLからRS232へのrs232コンバーターが必要でした。その後、シリアルポートは段階的に廃止され、USBからシリアルへのユビキタス化により、max232などを置き換えることができます。そして今、USB対応のAtmelマイクロコントローラーを使用すると、それさえ不要になり、最小限の受動部品を持つ単一のICでArduino機能とUSB to Serialを提供できます。スケッチをアップロードするには、USBケーブルといくつかのパッシブのみが必要です。ブートローダーの初期プログラミングには、従来のICSPプログラミングが必要です。