2014年11月25日 | 公開。 |
2015年11月28日 | キット版のArduino Uno用ブートローダライタシールドに関する記述を追加。 |
コマンドライン(コマンドプロンプト窓内)でのavrdudeの使い方を説明します。
もう一度、スタート→すべてのプログラム→アクセサリ→コマンド プロンプトを選んで、コマンド プロンプトを起動し、avrdudeと打ち込んだ後にエンターキーを押して、avrdudeを起動してください。コマンドラインオプションの一覧が表示されます。
avrdudeの後に、スペースと-(ハイフン)そしてアルファベット1文字を指定する事で、avrdudeに色々なコマンドラインオプション(起動オプション)を付ける事ができます。コマンドラインオプションのアルファベットは、大文字と小文字を区別します。(例:avrdude -pとavrdude -Pは異なる意味に解釈される)
コマンドラインオプションの種類によっては、アルファベットの後にさらにスペースを入力し、その後に文字列を入力します。(例:avrdude -c avrisp)
また、複数のコマンドラインオプションを同時に指定する事もできますが、その場合は、コマンドラインオプション間をスペースで区切ります。(例:avrdude -c avrisp -p COM4)
以下に、主なコマンドラインオプションの説明をします。なお、avrdudeの説明は本家avrdudeのサイトの、Documentationのページ(英文)で読めますので、詳しい情報はそちらを参照してください。
-pオプションは、マイコンの型番の指定を行います。-pの後に、スペースに続けて、マイコンの種類を表わす文字列を指定します。例えば、ATmega328Pのプログラムの書き込みをしたいなら、ATmega328Pを表わす文字列はm328pですので、オプションは-p m328pとなります。
表1に、主なAVRマイコンの文字列を示します。
文字列 | マイコンの型番 |
---|---|
m168 | ATmega168 |
m168p | ATmega168P |
m328P | ATmega328P |
m8 | ATmega8 |
t44 | ATtiny44 |
t45 | ATtiny45 |
t84 | ATtiny84 |
t85 | ATtiny85 |
-cオプションは、プログラムの書き込みに使うライタ(プログラマ)の指定に使います。スペースに続けて、ライタの種類を表わす文字列を指定します。表2に、主なライタの文字列を示します。
文字列 | ライタの種類 |
---|---|
avrisp | Atmel AVR ISP・ArduinoISP |
avrisp2 | Atmel AVR ISP mkII |
ArduinoISPは、AVR ISP互換ですので、-c avrispと指定しなければいけないことに注意してください。
-Pオプションは、ライタを、パソコンのどのポートに接続しているか指定します。ArduinoISPの様に、仮想シリアルポートを使うライタをWindows環境で使う場合は、COM番号を指定します。例えばCOM4にライタがつながっている場合は-P COM4となります。
パソコンとライタが通信する時のボーレート(通信速度)を指定します。ArduinoISP(およびAVR ISP)は19200bpsで通信しますので、-b 19200と指定します。
-Uオプションは、AVRマイコンの内部メモリに対して、読み書きなどを実行するオプションで、書式は次のようになっています。
memtypeは、操作の対象のメモリの種類を指定する部分です。表3に、主なmemtypeの文字列を示します。
文字列 | メモリの種類 |
---|---|
eeprom | EEPROM(電源を切断しても残したいデータを記憶するメモリ) |
flash | フラッシュメモリ(プログラムを書き込むメモリ) |
fuse | ヒューズバイト(ヒューズバイトが1バイトのみのマイコン用) |
hfuse | 上位ヒューズバイト(fuse high byte) |
lfuse | 下位ヒューズバイト(fuse low byte) |
efuse | 拡張ヒューズバイト(extended fuse byte) |
lock | ロックビットバイト |
signature | デバイスID |
opは、操作の種類を表わします。表4に、opの文字列の一覧を示します。
文字列 | 操作の種類 |
---|---|
r | 指定されたメモリを読み、その内容を指定されたファイルに書き込む。 |
w | 指定されたファイルを読み、その内容を指定されたメモリに書き込む。 |
v | 指定されたファイルと、指定されたメモリを読み、ベリファイ(内容が一致している事の確認)を行う。 |
filenameはファイルの名前(パスを含めることも可)を指定する部分です。
formatはファイルの形式(フォーマット)を指定する部分で、省略する事ができます。表5に、主なformatの文字列と、その意味の一覧表を示します。
文字列 | ファイルのフォーマット |
---|---|
i | IntelのHex形式 |
s | モトローラのsレコード形式 |
r | 生バイナリーフォーマット。フラッシュメモリの場合はリトルエンディアン。 |
e | ELF(リンカの出力ファイル形式)。入力ファイルとしてのみ指定できる。 |
m | イミディエート(即値)モード。-Uオプションのfilenameフィールドにバイト値をコンマかスペースで指定する。値が0xで始まると16進数、0で始まると8進数、それ以外なら10進数と解釈される。このモードは、ヒューズバイトの指定の際に使うと、たった1バイトのために、わざわざファイルを作らなくて済むので、便利。 |
a | フォーマットを自動検出する。ファイルを入力として使うときのみ指定できる。 |
formatを指定しないと、入力ファイルに関しては、フォーマットを自動検出します。出力ファイルに関しては、生バイナリフォーマットが選択されます。
-Uオプションの例として、フラッシュメモリの内容を読み出し、"test.hex"というファイルにIntelのHex形式で書き込む場合は、-U flash:r:test.hex:iとします。
それでは、avrdudeをコマンドラインから呼び出して、ArduinoISPを使ってみましょう。まず、必要な機材を用意します。
Arduino Uno用ブートローダライタシールドを使う場合は、以下の機材を用意してください。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
ユニバーサル基板にArduino Uno用ブートローダライタシールドを組んだ場合は、ブートローダライタシールドの使い方の手順1~手順7を実行して、Arduino UnoにArduinoISPのファームウェア(スケッチ)を書き込んでください。その後、Arduino IDEを終了してください。
Arduino Uno用ブートローダライタシールドのキット購入して組み立てた場合は、ATmega328PにArduino Unoのブートローダを書き込む方法の手順1~手順7を実行して、Arduino UnoにArduinoISPのファームウェア(スケッチ)を書き込んでください。その後、Arduino IDEを終了してください。
Arduino用ブートローダ/スケッチライタを使う場合は、以下の機材を用意してください。
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
以下の手順で準備作業を行ってください。
それでは、ここからは、実際にArduinoISPとavrdudeを使って、AVRマイコンに読み書きしてみましょう。ここからは、ATmega328Pを使って操作法を説明します。
まず、Arduino Uno用ブートローダライタシールドまたは、Arduino用ブートローダ/スケッチライタのZIFソケットにATmega 328Pを装着します。
次にコマンドラインから次の様に入力して、エンターキーを押してください。コマンドラインオプションは大文字と小文字で別の意味になるので、注意してください。
avrdude -c avrisp -P COM7 -b 19200 -p m328p
ただし、COM7の部分は、ArduinoISPを用いたライタが接続されているCOM番号です。私の環境ではCOM7にライタが接続されていますが、ご自分の環境に合わせて書き換えてください。これ以降の説明では、-Pオプションの部分は、全てご自分の環境に合わせて打ち換えてください。
なお、各オプションは、次の様な意味になっています。
機器の接続が正常で、コマンドラインオプションの指定も間違っていなければ、次の様にDevice signature(デバイスID)が読み出されます。
デバイスIDとは、ライタ(とavrdudeなどのライティングソフト)が、マイコンの型番を知るための識別番号で、それぞれのマイコンに書き込まれています。このデバイスIDは、フラッシュメモリやEEPROMとは独立したメモリ空間に書き込まれています。avrdudeは、デバイスIDを確認する事で、誤って間違った型番のマイコンを挿入した場合に、プログラムの書き込みをしない仕組みになっています。
表6に、主なAVRマイコンのデバイスIDの一覧表を示します。
AVRマイコンの型番 | デバイスID(16進数) |
---|---|
ATmega168 | 1E9406 |
ATmega168P | 1E940B |
ATmega328P | 1E950F |
ATmega8 | 1E9307 |
ATtiny44 | 1E9207 |
ATtiny45 | 1E9206 |
ATtiny84 | 1E930C |
ATtiny85 | 1E930B |
次にヒューズビットを読んでみます。ヒューズビットとは、例えば「外部発振器を使うか、内臓CR発振器を使うか」とか「リセットピンの機能を有効にするか、GPIOピンとして使うか」など、AVRマイコンの動作の設定を書き込む不揮発性メモリで、フラッシュメモリやEEPROMとは別のメモリ空間にあります。AVRマイコンの種類ごとに、ヒューズビットで設定する項目の内容や数が異なります。
ここで、ATmega328Pのヒューズビットについて説明します。ATmega328Pには、19のヒューズビットがあります。ヒューズビットは、8ビットずつセットで読み書きする仕組みになっていますので、3つのグループに分けてアクセスする事になります。(8ビット×3グループだと24ビットのヒューズビットが存在する事になるが、そのうち5ビットは無効ビット) これらの8ビットのヒューズビットのグループをヒューズバイトと呼びます。
3つのヒューズバイトは、下位ヒューズバイト(fuse low byte)、上位ヒューズバイト(fuse low byte)、拡張ヒューズバイト(extended fuse byte)と名づけられています。それぞれのヒューズバイトの、各ビットの意味を、表7~9に示します。
ヒューズビットの名称 | ビット番号 | 説明 | 工場出荷時の値 |
---|---|---|---|
CKDIV8 | 7 (MSB) | Divide clock by8 | 0 |
CKOUT | 6 | Clock output | 1 |
SUT1 | 5 | Select start-up time | 1 |
SUT0 | 4 | Select start-up time | 0 |
CKSEL3 | 3 | Select Clock source | 0 |
CKSEL2 | 2 | Select Clock source | 0 |
CKSEL1 | 1 | Select Clock source | 1 |
CKSEL0 | 0 (LSB) | Select Clock source | 0 |
ヒューズビットの名称 | ビット番号 | 説明 | 工場出荷時の値 |
---|---|---|---|
RSTDISBL | 7 (MSB) | External Reset Disable | 1 |
DWEN | 6 | debugWIRE Enable | 1 |
SPIEN | 5 | Enable Serial Program and Data Downloading |
0 |
WDTON | 4 | Watchdog Timer Always On | 1 |
EESAVE | 3 | EEPROM memory is preserved through the Chip Erase |
1 |
BOOTSZ1 | 2 | Select Boot Size | 0 |
BOOTSZ0 | 1 | Select Boot Size | 0 |
BOOTRST | 0 (LSB) | Select Reset Vector | 1 |
ヒューズビットの名称 | ビット番号 | 説明 | 工場出荷時の値 |
---|---|---|---|
- | 7 (MSB) | - | - |
- | 6 | - | - |
- | 5 | - | - |
- | 4 | - | - |
- | 3 | - | - |
BODLEVEL2 | 2 | Brown-out Detector trigger level | 1 |
BODLEVEL1 | 1 | Brown-out Detector trigger level | 1 |
BODLEVEL0 | 0 (LSB) | Brown-out Detector trigger level | 1 |
これら3つのヒューズバイトの詳しい説明は、別の機会に譲りますが、後で説明するように、ヒューズビットをむやみに書き換えると、プログラムやヒューズビットなどの書き換えができなくなる可能性がある事に注意してください。
これらのヒューズビットを読んでみましょう。まず、下位ヒューズバイトを読むには、コマンドラインで次の様に打ち込んでエンターキーを押します。(例によって、COM7の部分は環境により異なります)
avrdude -c avrisp -P COM7 -b 19200 -p m328p -U lfuse:r:con:h
ここで、-Uオプションは、対象メモリとして下位ヒューズバイト(lfuse)を、操作の種類として読み出し(r)を、ファイルとして標準入出力(con)を、ファイルフォーマットとして16進表記(h)を指定します。つまり、下位ヒューズバイトを読んで、その内容をコンソール画面に16進数で表示するという意味です。
標準入出力についてなじみのない方に補足しておきますが、Windows(あるいはMSDOS)環境において、拡張子なしの"con"(または"CON")というファイル名は、特別のファイルで、通常入力はキーボード、出力はコンソール画面(コマンド プロンプト窓内の画面)に割り当てられています。先ほどの-Uオプションでは、下位ヒューズバイトの値の出力先にconを選んだので、単に画面に表示します。なお、-U lfuse:r:don:hなどとタイプミスすると、"don"というファイル名のファイルができて、その中に下位ヒューズバイトの値が書き込まれます。
新品のATmega328Pをライタに装着し、先ほどのコマンドで下位ヒューズバイトを読むと、次の様になるはずです。
上の画面では、新品のATmega328Pの下位ヒューズバイトを読んだので、工場出荷時の値の62Hが読み出せています。(表7から、工場出荷時の値は01100010B、すなわち62Hと分かる) ブートローダやプログラムなどを書き込んだATmega328Pの下位ヒューズバイトを読んだ場合は、62H以外の値が読み出される可能性があります。
同様にして、上位ヒューズバイトや拡張ヒューズバイトも読み出せます。
上位ヒューズバイトを読むには次の様にしてください。
avrdude -c avrisp -P COM7 -b 19200 -p m328p -U hfuse:r:con:h
また、拡張ヒューズバイトを読むには次の様にしてください。
avrdude -c avrisp -P COM7 -b 19200 -p m328p -U efuse:r:con:h
新品のATmega328Pの場合は、上位ヒューズバイトがD9H、拡張ヒューズバイトが07Hになっているはずです。
また、次の様にすれば、3つのヒューズバイトを一気に読む事ができます。
avrdude -c avrisp -P COM7 -b 19200 -p m328p -U lfuse:r:con:h -U hfuse:r:con:h -U efuse:r:con:h
AVRマイコンにはロックビットという記憶領域があります。これは、フラッシュメモリの内容や、ヒューズバイトの内容を、間違って書き換えないように、ロックするための設定を書き込む領域です。ATmega328Pの場合、ロックビットは全部で6ビットあり、これらをバイト単位(うち2ビットは無効ビット)でアクセスするため、全てのロックビットをまとめてロックビットバイトと呼びます。ロックビットバイトの各ビットの意味を、表10に示します。
ロックビットの名称 | ビット番号 | 説明 | 工場出荷時の値 |
---|---|---|---|
- | 7 (MSB) | - | - |
- | 6 | - | - |
BLB12 | 5 | Boot Lock bit | 1 |
BLB11 | 4 | Boot Lock bit | 1 |
BLB02 | 3 | Boot Lock bit | 1 |
BLB01 | 2 | Boot Lock bit | 1 |
LB2 | 1 | Lock bit | 1 |
LB1 | 0 (LSB) | Lock bit | 1 |
ロックビットの働きの詳しい説明は、別の機会にします。
ロックビットを読むには、次のコマンドを実行してください。新品のATmega328Pの場合は3FHが読めるはずです。
avrdude -c avrisp -P COM7 -b 19200 -p m328p -U lock:r:con:h
今までは、マイコンに書き込んである情報を読むばかりでしたが、いよいよフラッシュメモリに情報を書き込んでみましょう。本来は、簡単なプログラムを作成して、それを書き込む方が良かったのかも知れませんが、話が長くなりそうなので、Arduino Unoのブートローダをavrdudeを用いてATmega328Pに書き込むことにします。(ブートローダもプログラムの一種)
AVRのプログラムは、通常、拡張子が.hexのファイルに保存します。IntelのHEXフォーマットといって、かなり昔から、ROMの内容をファイル化するのに使われてきた形式のファイルです。HEXフォーマットのファイルには、ROMのアドレスや、データ本体、チェックサムなどの情報が、テキストファイルとして書き込まれています。
ブートローダを書き込むには、ブートローダの.hexファイルを入手する必要があります。例えばArduino IDEの1.0.5を、C:\arduino-1.0.5にインストールしていれば、C:\arduino-1.0.5\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hexがArduino Unoのブートローダの.hexファイルとなります。
このファイルから、そのままATmega328Pに書き込んでもいいのですが、念のため、別のフォルダにコピーしておきます。(-Uオプションを入力し間違えると、ファイルの上書きをしてしまうため) optiboot_atmega328.hexを適当な作業用フォルダにコピーしてください。私はいつもC:\tempというフォルダを作業用に使っていますので、そのフォルダを使う事を前提に話を進めます。
念のため、コマンド プロンプト内で、カレントフォルダ(現在のフォルダ)を作業用のC:\tempに移します。(書き込むファイルをフルパスで指定するなら、カレントフォルダを移動する必要はありませんが、コマンドラインを打ち間違えて、不用意にファイルを作成してしまうリスクを考えると、作業用フォルダにカレントフォルダを移動しておく方が無難)
なお、cdは、Change Directoryの略です。ディレクトリ(directory)はフォルダと同じ意味です。
次に、以下のコマンドを実行して、ブートローダをフラッシュメモリに書き込みます。
avrdude -c avrisp -P COM7 -b 19200 -p m328p -U flash:w:optiboot_atmega328.hex
これで.hexファイルがフラッシュメモリに書き込めました。ただし、この状態では、まだブートローダとしては機能しません。ヒューズビットとロックビットの設定が残っています。
書き込んだプログラムを、Arduino Unoのブートローダとして機能させるには、下位ヒューズバイトにFFH、上位ヒューズバイトにDEH、拡張ヒューズバイトに05Hを書き込む必要があります。そのためには、次のコマンドを実行してください。この際に、ヒューズバイトに書き込む値を間違えると、それ以降ATmega328Pの内蔵メモリの読み出しと書き込みができなくなる可能性がありますので、十分注意してコマンドを入力してください。
avrdude -c avrisp -P COM7 -b 19200 -p m328p -U lfuse:w:0xff:m -U hfuse:w:0xde:m -U efuse:w:0x05:m
これは、必須の作業ではありませんが、Arduino Unoのブートローダを書き込んだ後には、ロックビットバイトを0FHに設定するのが好ましいです。ロックビットバイトをデフォルトの3FHから0FHに書き換えると、Arduinoのスケッチ側から、ブートローダの読み書きが禁止されます。よって、悪意のあるスケッチを作っても、ブートローダが破壊される事がなくなります。
ロックビットバイトを0FHに書き換えるには、次のコマンドを実行してください。
avrdude -c avrisp -P COM7 -b 19200 -p m328p -U lock:w:0x0f:m
これで、Arduino Unoのブートローダが書き込めました。
フラッシュメモリに書き込まれた情報を読み出し、.hexファイルに記録するには次のコマンドを実行します。
avrdude -c avrisp -P COM7 -b 19200 -p m328p -U flash:r:test.hex:i
こうする事で、フラッシュメモリの内容が全て読み出され、"test.hex"というファイル名の.hexファイルに記録されます。このtest.hexを別のATmega328Pに書き込めば、フラッシュメモリの内容が全てコピーできる事になります。
Arduinoのスケッチが書かれたATmega328Pのフラッシュメモリを読み出すと、ブートローダとスケッチの情報がまとめて読み出されます。その.hexファイルを別のATmega328Pに書き込めば、ブートローダとスケッチの書き込みが同時に行われるため、量産時に手間を省く事ができます。(他にもヒューズバイトとロックビットバイトの書き込みは必要)
AVRマイコンにプログラムを書き込むときに、注意しなければならない事がいくつかあり、それを守らないとプログラムの書き換えがうまくいかない事がありますので、説明します。
先ほどArduino Unoのブートローダを書き込んだ際には、フラッシュメモリ、ヒューズバイト、ロックビットバイトの順で書き込みました。絶対にこの順序で書き込まなければならない訳ではありませんが、書き込み順序には気をつけるべき点があります。特に、ロックビットバイトは、フラッシュメモリやEEPROMの後に書き込むべきです。
avrdudeは、デフォルトの動作では、フラッシュメモリにデータを書き込む前に、チップイレース(Chip Erase)を行います。チップイレースとは、フラッシュメモリ、EEPROMおよびロックビットバイトを消去する(全てのビットを1に初期化する)事です。(ただし、EESAVEヒューズビットが0なら、チップイレースの際にEEPROMは消去されません) チップイレースの際には、ヒューズバイトは影響を受けません。
フラッシュメモリよりロックビットを先に書き込んでしまうと、フラッシュメモリの書き込みの際に行われるチップイレースで、ロックビットが消去されてしまうので、ロックビットの書き込みが無効になります。また同様の理由から、EEPROMの書き込みをする場合も、フラッシュメモリの書き込みの後に行う必要があります。(ただし、EESAVEヒューズビットが0の場合はこの限りではない)
ロックビットバイトは、設定内容によっては、EEPROMの書き換えを禁止してしまうので、EEPROMの書き込みをする場合は、ロックビットバイトの書き込みより先に行うべきです。
ヒューズバイトはチップイレースの影響を受けないので、基本的にどのタイミングで書き込んでもいいのですが、書き込む内容によっては、ライタからの書き込み動作に影響する場合があるので不用意にRSTDISBLヒューズビットを0にしないやマイコン内部のクロック発振回路を使わない設定の場合は、書き込み時にも外部の発振回路が必要の項で説明するように、書き込む順番に注意が必要な場合があります。
RSTDISBLヒューズビットは、/RESETピンをリセット信号の入力に使うか、GPIOや割り込み入力などの他のヒューズビットを使うかを決めるヒューズビットです。RSTDISBLヒューズビットの意味を表11に示します。
RSTDISBLの値 | 意味 |
---|---|
0 | /RESET端子は、GPIOや割り込み入力などに使われ、外部リセットは受け付けない。このモードでは、ICSPによるプログラム等の書き込みはできない。 |
1 | /RESET端子は、外部からのリセット信号の入力に使われ、GPIOや割り込み入力などには使えない。(工場出荷時設定) |
不用意にRSTDISBLの値を0にしてしまうと、それ以降、ICSPによるプログラム等の書き込みができなくなりますので、注意してください。(ただし、パラレルプログラマという書き込み器を使えば、RSTDISBLを1に書き戻したり、RSEDISBLが0の状態でプログラムの書き込みをしたりできる) RSTDISBLビットを含むヒューズバイト(ATmega328Pの場合は上位ヒューズバイト)を書き換える際には、書き込む値を間違わないように十分な注意が必要です。
なお、使用できるI/Oピンを1つ増やしたいなどの理由でRSTDISBLを0にしたい場合は、RSTDISBLビットを含むヒューズバイトを一番最後に書き込む必要があります。
SPIENというヒューズビットは、0の時にはICSPを用いたプログラム等の書き込み・読み込みを許可し、1の時にはそれらを禁止します。ICSPでSPIENビットを0から1に書き換えられる仕組みにしておくと、SPIENビットの書き換え以降に、ICSPを用いたプログラムなどの書き込み・読み込みができなくなるため、ICSPを用いてSPIENビットの操作をしようとしても無視するようになっています。avrdudeとArduinoISPを用いてSPIENビットを1に書き換えようとすると、書き込みの後のベリファイ時にエラーが発生します。
AVRマイコンは、クロック信号の発生の方法として、大雑把に分類すると、次の3つのモードを持っています。
これらのクロックのモードの選択は、ヒューズビットの書き換えにより行います。(ATmega328Pの場合はCKSEL0~3の4ビットで設定する) ヒューズビットを1の方法(マイコン内部のクロック発振回路を用いる方法)以外に設定すると、それ以降、設定に応じた外部回路がないと、フラッシュメモリ、EEPROM、ヒューズビット、およびロックビットの書き換えができなくなります。
これは、フラッシュメモリなどの書き込みにもクロックが必要だからです。新品のAVRマイコンは、マイコン内部のクロック発振回路を用いる設定になっているので、外部回路がなくてもフラッシュメモリ等の書き換えが可能ですが、ヒューズビットを書き換えて、クロックの発振に外部回路が必要な2または3の方法を用いるモードに設定すると、それ以降は外部回路を接続しない限りは、フラッシュメモリなどの書き換えができなくなります。
なお、Arduino Unoは16MHzの水晶振動子を用いてクロックを発生しています(3の方法)から、一度ブートローダを書き込んだ後は、水晶振動子がないと、ブートローダの書き換えができなくなります。ただし、Arduino Uno用ブートローダライタシールドやArduino用ブートローダ/スケッチライタには、水晶振動子が付いていますので、その点の心配は必要がありません。
新品のATmega328Pを使う場合は、水晶振動子を使わない書き込み回路でも1度だけブートローダが書き込めますが、この場合はCKSEL0~3を含む下位ヒューズバイトを最後に書き込む必要があります。
このページでは、コマンドラインからavrdudeを使用し、ArduinoISPを用いたライタでAVRマイコンにプログラム等を書き込む方法について説明しました。次のページでは、Atmel Studio上でArduinoISPを使う方法について説明します。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |