設定 - Microchip Studio
起動画面
ファームウェアを作成するため、最初に[新しいプロジェクト]を作成する。
以下に3つの方法を示す。
1 : [Start Page]画面の左上の[New Project]を押下する
2 : [New Project]アイコンを押下する
3 : [File]メニュー - [New] - [Project]の順に選択する
[New Project]画面
- [GCC C Executable Project]を選択する。
- 任意のプロジェクト名を入力する。
- プロジェクトを保存するディレクトリを選択する。
- プロジェクト名とソリューション名が異なる場合は入力する。 (1つのソリューションに複数のプロジェクトを作成することが可能)
- [OK]ボタンを押下する。
マイコン選択画面
前図で[OK]ボタンを押下すると、マイコン選択画面に遷移する。
ここでは、ATmega328Pを選択する。
1. [Device Family]タブで[megaAVR, 8bit]を選択する
2. [ATmega328P]を選択する
3. [OK]ボタンを押下する
プログラム入力画面
プログラムを作成する。
作成し終えたら、以下のいずれかの方法でビルドを行う。
- [ビルド]アイコンを押下する
- [ビルド] - [ビルド プロジェクト名]の順に選択する
ビルドが成功すると[Output]画面の最後に"Build succeeded."と表示される。
AVR ISP mk2
ATMEL社の純正ライタで、ATMEL Studioで作成したファームウェア(HEXファイル)をマイコンに書き込むためのものである。
書き込みはATMEL Studioから行うことができる。
以下に、[ATMEL Studio]でのファーウウェアの書き込み方法を示す。
AVR ISP mk2のピンアサインは下図に示す配置となっている。
ファームウェアの書き込み
- PCにAVR ISP mkII等のライタを接続する。
- 同様に、ライタとATmegaマイコンを接続する。
- [Device Programming]アイコンを押下する。
または、[Tool] - [Device Programming]を選択する。 - [Device Programming]画面が表示されるので、画面左上にある[Device]プルダウンからターゲットとなるATmegaマイコン名を選択してm[Apply]ボタンを押下する。
- [Device Programming]画面の左ペインから[Memories]ボタンを押下する。
- [Device Programming]画面の右ペインにある[Flash]エディットボックスから、書き込むファームウェア (HEXファイル) を選択する。
- [Program]ボタンを押下する。
これは、ATmegaマイコンのフラッシュメモリを消去した後、ファームウェアを書き込みおよびベリファイを行う。
ロックビットの設定
ロックビットを設定することにより、ファームウェアの書き込みを禁止、または、ブートローダを起動を防ぐ等の設定を行うことができる。
- [Device Programming]アイコンを押下する。
または、[Tool] - [Device Programming]を選択する。 - [Device Programming]画面が表示されるので、[Device]プルダウンからATmegaマイコン名を選択して、[Apply]ボタンを押下する。
- [Device Programming]画面の左ペインから[Lock bits]を選択する。
例えば、ATmega328マイコンのLock bitsには、以下の示すような設定値がある。
- Lock Bit Byte (LB)
- 0xFF (デフォルト)
- アプリケーションとブートローダの両方の読み取り・書き込み・検証が可能。
- 0x3F
- アプリケーションの読み取り・書き込み・検証が可能、ブートローダの読み取りのみ可能。
- 0x0F
- アプリケーションの読み取りのみ可能、ブートローダの読み取りのみ可能。
- 0x00
- アプリケーションとブートローダの両方の読み取りのみ可能。
- 0xFF (デフォルト)
- Boot Loader Protection Mode (BLB0 - BLB1)
- 0b11 (デフォルト)
- ブートローダの読み取り・書き込み・検証が可能。
- 0b10
- ブートローダの読み取りのみ可能。
- 0b01
- ブートローダの書き込み・検証が禁止、読み取りは可能。
- 0b00
- ブートローダの読み取り・書き込み・検証が禁止。
- 0b11 (デフォルト)
- Application Protection Mode (BLB02)
- 1 (デフォルト)
- アプリケーションの読み取り・書き込み・検証が可能。
- 0
- アプリケーションの書き込み・検証が禁止、読み取りは可能。
- 1 (デフォルト)
これらの設定値を組み合わせることで、ATmega328マイコンの保護レベルを調整することができる。
例えば、LBを0x3F
、BLB0 - BLB1を0b11
、BLB02を1
に設定する場合、アプリケーションの読み取り・書き込み・検証が可能となり、ブートローダの読み取りのみが可能となる。
※注意
Lock bitsを設定すると、それを解除するにはATmegaマイコンをハイボルテージプログラミングモードで消去する必要があるため、Lock bitsの設定は慎重に行う必要がある。
不適切なLock bits設定は、ATmegaマイコンの再書き込みを困難または不可能にする可能性がある。
ATmegaマイコンをハイボルテージプログラミングモードで消去する手順を知りたい場合は、ATmega328のヒューズ初期化方法のページを参照すること。
ヒューズバイトの設定
ヒューズバイト (Fuse Bytes) と呼ばれる領域および設定も存在する。
ヒューズバイトは、Lock bitsとは別の設定領域であるが、ATmegaマイコンの動作に関連する重要な設定を含んでいる。
ヒューズバイトとロックビットの両方を適切に設定することにより、ATmega328マイコンのセキュリティと動作を細かく制御することができる。
ただし、これらの設定を変更する場合は、ATmegaマイコンのデータシートを参照して、設定を十分に理解した上で行うことが重要である。
- Boot Reset Vector Enable (BOOTRST)
- 1 (デフォルト)
- ブートローダ領域が有効。
- 0
- ブートローダ領域が無効
- 1 (デフォルト)
- Brownout Detector Level (BODLEVEL0 - BODLEVEL2)
- Brownout Detector Level (ブラウンアウト検出レベル) は、ATmegaマイコンの動作電圧が一定のレベル以下に低下した場合に、マイコンをリセットするための設定である。
- ATmegaマイコンは、適切な電圧範囲内で動作するように設計されている。
- 動作電圧が低すぎると、マイコンが正常に動作しなくなる可能性がある。
- このような状況を防ぐために、Brownout Detector (ブラウンアウト検出器) が使用される。
- ブラウンアウト検出器は、電源電圧を監視して、設定されたレベル以下に電圧が低下した場合に、ATmegaマイコンをリセットする。
- これにより、電圧が回復するまでATmegaマイコンの動作を停止させて、不安定な動作を防ぐことができる。
- 適切なブラウンアウト検出レベルを選択することにより、ATmegaマイコンが動作する電圧範囲を制限して、低電圧状態でのマイコンの誤動作を防ぐことができる。
- ただし、ブラウンアウト検出器を有効にすると、わずかな電力消費の増加や、リセット時間の延長などのデメリットがある。
- アプリケーションの要件に応じて、ブラウンアウト検出レベルを適切に設定することが重要である。
- 0b111 (デフォルト)
- Brown-out検出無効。
- 0b110
- Brown-out検出レベル : 1.8[V]
- 0b101
- Brown-out検出レベル : 2.7[V]
- 0b100
- Brown-out検出レベル : 4.3[V]
- その他の値
- 予約済み
- Clock Divide (CKDIV8)
- ATmega328マイコンを外部32.768[kHz\の水晶発振器を使用して16[MHz]で駆動する場合、Clock Divide (CKDIV8) は
0
に設定する必要がある。 - CKDIV8ヒューズは、ATmegaマイコンのクロック周波数を8で割るかどうかを制御する。
- CKDIV8が
1
に設定されている場合、システムクロックは8で割られる。 - CKDIV8が
0
に設定されている場合、システムクロックは分周されない。 - 32.768[kHz]の水晶発振器を使用して16[MHz]でATmegaマイコンを駆動するには、以下の手順に従う。
- 32.768[kHz]で水晶発振器をATmegaマイコンの外部クロック入力ピン (XTAL1とXTAL2) に接続する。
- ヒューズバイトの設定で、外部クロックソースを選択する。 (低電力水晶発振器モード - Low-power Crystal Oscillator Mode)
- CKDIV8ヒューズを
0
に設定して、クロック分周を無効にする。 - ATmegaマイコンは、32.768[kHz]の水晶発振器の周波数を内部で逓倍して、16[MHz]のシステムクロックを生成する。
- 0 (デフォルト)
- クロック分周なし
- 1
- クロックを8分周
- ATmega328マイコンを外部32.768[kHz\の水晶発振器を使用して16[MHz]で駆動する場合、Clock Divide (CKDIV8) は
- Self-Programming Enable (SELFPRGEN)
- ATmega328マイコンの自己プログラミング機能を有効または無効にするための設定である。
- 自己プログラミングとは、マイコンが自身のフラッシュメモリを読み書きできる機能のことを指す。
- 通常、ATmegaマイコンのフラッシュメモリは外部プログラマを使用して書き込まれる。
- ただし、自己プログラミング機能を使用すると、ATmegaマイコン自身がフラッシュメモリを読み書きできるようになる。
- この機能は、ブートローダの実装やアプリケーション実行中のフラッシュメモリの更新等に使用される。
- ATmegaマイコンは、SPM (Store Program Memory) 命令を使用してフラッシュメモリを読み書きできる。
- この機能を無効にする場合、SPM命令は使用できなくなり、ATmegaマイコンはフラッシュメモリを読み書きできなくなる。
- 一般的に、自己プログラミング機能は有用であるが、セキュリティ上の理由から無効にすることもある。
- 例えば、フラッシュメモリに重要なデータやコードが格納されている場合、自己プログラミング機能を無効にすることにより、不正なアクセスや変更を防ぐことができる。
- ただし、自己プログラミング機能を無効にする場合は、ブートローダの実装等が制限される可能性がある。
- したがって、アプリケーションの要件に応じて、SELFPRGENを適切に設定することが重要である。
- 1 (デフォルト)
- 自己プログラミング機能 (SPM命令) が有効。
- 0
- 自己プログラミング機能 (SPM命令) が無効。
内部メモリの消去
ATmegaマイコンの内部を工場出荷時に戻す場合、以下の手順に従う。
- [Device Programming]アイコンを押下する。
- [Tool] - [Device Programming]を選択する。
- [Device Programming]画面が表示されるので、画面の左ペインから[Memories]を選択する。
- [Device Programming]画面の右ペインにある[Device]プルダウンから[Erase Chip]を選択する。
- [Erase now]ボタンを押下する。
- フラッシュメモリ、EEPROM、Lock bits等のメモリ内部に保持された全てのデータが消去される。
例えば、ATmegaマイコンの内部にブートローダが残っている場合、Atmel ICE等からファームウェアの書き込みができない。
そのため、内部メモリを消去すると、再度、ファームウェアの書き込みやLock bits等が書き込めるようになる。