質問: avrdudeの "プログラマー"とブートローダとの関係 `-c `avrdude` のオプションで指定されているように、「プログラマーID」の概念を理解しようとしています。` ``avrdude` asks me to choose a "programmer-id" among many it knows of. Let's say (just as an example) I have a Arduino 2560 to which I connect via USB, and I want to program it using the bootloader. Then, in this scenario, is one programmer-id and just one supposed to work? 一般的には、 1)特定のボード(MCU、 `avrdude` の `-p` ) 2)特定のプログラミング方法/接続(JTAG、ISP、開発ボード、USB /シリアルなど) 3)(ブートローダーを使用している場合)フラッシュ内の特定のブートローダーコード。 これらはプログラマの選択とどのように関連していますか?私はいくつか(ほとんどの?)プログラマIDは、いくつかのプログラマ接続/メソッド(おそらくいくつかのハードウェア・ファミリを持つでしょうか?)に固有であり、ブートローダとは何の関係もないと思います。 USB経由で接続されたブートローダ付き標準Arduinoには、プログラマは何を使用しますか?もっと何が言えるでしょうか? さらに、Arduino IDEでは、「アップロード」と「プログラマーを使用してアップロード」を選択できます(私にとっては最初の作品、2番目の作品はありません)。なぜこの区別?プログラマーはいつも使われていませんか? 「アップロード」を選択すると、IDEは何をしますか(それはavrdudeを呼びますか?)`
回答: ブートローダを使用している場合は、プログラマを使用していません。プログラマを使用すると、ArduinoのICSPピンに接続されます。しかし、ブートローダは、リセット直後にArduino *からシリアルポート*までのデータの明確なシーケンスを期待しています。ブートローダは、(受信された場合)それを認識し、フラッシュを再プログラムします。 アップロードのために冗長モードを有効にすると、プログラマーのタイプが表示されます: ``` -carduino ``` つまり、Arduinoはブートローダのプログラミング方法を使用しています。 See my post here: What happens when code is uploaded using the bootloader? > さらに、Arduino IDEでは、「アップロード」と「プログラマーを使用してアップロード」を選択できます(私には最初の作品、2番目の作品はありません)。 > > はい。「プログラマを使用してアップロードする」では、USBポートに接続するAVRISPなどのプログラマが必要です。使用するプログラマのタイプとして選択します。この場合、シリアルポートがプログラミングに使用されないため、ArduinoをUSBに差し込む必要はありません。 一部のプログラマはArduinoにVcc(すなわち+ 5V)を供給し、一部のプログラマはArduinoに供給しないことに注意してください。 AVRISPはそうではありません。 > さらに、 "Optiboot"はArduinoに含まれている標準とは異なるブートローダです。 > > 私が知る限り、最近のArduino Unos(そしておそらく他の人たち)がOptibootを同梱しています。その主な利点は、それが小さいことです(わずか512バイト)。 > 一般的に、特定のブートローダを知る必要がありますか? > > より小さいボードはSTK500プロトコル(以下のリンクを参照)を使用し、大きいもの(例えばメガ)ではSTK500バージョン2を使用していると思います。だから、それはプロトコルを知る必要があります。 ボードタイプをMega2560に切り替えると、 "-c"オプションが次のように変更されました: ``` -cwiring ``` 私はそれから推測しています。 "arduino"は "STK500"のコードで、 "wiring"は "STK500 V2"のコードです。 プロトコル * AVR061:STK500通信プロトコル * AVR068:STK500通信プロトコルバージョン2