ATmegaの新しい「PB」バリアントには、電圧低下検出器にバグがありますか?


9

私たちは、ATmega48 / 88/168/328マイクロコントローラを長年にわたって多くの製品で使用してきました。AとPAのバリアントから新しいPBのバリアントに切り替えることを検討しました(新しい製品には追加のピン、タイマー、およびUARTが必要になります。これは、価格が安くなり、古いバリアントが廃止されるためです)。そこでATmega328PBでATmega328Aを切り替えました。停電後は非常に頻繁に問題が発生するようです。このような問題は、古い亜種では発生しませんでした。

当社の製品のユースケースでは、定期的な停電は正常です。私たちは5Vに設定されたスイッチング電源(この電源など)を使用し、ATmegaのVCCに220µFの範囲のコンデンサを使用して、SRAMを数分の範囲の停電に対して存続させ、ミッションではない内部状態を保存します重要ですが、再起動時にすぐに利用できるため、ユーザーエクスペリエンスが大幅に向上します(これらの状態は、EEPROMが不適切になるほど頻繁に変化します)。これは常に機能しています。

ただし、新しいATmega328PBを使用すると、停電後、MCUSRでリセット状態が検出されずにチップがリセットされ、クロックが不安定になっているように見えます。

  • 電圧低下検出器はヒューズごとに設定されます。私たちは利用可能なすべてのbodlevelを試しましたが、それらすべてでバグが発生します。
  • 外部20 MHzを使用し、ヒューズごとに正しく設定します。
  • 3つの異なるチップを試したので、それは単一のはんだ付けやその他のハードウェア障害ではありませんでした。

バグが発生した後、クロックはしばしば2.5倍遅い速度に設定されます。これは、mcuが8 MHzの内部発振器によってクロックされていることを示しています。ただし、速度の低下は約6倍になる場合があります。これは、ソフトウェアからヒューズを設定できず、クロック分周器がクロックを2.5または6で分周できないため、クロック分周器を変更するソフトウェアのバグではないことを意味します。

それで、私の最初の疑いは、新しいClock Failure Detectionヒューズでした。ただし、オンまたはオフに関係なく、動作は同じです。

ソフトウェアの特殊性を排除するために、私は単純なテストプログラムを最初から作成しました。これは、タイマー割り込みからの100 Hzで出力をトグルするだけで、再起動後にリセット条件がアクティブになった(MCUSRから読み取った)LEDで示します。ハードウェアの残りの部分も削除され、mcuとレギュレーターのみが存在します(およびインジケーターは直列抵抗で導かれます)。

結果

およそ2/3の時間、興味深いことは何も起こりません。電源遮断後、mcuはそのジョブを再開し、電圧低下リセットと電源投入リセットインジケーターの両方が点灯します。

(画像では、赤はトグルされたピン、青はVCCです。この画像では、2.7 Vのブラウンアウトがはっきりと見えます。他のブラウンアウト設定で同じテストを行ったところ、結果はまったく同じです。だから私はそれらの写真を省略します)

うまくいきます

おおよそ1/3の時間、前述のバグが発生し、電源が再び戻ってきたときに、どれもブラウンアウトリセットのとパワーオンリセットインジケーターが点灯されていません!mcuが奇妙な時計でカチカチ音を立てているかのように、出力は異なります。無秩序ではありませんが、同じ頻度でカチカチ音を立て続けます。

クレイジーな状態で再起動します

興味深いことに、この状況では、電圧低下検出器は完全に非アクティブになっているように見えます。これは、次の電源遮断後(正しいクロックが復元されることもあれば、復元されないこともあります)、出力がブラウンアウトレベルは合格です。このような状況では、時計が速くなる場合と遅くなる場合があります。

電圧低下なし、時計は速くなる 電圧低下なし、時計が遅くなる

これらのテストでは、起動遅延に16K CK / 14CK + 4.1 msを使用しました(ただし、65 msの遅延では問題を回避できません)。

これはズームインした画像で、VCCが2 V以内に5 Vで安定状態に達していることがはっきりとわかります。

正常に開始、ズームイン

上の画像では、MCUは正常に起動しています。

興味深いことに、そうでない場合、電源電圧はより早く安定した5 Vに達します(MCUの多くの部分がオンになっていないようなので、起動時に流れる電流が少なくなります)

以下は、失敗したスタートからの画像です:

失敗した開始、ズームイン

電源電圧が安定してから85 ms以上経過すると、ソフトウェアが実行を開始することに注意してください。起動遅延のヒューズは同じで、16K CK / 14CK + 4.1 msです。

また興味深いことに、電源がオフになった後、VCCは約1.1〜1.2ボルトで安定します(古いATmega328Aバリアントは約0.6-0.7 Vに低下しました)。それは数分間それを保ちます。十分長い時間(30分程度かそれ以上)待つと、mcuは常に正しく起動します!したがって、問題は、1.1ボルト前後であり、データシートによると、パワーオンリセットに十分であるとは保証されていないようです。しかし、電圧低下リセットにはそれで十分です!

これらの状況を除いて、電圧低下検出器は正常に動作します。最初の画像で確認できます(bodlevelに到達すると出力信号が停止し、mcuの一部がシャットダウンされるため、電圧降下が遅くなります)。VCCをボディレベルよりわずかに下げて再び上昇させると、テストを実行しました。そのような条件下では、mcuは常に正しく再起動し、ブラウンアウトリセットインジケーターのみが点灯しました。

私は明らかな何かを見逃しましたか、それともATmega328PBのブラウンアウト検出器に深刻なバグがありますか?

編集:

興味深いことに、上記の問題はレギュレータの前で電源を遮断したときにのみ発生します。レギュレーターの後で中断した場合(または実験用の電源を使用した場合)、問題は発生しません。あたかも上昇電圧の形状が問題を引き起こしたかのよう。ただし、前の画像からわかるように、電圧の上昇は非常に良く、すばやく安定します。

編集2

20 MHzではなく16 MHzで試してみましたが、まったく同じ問題が発生します。


Atmelに連絡したり、エラッタを調べたりしましたか?この時代、ICの設計ミスはよくあることです。
エドガーブラウン

私は正誤表を調べ(この方向で何も見つからなかった)、Atmelに連絡することを検討していますが、いくつかのテストを行ってもう少し見回す前ではありません。
vsz 2018

3
私の経験では、メーカーに連絡したり、フォーラムを使用する前に時間を無駄にしないでください。あなたは非常に強力なケースを提示するのに十分以上のデバッグを行いました。それよりはるかに少ないので、TIは私たちの問題を文書化したICの1つに対する内部(未公開)エラッタを私に送りました。
エドガーブラウン

私の2セントの価値:電源の立ち上がりが速すぎると、他のCPUで問題が発生することがあります。一部のメーカーは最大立ち上がり時間を指定していますが、これについては言及されていないことがよくあります。
Oldfart

回答:


3

電圧低下検出器のバグではないと思いますが、チップの使い方を教えてください。

ご存知のように、電源が一時的に切断されて接続されただけでは、パワーオンリセットしきい値1.1 Vに到達しないため、PORはありません。

ブラウンアウト検出器もここではあまり役に立ちません。20 MHzでAVRを使用していて、これには電源電圧が4.5 V以上である必要があるか、仕様に違反しています。また、BODは4.5 Vでトリップすることを保証しません。通常は4.3 V未満です。そのため、BODがトリガーする前であっても、AVRがどの状態になるかは保証されませんが、BODがトリガーする必要がある場合があります。 20 MHzクロックのために機能しません。電圧が再び上昇し始めると、電源電圧が再び安全な4.5 Vレベルになる前にBODが非アクティブになります。正しくトリガーされた場合。次に、起動遅延時間を十分に長く設定して、内部リセットが解放される前に、電圧がBOD非アクティブ化レベルから4.5 Vに上昇するように変化させる必要があります。

ただし、20 MHzで実行するには少なくとも4.5 Vが必要なため、すべてが失敗する可能性があります。AVRデータシートには、内部リセットシステムが適切でない場合は外部リセットチップを使用することが記載されています。この場合、電圧が4.5 Vに低下する前にAVRをリセットすると問題が解決するようです。


BODはプロセッサ自体を使用しないと思いましたが、専用のハードウェアです。多分彼らはPBバリアントのためにそれを変更しましたか?彼らが20 MHzのBODをサポートしなくなったとしたら、私は驚きます。最高のボディレベルは4.3 Vなので、20 MHzには外部BODが必要ですか?それでも、これだけが原因だとは思えません。私は20 MHz、2.7V本体レベルでテストを行い、VCCを3Vに設定しましたが、問題なく動作しました。手動で電圧を2.7をわずかに下回るまで下げると、出力が停止し、2.7を超えると、出力が再開しました。1.1 VからのスタートアップのみがBODを無効にするようです。
vsz 2018

ほとんどの場合それは専用ハードウェアですが、BODが作動する前の低電圧時に、CPU実行のためにフラッシュから正しいデータがフェッチされ、CPUがそれらを正しく実行していることを確認できますか?それは、またはランダムなデータを、指定されていないものを行う予約済みレジスタに書き込む可能性があります。PBバリアントの仕様は変更され、古いチップでも20MHzのBODはサポートされませんでした。PBバリアントはBODとPORの両方の曲線が実際に異なり、後で低電圧で起動します。
Justme 2018

2枚目の写真をご覧ください。BODは正しく動作しているようで、チップをリセットしました。次回の起動時にのみ初期化に失敗します。また、このチップを3 Vで駆動しましたが、正しく機能し、一度も失敗しませんでした。
vsz 2018

まあ私の意見では、チップは安全な動作領域外で動作する必要はありませんが、続けましょう。BODはClock Failure Detectorをリセットしないため、パワーオンリセットと外部リセットのみが内部クロックから切り替わります。したがって、CFDヒューズ設定を再確認してください。外部水晶または外部クロックを使用していますか?CFDヒューズは、以前はフルスイングヒューズであった可能性があります。また、フルスイングヒューズがないため、水晶の最大周波数は16MHzであり、20MHzには外部ロジックレベルのクロック信号が必要です。したがって、水晶の起動の問題も考えられるため、水晶ピンにもスコープを設定します。
Justme

クリスタルを使用しています。良い考えです、それについて調べます。CFDがオンであるかオフであるかに関係なく、画像で描いたのと同じ動作が発生したことに注意してください。
vsz 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.