「ATmega328のヒューズ初期化方法」の版間の差分
(→手順) |
|||
| (同じ利用者による、間の3版が非表示) | |||
| 21行目: | 21行目: | ||
ATmega168用 : [[ファイル:EZ HVFuse for ATmega168.zip|フレームなし|中央]]<br> | ATmega168用 : [[ファイル:EZ HVFuse for ATmega168.zip|フレームなし|中央]]<br> | ||
ATmega328用 : [[ファイル:EZ HVFuse for ATmega328.zip|フレームなし|中央]]<br> | ATmega328用 : [[ファイル:EZ HVFuse for ATmega328.zip|フレームなし|中央]]<br> | ||
ATmegaマルチ : [[ファイル:EZ HVFuse Multi ATmega.zip|フレームなし|中央]] | |||
<br> | <br> | ||
次に、下図のように回路を作成する。<br> | 次に、下図のように回路を作成する。<br> | ||
| 39行目: | 40行目: | ||
== チップシグネチャ == | == チップシグネチャ == | ||
全てのAVRマイクロコントローラは、デバイスを識別するために 3 バイトのシグネチャコードを備えている。<br> | |||
このコードの読み出しは、シリアルモードでもパラレルモードでも、デバイスがロックされていても可能である。<br> | |||
<br> | |||
これらの3つのバイトは別々のアドレス空間に格納されている。<br> | |||
ATmega48 / 88 / 168 / 328 と ATmega48PB / 88PB / 168PB / 328PB ではデバイスシグネチャバイトに違いがある。<br> | |||
<br> | |||
下表にATmegaのチップシグネチャを示す。<br> | 下表にATmegaのチップシグネチャを示す。<br> | ||
<center> | <center> | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! style="text-align:center; width:300px;" | ATmegaマイコン | ||
! style="text-align:center; width:300px;" | チップシグネチャ | |||
|- | |||
| style="text-align:center;" | ATmega8 | |||
| style="text-align:center;" | 0x1E9307 | |||
|- | |- | ||
| | | style="text-align:center;" | ATmega48<br>ATmega48A | ||
| style="text-align:center;" | 0x1E9205 | |||
|- | |- | ||
| | | style="text-align:center;" | ATmega48PA | ||
| style="text-align:center;" | 0x1E920A | |||
|- | |- | ||
| | | style="text-align:center;" | ATmega48PB | ||
| style="text-align:center;" | 0x1E9210 | |||
|- | |- | ||
| ATmega88A || 0x1E930A | | style="text-align:center;" | ATmega88<br>ATmega88A | ||
| style="text-align:center;" | 0x1E930A | |||
|- | |- | ||
| ATmega88PA || 0x1E930F | | style="text-align:center;" | ATmega88PA | ||
| style="text-align:center;" | 0x1E930F | |||
|- | |- | ||
| | | style="text-align:center;" | ATmega88PB | ||
| style="text-align:center;" | 0x1E9316 | |||
|- | |- | ||
| | | style="text-align:center;" | ATmega168<br>ATmega168A | ||
| style="text-align:center;" | 0x1E9406 | |||
|- | |- | ||
| | | style="text-align:center;" | ATmega168P<br>ATmega168PA | ||
| style="text-align:center;" | 0x1E940B | |||
|- | |- | ||
| ATmega328P || 0x1E950F | | style="text-align:center;" | ATmega168PB | ||
| style="text-align:center;" | 0x1E9415 | |||
|- | |||
| style="text-align:center;" | ATmega328 | |||
| style="text-align:center;" | 0x1E9514 | |||
|- | |||
| style="text-align:center;" | ATmega328P | |||
| style="text-align:center;" | 0x1E950F | |||
|- | |||
| style="text-align:center;" | ATmega328PB | |||
| style="text-align:center;" | 0x1E9516 | |||
|} | |} | ||
</center> | </center> | ||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:AVR]] | [[カテゴリ:AVR]] | ||
2025年11月21日 (金) 17:32時点における最新版
概要
AtmelのAVRマイコンは、6本線のISP接続で簡単にファームウェアのダウンロード等が出来るが、
クロックソースを設定するヒューズビットの値を間違って書き込んだりすると、ISPでは回復するのが難しい事態に陥る事がある。
そこで、ヒューズリセッター(ヒューズ設定を出荷時状態に戻す)という装置を使用して復帰させる方法がある。
ここでは、Arduino-based AVR High Voltage Programmerをベースに、ヒューズリセッターを作成を記載する。
必要なもの
- ヒューズリセットしたいAVRマイコン(ATmega168 / 328)
- Arduino Uno
- 12[V]電源
- ブレッドボード
- NPNトランジスタ(2SC1815)
- 1[kΩ]抵抗 2本(R1, R4)
- 10[kΩ]抵抗 2本(R2, R3) ※トランジスタに合わせて1[kΩ]から10[kΩ]の間で調整する
- ジャンパーワイヤ
手順
まず、Arduinoに次のスケッチをダウンロードおよび解凍する。
ATmega168用 : ファイル:EZ HVFuse for ATmega168.zip
ATmega328用 : ファイル:EZ HVFuse for ATmega328.zip
ATmegaマルチ : ファイル:EZ HVFuse Multi ATmega.zip
次に、下図のように回路を作成する。
- 回路の作成を終えた後、PCとArduino Uno、ブレッドボードと12[V]電源を接続する。
- Arduino IDEを起動して、シリアルモニタを表示させる。
シリアルモニタの下の設定は、CRのみ(改行なし以外なら他でも可)、9600[bps]を選択する。 - [D]キーを押下後、[Enter]キーを押下して、ATmegaシリーズの検出を行う。
検出に失敗した時は、12[V]電源とUSBケーブルを抜いて回路が正常に接続されているか確認する。 - 検出に成功した時、ヒューズの規定値書込みコマンド[W]キーを押下すると(確認のために[Y]キーも押下)、出荷時のヒューズをATmegaシリーズに書き込む。
- 最後に、[R]キーを押下して、ヒューズが正常に書き込まれているか確認する。
もし、Lock bitsが0xFF以外になっており、ヒューズ設定が書き込まれない場合、[C]キーを押下してATmega全体の初期化が出来る。
ただし、Lock bitsだけでなく、Flash ROMやEEPROMの内容も消去される。
この操作でヒューズビットの書き換えが出来るようになるので、再度、[W]キーを押下する。
その他、[L]、[H]、[E]、[K]キーを押下して、各ヒューズビットやLock Bitsの値を指定して書き込む事も出来る。
チップシグネチャ
全てのAVRマイクロコントローラは、デバイスを識別するために 3 バイトのシグネチャコードを備えている。
このコードの読み出しは、シリアルモードでもパラレルモードでも、デバイスがロックされていても可能である。
これらの3つのバイトは別々のアドレス空間に格納されている。
ATmega48 / 88 / 168 / 328 と ATmega48PB / 88PB / 168PB / 328PB ではデバイスシグネチャバイトに違いがある。
下表にATmegaのチップシグネチャを示す。
| ATmegaマイコン | チップシグネチャ |
|---|---|
| ATmega8 | 0x1E9307 |
| ATmega48 ATmega48A |
0x1E9205 |
| ATmega48PA | 0x1E920A |
| ATmega48PB | 0x1E9210 |
| ATmega88 ATmega88A |
0x1E930A |
| ATmega88PA | 0x1E930F |
| ATmega88PB | 0x1E9316 |
| ATmega168 ATmega168A |
0x1E9406 |
| ATmega168P ATmega168PA |
0x1E940B |
| ATmega168PB | 0x1E9415 |
| ATmega328 | 0x1E9514 |
| ATmega328P | 0x1E950F |
| ATmega328PB | 0x1E9516 |