AVR自体のプログラミング解除


8

AVRが数か月後に不思議なことに動作を停止したインスタンスを他の誰かが持っていますか?

ワイヤレスセンサーネットワークで多数のatmega328を実行しています。そのうちの1つが機能を停止したばかりのとき、私は3回(約1年で)過ごしました。プログラムを再度書き込み、再び動作します。必ずしも同じユニットとは限らないため、チップの不良ではないようです。

それは人々がAVRを使用するのを妨げるかなり悲惨なことのように思われるので、それは明らかに私の特定の状況についての何かです。他の誰かがそれに遭遇し、いくつかのポインタがあるのではないかと思っていました。

バッテリーを3.3Vで使用しているので、電圧が低下して数か月に1回は作動できなくなり、充電式バッテリーを交換する必要があります。モジュールは、スリープモードとウォッチドッグタイマーを使用して60秒間スリープし、測定値を取得して無線で基地局に送り返し、その後再びスリープします。モジュールはarduinoと互換性があるため、「これを再書き込みさせない」ビットを反転していません。


問題をどこで特定できますか?同様の設定で同様の問題が発生しています。「破損した」フラッシュメモリを読み出して、元のHEXの内容と比較したことがありますか。
Rev1.0 2014年

回答:


6

BODを使用していますか?チップが茶色くなった場合、厄介なことが起こることがあります。


3
明確にするために、edebillはBODを使用する必要があります。
ケビンフェルメール

BoDを使用していません。追加については、確認する必要があります。したがって、ここでのシナリオは、電圧が低くなりすぎて誤って独自のフラッシュを破壊したときに、チップがちょうど揺れ始めるということでしょうか?
edebill 2010

@edebill-PICで、BORBのしきい値が設定されていない場合、本番環境で多く発生することを確認しました。
J. Polfer、

BODとは ブラウンアウト検出?
Peter Mortensen、

2
はい、ブラウンアウト検出です。
Leon Heller、

6

おそらくブラウンアウト検出は正しい方法ですが...

私が持っていたソフトウェアのみより迅速にかかわらず、非常によく似た症状を引き起こしてしまうという問題を。いくつかの悪いC ++(コンパイル?)がスタックの破損を引き起こし、関数が実際のプログラムの外に戻り、ランダムな命令を実行していると思います。次に何が起こったのか正確にはわかりませんが、それを修正する唯一の方法はプログラムを再書き込みすることでした(明らかに、これらのランダムな命令のいくつかにはプログラムメモリへの書き込みが含まれていました)。

バグは、デストラクタが間違ったときに呼び出されただけでした。変数をグローバルにすることで(破壊されないように)、問題を修正しました。この問題は非常に簡単に再現でき(トリガーするのに約1分かかりました)、非常に安定した電力でした。特定のセットアップは、WaveHCライブラリを使用したArduino + WaveShieldでしたが、C ++を使用しているすべての人に起こる可能性があると思います。

低レベル言語を好むなら、私は誤ってアセンブリで同じことをしましたが、奇跡的にこれは散発的なタイミングの問題以外には何も起こりませんでした。 4バイト命令の途中に。それはかなり迅速に再調整されましたが、めったに使用されないコードパスでこのような何かが狂気を引き起こすことを想像することは難しくありません。


これは、フラッシュメモリの一部をメインメモリ空間にマップするプロセッサでも発生する可能性があります。私は少なくともdsPICとPIC24がこれを行うことを知っています。ポインタが破損していて、適切な状況にある場合は、フラッシュを上書きできます。
Thomas O

3

Vccデカップリングコンデンサが不十分/配置が不十分/欠けていると、同様の影響が発生することも確認しました。ICのできるだけ近くにローカルデカップリングがありますか?(100nF-1uFセラミックタイプが推奨)


2

デバイスがメモリを失う原因となるもう1つの要因は、静電気放電(ESD)です。

露出の影響を受けるすべての外部向けコネクタにバリスタをいくつか配置すると、この問題を軽減できます。Microchip PICマイクロコントローラーをベースにしたいくつかの市販製品で見たことがあるので、前代未聞ではありません。

フィルターコンデンサーとしても機能するいくつかの便利なバリスターがあります(10〜150 pFのオーダー)。これらをチェックしてくださいhttp://www.tdk.co.jp/tefe02/e9c11_avr.pdf

それらは小さく、安価で、あなたのデバイスを保護します。ボードに外部信号をもたらすコネクタのできるだけ近くに配置し、すべてのトレースをコネクタピンからすぐに離して配線します。


バリスタはESD保護用ではありません(10〜数百ミリ秒続くサージの保護用です)。通常、デバイスの内部ダイオードで十分ですが、そうでない場合は、いずれかのレール(VddとGND)に逆バイアスダイオードを追加すると通常は機能しますが、IOに容量が追加されて高速のものに影響を与える可能性があるので注意してください。
Thomas O

1
ThomasはTDKデータシートを見て、これらのデバイスはESD対策のために特別に設計されており、電子通信デバイスの生産で機能することが証明されています。最大8 kVのESDを使用して社内でデバイスをテストし、これらのデバイスは他のコンポーネントを保護します。
smashtastic

あなたは追加の静電容量について正しいです、そしてそれは考慮される必要があります。
14:17
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.