コンピュータ ウィンドウズ インターネット

ヒューズatmega8の説明。 ATMEL マイクロコントローラー。 ヒューズ。 ヒューズ。 初心者向けの基本ルール

それは何ですか ヒューズビット? この言葉はよく知られているようですが、多くの人はその目的をよく知りません。ボックスにチェックを入れてフラッシュすれば、デバイスは機能するので問題ありません。 これらの FUSE ビットについて少し説明したいと思います。

ヒューズビット ( ヒューズ) – 簡単に言えば、ヒューズはマイクロコントローラーの特定のパラメーターを設定します。これは、ヒューズを微調整するための一種のツールであり、次のようなパラメーターが含まれたり、設定されたりします。
- 発電機周波数、外部または内部発電機
- マイコンファームウェアの読み取り禁止
- タイマーを有効または無効にする
- 水晶発振器の分周
- EEPROOM による消去保護
…等々。 各マイクロコントローラには独自のヒューズがあり、マイクロコントローラが異なればヒューズのリストも異なります。たとえば、ATmega8 には CKOUT ヒューズがありませんが、ATtiny2313 にはあります。 これらすべてのヒューズは、マイクロコントローラーのデータシートに記載されています。

主要ヒューズを扱うときのルールは、自分の操作が正しいかどうか完全に確信がない限り、急いでヒューズを設定しないことです。

ここで、いくつかのヒューズの名前、その指定、およびそれらが与える影響を書き留めてみましょう。 一般に、プログラムをコピーから保護するためのヒューズ (ロック ビット)、特定の機能を確立するヒューズ、およびいわゆる「上位」バイトと「下位」バイトがあります。 ほとんどの場合展示されている最も人気のあるヒューズは次のとおりです。

CKSEL、異なる文字を持つそのようなヒューズは 4 つだけあり、これはグループです CKSEL 0、CKSEL 1CKSEL2とCKセル3、クロック ジェネレーターの周波数とそのタイプを決定します。クロック パルスは、ほとんどすべてのマイクロコントローラーの動作に必要です。 多くのマイクロコントローラーには内部発振器が備わっていますが、外部発振器を接続し、外部発振器から動作するようにヒューズを設定することもできます。 外部水晶振動子がピンに接続されています エクスタル1そして エクスタル2さらに、一対の約 20pf のコンデンサが半田付けされており、一端は石英に、もう一端はマイナスに接続されています。 これらのヒューズの取り付けを間違えると、マイクロコントローラーが「ロック」され、コントローラーを復元するためにクロック信号が XTAL1 レッグに送信されます。このようにロックされます。 このジェネレーターは、ほぼすべてのロジックや 555 タイマーから作成できます。

1 つのトランジスタ、1 対の抵抗、水晶振動子を使用する単純な回路と、K155LA3 のようなチップを使用するより複雑な回路があります。 これらの方法は、そのような欠陥のあるコントローラーを100%復活させます

ヒューズグループ SUT1そして SUT0- MK クロック ジェネレーターの開始モードを制御し、電源投入後の MK の開始速度も設定するヒューズ ビット。 ヒューズ関連 クセル、つまり CKSEL0.

CKOPT- ビットは、水晶振動子を動作させるための内蔵発振器の動作を決定し、水晶上のクロック信号の発振の「振幅」を設定します。 このビットは頻繁にプログラムされます。

RSTDISBL– 非常に危険なヒューズです。設定を誤ると出力が無効になる可能性があります。 レセT、その後、プログラマーで ISP をプログラムする機能は失われます。 少し RSTDISBL出力を変える リセット I/Oポートに接続します。

スピエン– ヒューズ。MK が SPI インターフェイス経由で動作できるようにします。 すべてのマイクロコントローラーはビットがすでにインストールされた状態でリリースされます スピエン。 危険な融合と考えられています。

イーセーブ- EEPROOM SAVE と読むと便利です。文字通り「EEPROOM を保存する」という意味で、このヒューズは EEPROM を消去から保護します。 たとえば、次にファームウェアをコントローラにアップロードするときに、次のように設定できます。 EESAVE = 0、消去しても MK EEPROOM はそのまま残ります。

ブーツZ、ビットのグループで構成されます。 ブーツZ1そして ブーツZ0、ビットに関連付けられた、録画された番組のメモリ領域のサイズを決定します。 ブースト.

ブースト、プログラムの実行が開始されるアドレスを決定します。 ビットが設定されている場合、つまり もし ブートRST=0とすると、ブートローダー領域のアドレスからプログラムが開始されます。

ボーデン- ビット。設定されると ( ボーデン=0)、供給電圧を制御します。極度に低い電圧では、マイクロコントローラーが再起動したり、故障したりする可能性があります。 と関連した ボードレベル。

ボードレベル。 - 供給電圧レベル検出器がトリガーされ、供給電圧がそのレベルを下回ったときにコントローラーが「再起動」する瞬間を決定します。

セルフプルゲン- を許可するビット ( SELFPRGEN=0) または禁止 ( 自己PRGEN =1) プログラムはメモリに書き込みます。

オクデン– このヒューズは、コントローラのメモリからのプログラムの読み取りを許可または禁止します。

以前、記事の中で、一部のプログラムではヒューズがミラーリングされた方法で設定されていると述べました。 覚えて プログラムされたヒューズ=0 、A ない プログラム済み=1 . 番組内 アルゴリズムビルダー、UniProfヒューズは一方向に設定され、プログラムで設定されます。 ポニープログ、CodeVisionAVR、AVR Studio、SinaProg他のいくつかのヒューズは、前のプログラムのリストと比較してミラー方式で設定する必要があります。

長い間、いわゆる「ヒューズ計算機」がインターネット上に登場してきました。これらは、マイクロコントローラーの構成を支援するために設計された特別なアプリケーションです。 アプリケーションは直感的で、お分かりいただけると思います。コントローラーのリストで必要な MK を選択し、必要な機能を選択し、ヒューズ ボックスの下にチェックを入れるだけで、すべてが非常にシンプルです。

これらのアプリケーションは非常に便利です。 たとえば、最近、プロジェクトの作成者が理解できない文字や数字、または初心者がこれが何を意味し、どのヒューズを設定する必要があるかを理解できない言葉でヒューズの値を書くことが非常によくあります(多くの場合、記事「どのヒューズを設定する必要がありますか?」)。 この点では、ヒューズ計算ツールが非常に役立ちます。

「ヒューズとは何ですか? なぜヒューズが必要ですか?」と問われれば、その目的を説明できるようになると思いますが、とりあえずはここまでです。

以前の記事で、これらのビットには干渉しないようにアドバイスしました。 これには理由があって、これらのビットを誤って設定すると、コントローラのさらなる点滅や使用が永久にブロックされる可能性があるからです。

しかし、コントローラーのこの機能を知らなければ、先に進むことはできません。 ということで、順番に書いていきます。 コントローラーのバージョンが異なるとヒューズの数が異なり、一部が欠落している可能性がありますが、主なヒューズは常に存在します。 それらを見ていきましょう。

構成ビットは特別なメモリ領域に配置されており、コントローラの書き込み時にプログラマを使用してのみ変更できます。 上位バイトと下位バイトがあります。 通常、下位バイトは周波数を担当し、上位バイトはあらゆる種類のつまらないものを担当します。

それで、重要なことは次のとおりです。

Atmel AVR は次の表記法を使用します: ゼロにリセットされたヒューズ ビットはアクティブとみなされます。 含まれています。

RSTDSBL ビットは、その名前が示すように、RESET DISABLE です。 このオプションを有効にすると、RESET レッグが I/O ポートに変わりますが、そのため、ISP 経由でコントローラーを更新する機会が失われます。

したがって、RESET をオフにする (そして、追加の脚の形で小さなヒントと引き換えにファームウェアに大きなバグが発生する) には、このビットに 0 を書き込む必要があります。

一方で、それは非論理的で歪んでいます。 あたかも世界中で受け入れられている表記法ではゼロがずれているかのようですが、ここではその逆です。 一方、これは彼らのコントローラーであり、彼らはやりたいことをします。 一度覚えればそれで終わりです。 そして一般に、エレクトロニクスでは信号としてゼロを受け取ることがよくあります。


ただし、コントローラーは電子技術者が作成し、ファームウェアのプログラムはプログラマーが作成します。 なんて論理的なんだろう。 そこでプログラマーたちはチェックボックスをめちゃくちゃにしました。 チェックマークはオン (念のため言っておきますが、ゼロです) ではなく 1 であることを標準としてきっぱりと受け入れるべきでしょうか。 したがって、一部の点滅プログラムでは、チェックマークはオプションが有効であることを意味します (FUSE ではビットに 0 が書き込まれます)。他のプログラム (通常は電子技術者によって作成される) では、チェックマークは 1 を意味します。 それらの。 まさにその逆。

混ぜるとどうなるのでしょうか? そしてそれは非常に悪いことになるでしょう。 コントローラが間違ったモードに入り、永久にロックされる可能性があります。 それらの。 一度お願いして、それで終わりです。 到着していました。

いいえ、保存することはできますが、そのためには、高電圧プログラマ、JTAG アダプタ、またはクロック ジェネレータの形で追加のトリックが必要になります。 それはすべて、間違った設定でコントローラーをどのモードに駆動するかによって異なります。

初心者にとっては、通常、ブロックされた MK を復活させるよりも、新しい MK を購入する方が簡単です。 しかし、急いでゴミ箱に捨てないでください。 それにマークを付けて将来のために脇に置いておけば、それを理解して復活させることができます。

クロック構成
デフォルトでは、すべての AVR コントローラ (旧シリーズ AT90S2313、AT90S8535 などを除く) は内部クロック ソースから動作するように設定されています。 それらの。 電力を加えるだけで動作を開始します。 それ以上は何も必要ありません。

ビットはクロックソースを担当します CKSEL
それらを正しく設定すると、コントローラーの周波数とクロック信号のソースを選択できます。

  • CKSEL3…0 = 0000 — 外部信号ソース。

それらの。 XTAL1 入力には方形パルスが供給されます。 これは、複数のコントローラが 1 つの発電機から動作する同期システムで行われることがあります。

技術的な余談
外部クォーツ (CKSEL=1111) から動作するようにコントローラーを設定しようとすると、このモードになることがよくありますが、表記が混乱しているか、あらゆる種類の変態的な点滅プログラムのビットの逆表記によるジョークが原因です。 。 一度クリスタルがブロックされました。 しかし、実際にはCKSELを使って結晶をしっかりと遮断することは不可能です。 通常、石英をはんだ付けし、この石英から始めることですべてが解決されます。 起こり得る最悪の事態は、外部クロック ジェネレーターが必要になることです。 それはクリスタルを復活させるでしょう。 これは、たとえば K155LA3 などの TTL ロジック チップから 5 分で作成されます。インターネット上には多数の回路があります。 555 タイマーを使用するか、2 番目の MK を使用して、脚をけいれんさせる簡単なプログラムを作成することもできます。 オシロスコープをお持ちの場合は、そこから制御発生器の信号を取得できます。その端子は任意の発振器上にある必要があります。 グランドはコントローラのグランドに発振し、ジェネレータの出力はXTAL1に送られます。

しかし、かゆみが耐えられず、コントローラーがロックされており、蘇生用のチップが手元にない場合はどうすればよいでしょうか? ここでは指の方法が機能する場合もあります。 面白いのは、約 50 Hz の周波数を持つ非常にクールな照準が人体に向けられていることです。 オシロスコープのプローブを手で掴んだことのある人なら誰でも、画面にどのようなナンセンスが即座に表示されるかを覚えているでしょう、これがそれです。 このガイダンスをクロック信号として使用してみてはいかがでしょうか? したがって、XTAL1 ピンにワイヤをはんだ付けし、手で掴んで、コントローラーの読み取りまたは書き込みを押します:) すぐに警告しますが、この方法は初めてではなく、非常に時間がかかります。読み取りができず、エラーが発生することもありますが、FUSE ビットを正しい片側に書き直すのに時間がかかるだけで十分です。 私はこのトリックを何度か成功させました。

CKSEL3…0 = 0100 – 内部発振器からの 8 MHz (通常、これらはデフォルトです)
ほとんどの AVR では、この CKSEL 構成は 8 MHz で内部発振器からクロックすることを意味しますが、異なる場合があります。 したがって、この場合はデータシートを注意深く調べてください。 内部校正済み RC オシレーター動作モード プレートへ

たとえば、ファームウェアに干渉せずに調整できるように、外部クロック ジェネレーターが必要になる場合があります。 これを行うには、図に示すように RC チェーンを接続し、次の式を使用して周波数を計算します。 f = 1/3RCここで、f はヘルツ単位の周波数、R と C はそれぞれ抵抗器の抵抗値とコンデンサの静電容量 (オームとファラッド) です。

  • CKSEL3…0 = 0101 – 0.9 MHz 未満の周波数の場合
  • CKSEL3…0 = 0110 – 0.9 ~ 3 MHz
  • CKSEL3…0 = 0111 – 3 ~ 8 MHz
  • CKSEL3…0 = 1000 – 8 ~ 12 MHz

このプレートは ATmega16 にのみ有効です。他の MK では異なる場合があります。 詳細についてはデータシートを確認してください。

内部発振器と外部 RC 回路の問題は、通常、周波数の不安定性です。つまり、クロックを作ると、それほどではありませんが、嘘をつきます。 したがって、場合によっては、コントローラをクォーツで実行すると便利です。また、クォーツでのみ最大周波数を生成できるため、プロセッサのパフォーマンスも向上します。

  • CKSEL3…0 = 1001 – 低周波「クロック」クォーツ。

数十キロヘルツ。
低速アプリケーション、特に正確な動作と低消費電力が必要な場合に使用されます。

通常のクォーツの場合は状況が多少異なります。 ここで、最大クォーツ周波数もビットによって異なります。 CKOPT CKOPT = 1 の場合:

  • CKSEL3…0 = 1010 または 1011 - 0.4 ~ 0.9 MHz
  • CKSEL3…0 = 1100 または 1101 - 0.9 ~ 3 MHz
  • CKSEL3…0 = 1110 または 1111 – 3 ~ 8 MHz (または CKOPT=0 の場合は 1 ~ 16 MHz)

で、もし CKOPTが 0 に等しい場合、同じ CKSEL 値を使用して、クォーツを 1 ~ 16MHz に設定できます。

もちろん、16MHzクオーツは「L」インデックスのないメガにしか搭載できません。 (とはいえ、練習が示すように、Lku は非常にうまくオーバークロックすることもできます。私の ATMega8535L は 16 MHz で動作しましたが、動作に奇妙な影響がありました。そのため、あまりいじらずにオーバークロックを削除しました)。 繰り返しますが、上記のすべては Mega 16 にのみ正確に対応します。その他は若干異なる場合があります。

少し CKOPTクロック信号のスイングを指定します。 それらの。 水晶からの出力における振動の振幅。 CKOPT = 1 の場合、範囲は狭いため、より低い消費電力が達成されますが、干渉に対する耐性は、特に高速時に低下します (上記の表から判断すると、最大値はまったく達成できません。)正確には、起動することはできますが、誰も信頼できる保証はありません)。 しかし、CKOPT がアクティブ化され、それに 0 が書き込まれると、信号スイングは 0 から電力に即座に変化します。 これにより消費電力は増加しますが、干渉に対する耐性が増加し、最大速度も増加します。 MK をオーバークロックする場合は、CKOPT を 0 に設定することがさらに必要です。

SCKDIV8 ビットも言及する価値があります。これは Atmega16 には存在しませんが、他の AVR コントローラではよく見られます。 これはクロック分周器です。 インストールされているとき、つまり ゼロの場合、ビット CKSEL0...3 で設定された周波数は 8 で除算されます。Dlinny は一度これに行き詰まり、なぜうまくいかないのかを理解しようと長い間試みました。 利点は、希望する除算係数 (たとえば 1) を CLKPR レジスタに書き込むことで、この除算器をプログラムで無効にできることです。 冗談は、SCKDIV8 がデフォルトでアクティブであるということです。 ので注意してください!

SUTビット MK スタート速度は RESET 解除後、または電源投入後に設定してください。 そこの値は 4ms から 65ms まで変化します。 私の実践では、このオプションを使用する機会はまだありません。その必要はありません。 そこで、最大 65 ミリ秒に設定しました。これにより、より信頼性が高くなります。

少し RSTDISBLラインを変えることができる リセットこれは、一部の小さな Tiny にすべてのタスクを実行するのに十分な脚がない場合に非常に必要になる場合がありますが、リセットを無効にすると、5 本のワイヤを使用してコントローラをフラッシュする機能が自動的に無効になることを覚えておく必要があります。 また、再配線するには、高電圧の並列プログラマが必要になります。これは数千ドルかかり、可能ではありますが、膝の上で行うには問題があります。

ザポドリャンスキーの 2 番目のビットは、 スピエンこれを 1 に設定すると、単純なパスを使用してフラッシュする機能も即座に失われ、再び並列プログラマが必要になります。 ただし、少なくとも新しい AVR では SPI 経由でリセットすることは不可能であることは安心です (古い AVR では、AT90S*** では可能でした)。

WDTONウォッチドッグとしても知られるドッグタイマーの責任者です。 このタイマーは、プロセッサが定期的にリセットされない場合にプロセッサを再起動し、フリーズを防ぎます。 WDTON が 0 に設定されている場合、ドッグをオフにすることはできません。

ボードレベルそして ボーデン- 電圧制御モードです。 実際、臨界レベルを下回る特定の電圧しきい値では、コントローラーに非常に不具合が生じ始める可能性があります。 たとえば、EEPROM などに自然発生的に損傷を与える可能性があります。 さて、どう思いましたか、数週間餌を与えないと、あなたも調子が悪くなり始めます:)

したがって、この問題を解決するために、AVR には電源スーパーバイザーが組み込まれています。 彼は、電圧が適切なレベルを下回っていないかを確認します。 十分な電圧がない場合は、単に RESET が押されるだけで、コントローラーは起動できません。 これら 2 つのヒューズがこの機能を駆動します。 ボーデン含まれます、そして ボードレベル 2 つの重要レベルのいずれかを選択できます。 どれの? それについては明らかにしません。データシート (システム制御とリセットのセクション) を参照してください。

ヤタゲン— JTAGを有効にします。 デフォルトではアクティブです。 それらの。 JTAGが有効になっています。 このため、MEGA16 (および JTAG を備えた 32 およびその他) は、JTAG を担当するポート C ピンを使用できません。 ただし、JTAG デバッガを接続し、それを使用してコントローラの頭脳にアクセスすることができます。

イーセーブ— EEPROM の消去に対する保護。 これをオンにすると、MK が完全にリセットされても、EEPROM ゾーンは消去されません。 たとえば、動作中に貴重なデータが EEPROM に書き込まれる場合に役立ちます。

ブースト— 開始ベクターをブートローダー領域に転送します。 このチェックボックスが有効になっている場合、MK はアドレス 00000 からではなく、ブート セクター アドレスから開始され、最初にブートローダーを実行します。 これについての詳細は、ローダー経由のファームウェアに関する記事に書かれています。

ブーツZ0..1— ブート セクターのサイズを決定するビットのグループ。 詳細については、データシートを参照してください。 これらはコントローラーごとに異なります。

ロックビット
実際、これはヒューズとは何の関係もありません。 これらはセキュリティビットです。 これらのビットを設定すると、クリスタルからの読み取りが無効になります。 フラッシュまたは EEPROM のいずれか、あるいは両方を同時に。 デバイスを販売する場合にのみ必要です。 邪悪な競合他社がファームウェアを漏洩して、あなたのデバイスの 9,000 個以上のクローンを中国に注文して、あなたがパンツを履かなくなることを防ぐためです。 それらは危険をもたらすものではありません。 これらでクリスタルをブロックした場合は、完全消去を実行すれば問題ありません。

インストールされたロック ビットの特徴は、ファームウェアが読み取り可能であることです。ファームウェア内ではバイトが順番に並んでいます。 それらの。 00、01、02、03、04...FF、00...こんなクソを見たことがあるか? したがって、ファームウェアを盗むのはあなたの運命ではありません - ファームウェアは保護されています =)

安全上のご注意
FUSE ビットを扱うときの主なルールは、「注意、注意、そして再度注意」です。 信頼できるソースからコピーした場合でも、データシートを確認せずに FUSE を設定しないでください。

点滅しているプログラムのチェックマークの意味を必ず理解してください。 ゼロか 1 か。 オンでもオフでも! 基準なんてない!!!

ファズ ビットが 2 つの数値 (最上位ビットと最下位ビット) で指定されている場合、それらはデータシートにあるように設定されます。 0 が有効になります。

FUSE を使用するための 2 番目の鉄則。 このことを永遠に覚えておいて、私が教えなかったなどと言わないでください。

まず持っているものを読んでから、必要なものを書きます

読み取り - 変更 - 書き込み。 唯一の方法。 なぜ? はい、次のようなことがよくあります。「FUSE」タブを開いたのに、プログラマーが愚かで、それらをカウントしませんでした。 その結果、どこにでも空のセルができてしまいます。 満足したので、SKSEL に必要なものだけを設定し、WRITE を押しました。 ここで登場するのが、通常、その男です。 なぜなら 変更した部分だけでなく、セクション全体がコントローラーに書き込まれます。 同じ空のセルを使用します。 そこがどれほど混乱しているか想像してみてください。 同じこと! そして、彼らはコメントやフォーラムで苦情を言いに走り、私はそのようなものには何も触れていない、ただそこにあるだけだと言いました。 そう、今すぐ!

もう一度、読んで、修正して、書いてください!

手がかり:
馴染みのない点滅プログラムのヒューズ ビットがどのタイプ (直接または逆) であるかを一目で判断するにはどうすればよいでしょうか?
演繹的方法: Read Fuses を押して SPIEN ビットの状態を確認します。このビットは常にアクティブであり、リセットされている場合、プログラマはコントローラを検出することさえできません。 SPIEN が 1 の場合、PonyProg のようにヒューズが逆であることを意味します。 ゼロの場合は、Atmel 表記に従っていることを意味します。

AVR ファミリのマイクロコントローラ (MCU) のヒューズ ビットとロック ビット (コンフィギュレーション ビットとブロッキング ビット) の設定は、特に初心者にとってはかなり難しい作業であり、MCU のセットアップとプログラミングの際に混乱を引き起こす可能性があります。 ビットを見逃したり、正しく設定しなかった場合、プログラムが正しく動作しなかったり、さらに悪いことに、シリアル インターフェイス経由で MK を回路内でプログラムできなくなったりする可能性があります。

各 MK の技術ドキュメントにはヒューズ ビットとロック ビットに関する包括的な情報が記載されていますが、初心者は、コマンドを実行してコンフィギュレーション ビットとロック ビットを書き込む前に多少の不安を感じることがよくあります。 この記事では、AVR ファミリ MK のコンフィギュレーション ビットの主な機能について説明します。

ヒューズおよびロックビット

構成ビットの詳細に入る前に、理解して覚えておくべきことが 1 つあります。

  • ヒューズ ビット = 1 は、プログラムされていない (クリア、非アクティブ) ことを意味します。
  • ヒューズ ビット = 0 は、ヒューズがプログラムされている (セット、アクティブ) ことを意味します。

これは、ヒューズ ビットとロック ビットをプログラミングする際の混乱の主な原因の 1 つです。 私たちは、パラメーターの値を設定するということは 1 を書き込むことを意味すると考えることに慣れていますよね。 AVR ヒューズ ビットの場合はその逆で、任意のビットを設定すると 0 を書き込むことになるため、これを覚えておく必要があります。

構成ビットは、不揮発性メモリの別の領域にあります。 たとえば、MK には、正しく動作するためにプログラムする必要がある 4 つの構成バイトがあります。 これらのバイトの 1 つはロック ビットを含み、残りの 3 バイト (高、低、拡張と呼ばれることが多い) には構成ビットが含まれます。 このビットのセットは、クロック ソース、ブートローダー領域、ハードウェア リセット動作、ウォッチドッグ タイマーなどの MCU の初期設定を設定します。まず、ロック ビットを見ていきます (図 1)。

AVRマイクロコントローラのタイプに応じて、ロックビットの数は異なりますが、2つの最下位ビットは常に存在します。 ビット LB1とLB2 内蔵フラッシュメモリへのアクセスをブロックするために使用されます。 おそらく、どのデバイスの開発者も、知的財産を保護し、複製や偽物の作成を防ぐために、ほとんどの場合、MK ファームウェアの読み取りをブロックしていることをご存知でしょう。 ロックされたマイクロコントローラーを読み取ることは、ハードウェア ハッカーにとってはお菓子のようなものですが、それは別の話です。 したがって、ファームウェアをコピーから保護する必要がある場合は、マイクロコントローラーのメモリの内容をロックする必要があります。ロックしない場合は、ビットを変更しないでください。 その他のブロッキング ビット ( BLB01、BLB02、BLB11、BLB11 ) を使用すると、アプリケーション領域とブートローダー セクションの両方からフラッシュ メモリへの書き込み/読み取りをブロックできます。 ロック ビットがプログラムされることはほとんどないため (アプリケーションの詳細に応じて)、ここでは焦点を当てません。 それらのいずれかをプログラムした場合でも、ロック ビットはチップ消去コマンド中にリセット (1 に設定) されます。

私たちが最も関心があるのは、好むと好まざるにかかわらず、頻繁に処理する必要がある設定ビットです。 3 つのコンフィギュレーション バイト内の特定のヒューズ ビットの位置は、使用される MCU によって異なります。 たとえば、3 つのコンフィギュレーション バイトを持つ ATmega328P を見てみましょう (図 2)。

図2. ATmega328Pマイクロコントローラのコンフィギュレーションバイトとヒューズビットの初期値の構成。

下位バイトの構成を見てください。 4 つの同一ビットのグループが表示されます CKSEL0、CKSEL1、CKSEL2、CKSEL3 。 これらは、MK マイクロコントローラーのクロック ソースのタイプを選択するために使用されます。 デフォルト (工場出荷時設定) では、マイクロコントローラーは内部 8 MHz RC 発振器で動作するように構成されています。 論理的には、これはマイクロコントローラーを操作するための最も安全なオプションです。 ただし、ご存知のとおり、AVR ファミリのデバイスはさまざまなクロック周波数ソースで動作できます。

  • 校正済み内部 RC 発振器 (デフォルト 8 MHz)。
  • 外部RC発振器。
  • 外部セラミックまたは水晶共振器。
  • 外部低周波クォーツ。
  • 外部クロックソース。

提示された各クロッキング モードには、さまざまなヒューズ ビット設定があります。 CKSEL0..3 これらは、クロック ジェネレーターの周波数と、マイクロコントローラーが低電力モードから動作モードに戻る時間を制御するために使用されます。 これらのビットは、次のビットと密接に関連しています。 SUT0とSUT1 、実際に電源投入後のマイクロコントローラーの起動時間を制御します。 トリガー遅延は、セラミック発振子と水晶の生成を安定させるために必要です。 マイクロコントローラーが動作モードに到達するまでにかかる時間の正確な値は、技術文書に記載されています。

構成ビット CKOUT MK ピンの 1 つへのクロック周波数の出力を許可または禁止します。 ATmega328P の場合は、どの MK クロック ソースが使用されているかに関係なく、PORTB0 ピン (他のデバイスのクロック用) に接続されます。 ビットがプログラムされている場合、ユーザー アプリケーションは PB0 ポートの主機能と代替機能を使用できません。

下位バイトの最後のビットは、 CKDIV8 。 デフォルトでは、このビットはセットされています。つまり、係数 8 の 8 MHz 分周器が内部 RC 発振器に接続されているため、この場合の MK のシステム クロック周波数は 1 MHz になります。 8 MHz のクロック速度が必要な場合は、ビット CKDIV8 リセットする必要があります。

次に、上位構成バイトに焦点を当てましょう。

最初のビットは ブースト 、デフォルトではクリアされています。 このビットが設定されている場合、マイクロコントローラーに電源が投入された後、またはリセット後に、マイクロコントローラーはブート セクターからプログラムの実行を開始します。 簡単に言えば、アプリケーションがフラッシュ メモリからのブートローダー機能を必要とする場合、このビットをプログラムする必要があります。 回路内インターフェースを介してマイクロコントローラーをプログラムする必要があるだけの場合は、このビットをそのままにしておいても問題ありません。

ブートローダーを使用する場合、ビットが重要になります ブーツZ0とブーツZ1 。 これらはブートローダーのフラッシュ メモリ領域を定義します。 アプリケーションのブートローダー コードが小さい場合は、コンフィギュレーション ビットを使用してフラッシュ メモリのより小さい領域をブートローダーに割り当て、残りをアプリケーション用に残すことができます。

次のビット イーセーブ 。 プログラム (0) した場合、不揮発性 EEPROM データ メモリの内容はチップ消去手順中にそのまま残ります。 ほとんどの場合、これは便利な機能です。たとえば、EEPROM に重要なデータまたは校正パラメータが保存されており、ファームウェアを更新する必要がある場合、ファームウェアを交換する前にビットをプログラムします。 イーセーブ .

ビットをセットしたら WDTON マイコンのウォッチドッグタイマーは電源投入直後にオンになり、ソフトウェアでオフにすることはできません。 この場合、プログラム コードで特別なウォッチドッグ タイマー リセット コマンドが実行されない限り、ウォッチドッグ タイマーは常にマイクロコントローラーを定期的にリセットする機能を実行します。 噛まれたら WDTON がインストールされていない場合、ウォッチドッグ タイマーはソフトウェアによって有効/無効になります。

少し スピエン マイクロコントローラーのシリアル プログラミング インターフェイスを無効にするように設計されています。 実際、シリアルインターフェイスを使用してこのビットの状態を変更することはできません(AVRマイクロコントローラはさらに2つの並列プログラミングモードをサポートしています)が、ビットの状態を変更するケースが知られています。 スピエン 誤操作またはインサーキットプログラマの故障の場合。

ビットでも同様の状況 RSTDSBL - ハードウェア リセット機能を無効にするために使用されます。つまり、MK のリセット ピンは I/O ポートとして使用されます。 状況によっては (I/O ラインの数が少ない MCU)、これは非常に便利ですが、一般的には推奨されません。 ビット設定が間違っています RSTDSBL リセット信号の存在はプログラミング モードを有効にするための前提条件であるため、SPI 経由でマイクロコントローラをプログラムする機会が奪われる可能性があります。

少し ドウェン AVR マイクロコントローラ用の特別な DebugWire デバッグ インターフェイスを有効にするために使用されます。 ビット状態を変更する SPIEN、RSTDSBL、DWEN シリアル インターフェイス経由は不可能です。これには、高電圧プログラミング モードをサポートするパラレル プログラマ、または DebugWire インターフェイス経由の接続が必要です。

もう 1 つ注目すべき点があります CKOPT 構成の上位バイト ( ATmega328P には存在しませんが、他の AVR MK には存在します)、 クロックジェネレータアンプの動作モードを制御します。 ビットがプログラム (0) されている場合、クロック ジェネレーターの出力信号の振幅 (振幅) は電源電圧と同じになります。 このオプションは、マイクロコントローラーが高レベルのノイズのある環境で動作する場合や、別のマイクロコントローラーを XTAL2 ピンに接続する予定がある場合に使用できます。 それ以外の場合は、このモードを無効にする必要があります ( CKOPT=1 )、マイクロコントローラーの消費電力が増加するため、これはバッテリー駆動のデバイスでは歓迎されません。

最後の設定バイト (拡張)。 Atmega328P マイクロコントローラーの場合、次の 3 つのビットが含まれます。 BODLEVEL0、BODLEVEL1、BODLEVEL2 。 これらのビットは、電源電圧検出回路のしきい値を設定することを目的としています。電源電圧が設定レベルに達すると、マイクロコントローラがリセットされます。

ヒューズビット値計算機

新しい MK をプログラムする必要がある場合は、マイクロコントローラーの技術説明を使用してヒューズ ビットを設定できます。 しかし、より便利で簡単な方法があります。それは、Mark Hammerling が開発したオンライン ツールである Fuse-bit calculator です (図 3)。 マイクロコントローラーのタイプを個別に選択し、必要なオプションを有効/無効にすると、ヒューズ ビット構成が自動的に更新されます。

さらに、別の形式でヒューズ ビットを個別に設定することができます。AVRDude プログラマー向けにコマンドが生成されると同時に、設定の下位、上位、および拡張バイト値も自動的に更新されます (図 4)。

Android 携帯電話またはタブレットをお持ちの場合は、同じ機能を実行し、AVRDude プログラマ用のコマンドを生成する無料の AVR Fuse Calculator アプリケーションを使用できます。 プログラム データベースには 144 の AVR MK があります。

初心者向けの基本ルール:

  • DWEN、SPIEN、RSTDSBL ビットの状態は決して変更しないでください。 実際、シリアル プログラミング インターフェイスを介してこれらにアクセスすることはできません。
  • CKSEL ビットを再確認してください。 クロック タイプを正しく設定しないと、多くの問題が発生します。
  • 商用製品を製造していない場合は、ロック ビットの状態を変更しないでください。
  • ヒューズ ビットの正しい設定がわからない場合は、技術ドキュメントを参照するか、フォーラムで専門家に質問することをお勧めします。

2012 年 7 月 16 日公開

ヒューズはフラッシュのみが可能ないくつかの特別なバイトであり、マイクロコントローラーのさまざまな設定を担当します。 ヒューズはマイクロコントローラーごとに異なる場合があります。 したがって、詳細についてはドキュメントを参照してください。 これは最後に行うため、ここでヒューズについて簡単に説明し、ヒューズを扱う際によくある間違いをリストします。

初心者にとって、0 にリセットされたビットは設定されていると見なされ、ファームウェアのさまざまなプログラムを使用するときに混乱を引き起こすことがよくあることに注意してください。
ヒューズの反対側のチェックマークは必ずしも明確に 1 か 0 であるとは限りません (セットという意味で)。 ソフトウェア開発者は、チェックマークがある場合、そのビットはセットされている (つまり =0) と見なされることを意味していました。

家族
ATtiny
家族
アットメガ
2313 25 /
45/
85
13 26 261 /
461/
861
8 16 48 /
88/
168
128 169 329 8515 8535

予約済み
M103С+ S8515СS8535С
オクデン + + + +
ヤタゲン + + + +

セルフプルゲン
+ + + + +
ドウェン+ + + + + +

イーセーブ
+ + + + + + + + + + + + +

スピエン
+ + + + + + + + + + + + +

WDTON
+ + + + + + + + + + +

ボードレベル2
+ + + + +

ボードレベル1
+ + + + + + +

ボードレベル0
+ + + 取締役会
レベル
+ 取締役会
レベル
取締役会
レベル
+ 取締役会
レベル
+ + 取締役会
レベル
取締役会
レベル

ボーデン
+ + + + + +
RSTDISBL+ + + + + + + +

CKDIV8
+ + + + + + +

CKOUT
+ + + + + +
SUT1+ + + + + + + + + + + + +
SUT0+ + + + + + + + + + + + +
CKOPT + + + + + +
CKSEL3+ + + + + + + + + + + +
CKSEL2+ + + + + + + + + + + +
CKSEL1+ + + + + + + + + + + + +
CKSEL0+ + + + + + + + + + + + +

PLLCK
+
ブースト + + + + + + + +

ブーツZ1
+ + + + + + + +

ブーツZ0
+ + + + + + + +

表の中で ヒューズ-人気のビット AVR。 左側にタイトル ヒューズデータシートによると、最初の 2 行には特定の MK のファミリーとタイプがリストされており、行と列の交点には記号があります。 プラス 、与えられた場合 ヒューズ-bit がこの MK に存在するか、指定されています 名前 、標準のものとは異なります。 ビットが欠落している場合、対応するセルには何もありません。各 AVR ヒューズ ビットの目的は次のとおりです。 予約済み- このビットは、会社によって単なる人間には知られていないいくつかの目的のために予約されています アトメル。 いかなる状況においても、その状態を変更することはお勧めできません (つまり、MK の製造時に取り付けられた状態のままにしておく必要があります)。 この行では
異なる名前のビットがありますが、通常、これらは新しいものに置き換えられた古いタイプのマイクロコントローラーとの互換モードを有効にするためのビットです。 通常はタイトルの最後に ヒューズ-bit には記号があります - から 互換性がある(互換性がある)。

オクデン- ヒューズにより内部デバッガ回路が有効になります ( n Cヒップ Dバグ JPできる)。 このビットを市販品にセットしたままにしないでください。 そうしないと、プログラムが MK のメモリから読み取られる可能性があります。

ヤタゲン- ヒューズビットによりプログラミング/デバッグインターフェイスが有効になります JTAG 。 と比べて SPI-インターフェース、 JTAG高度な機能を備えています。 このビットを不必要にセットしたままにすることはお勧めできません。この場合、MK によって消費される電流が増加します。

セルフプルゲン- MK プログラムがプログラム メモリに書き込むこと、つまり自己プログラミングを実行できるようにするビット。

ドウェン- 動作を可能にするヒューズビット デバッグワイヤー– これは単線デバッグ インターフェイスです。 市販製品に取り付けたままにすることはお勧めできません。

イーセーブ- ヒューズビット。設定後、MK メモリを消去するときに内容が消去されます。 EEPROMデータはそのまま維持されます。つまり、消去されません。

スピエン- ヒューズ ビット。MK インサーキット プログラミング インターフェイスの動作を可能にします。 SPI。 このビットは、並列プログラマ (または JTAG許可されており、MK で利用可能な場合)。 すべての MK はビットが取り付けられた状態で製造されます スピエン、インターフェースから削除します SPI 不可能 .

WDTON- ヒューズ ビット、ウォッチドッグ タイマーを設定した後 WDTは電源投入後すぐにオンになり、ソフトウェアで無効にすることはできません。 ビットが設定されていない場合は、オンとオフを切り替えます WDTソフトウェアで制御できます。

ヒューズビットグループ ボードレベル。 このようなビットは 1 つまたは複数存在し、0 から始まる番号が付けられます。 これらのヒューズ ビットの値は、回路のトリガーしきい値を決定します。 取締役会- 供給電圧レベル検出器; 供給電圧がこのレベルを下回ると、MK は「リセット」されます。

ボーデン- ヒューズビット。許容できない電源電圧レベル、つまり、ハードウェア検出回路をオンにします。 図 取締役会.

RSTDISBL- ヒューズ ビット。外部リセット信号をマイクロコントローラー ピンから切断し、I/O ポート回路をそれに接続します。 このビットは、ハードウェア リセット ピン RESET が I/O ポートの 1 つと結合されているマイクロコントローラでのみ使用できます。 このヒューズ ビットを誤って設定すると、RESET が無効になり、ISP 経由でフラッシュできなくなります。 シリアル プログラマを使用して MCU で作業を続ける場合は、このビットを設定しないでください。 MKを「復活」させた状態 RSTDISBLこれは並列プログラマでのみ可能であり、すべての MK では可能ではありません。

CKDIV8- ヒューズ ビット。これには、水晶 (または他の既存の) クロック ジェネレーターの周波数の 8 による予備的な除算が含まれます。つまり、このビットがオンで 8 MHz 水晶共振器が使用される場合、MK の実際のクロック周波数は1MHzになります。

CKOUT- ヒューズ ビット。MK ピンの 1 つにクロック周波数を出力できます (他のデバイスのクロック用)。

SUT1そして SUT0- MK クロック ジェネレーターの起動モードを制御するヒューズ ビット。 クロック ジェネレーターのタイプと周波数を決定する以下で説明するビットに関連付けられており、その接続は非常に複雑で混乱を招きます。 正しく取り付けられていないと、発電機の起動が不安定になったり、電源供給中に MC がリセットを繰り返したりする可能性があります。

CKOPT- 水晶発振子を操作するための内蔵クロック ジェネレーターの動作モードを決定するビット。 発電機回路の内蔵インバーターのゲインが実際に変化し、その結果、レグの出力電圧が変化します。 XTAL2。 設置が正しくないと、水晶発振器の起動が不安定になり、間違った高調波で励起される可能性があります。 (このためクォーツビットは、MK に 3.6V 以下の電圧が供給されたときのみ、またはピンセットで XTAL1 ピンに触れた後にのみ起動しました。)

ビットグループ CKSEL0CKSEL3- ヒューズ ビット。その組み合わせによって動作クロック ジェネレーターのタイプと周波数が決まります。 合計で最大 16 の組み合わせが可能ですが、すべての組み合わせがすべてのタイプの MK に対して定義されているわけではありません。 これらのビットの組み合わせを誤って設定すると、MK が「デッド」になる可能性があります。ピンにクロック信号を供給しないと回路内で動作しません。 XTAL1.

PLLCK- ヒューズ ビット。内蔵周波数シンセサイザーを使用して MK コアをクロックできるようにします。

ブースト- リセット後にプログラムの実行が開始されるアドレスを決定するヒューズ ビット - このビットが設定されている場合、プログラムは (通常のように) アドレス 0000h からではなく、ブートローダー領域のアドレスから開始されます。 (ブートローダー).

ヒューズビットグループ ブーツZ- ブートローダーに割り当てられるプログラム メモリ領域のサイズを決定する 2 つのヒューズ ビット ( ブートローダー)。 特に、これらのビットの組み合わせは、ビットが設定されている場合にリセット後にプログラムの実行が開始されるポイントを決定します。 ブースト.

ヒューズを設定するときに最もよくある間違いは次のとおりです。

1. ヒューズの取り付け RSTDISBL。 このヒューズ ビットを誤って設定すると、無効になります。 リセット、フラッシュできなくなります ISP。 これにはシリアルプログラマか何かが必要になります。

2. 間違った取り付け CKSEL0, CKSEL1, CKSEL2, CKSEL3。 これらのヒューズは、マイクロコントローラーのクロック ソースを決定します。 誤って内部 RC 発振器の間違った周波数を選択しても、致命的ではありません。 プログラミング経由 ISP可能になり、状況を修正できるようになります。 また、誤って外部ソース、RC チェーン、または水晶発振子からクロックを設定し、回路にそのようなものが存在しない場合は、それに応じてプログラミングする必要があります。 ISPも不可能になってしまいます。 基本的に、マイクロコントローラーは存在しない回路からのクロックを待機します。 この状況から抜け出すにはどうすればよいでしょうか? それは非常に簡単です。マイクロコントローラーにクロック ソースを与え、ヒューズを修正します。 最も頻繁にインストールされる CKSELすべてゼロ – 外部ジェネレーターからのクロック。 この場合、蛇行を生成する回路を組み立てて(周波数は特別な役割を果たしません、主なことはそれがマイクロコントローラーの機能の範囲内にあることです)、それを脚に適用できます XTAL1。 その後、マイクロコントローラーを経由してフラッシュできます。 ISP。 最初に行うことは、ヒューズを工場出荷時の設定にリセットすることです。 もし CKSELすべて 1 に設定されます – 外部クォーツからクロックします。 クォーツを吊るすと、マイクロコントローラーに再びアクセスできるようになります。 ISP.