Microchip dsPIC30F6012aを実行しています。私はいくつかのPCBにこのチップを搭載しており、すべて同じソフトウェアを実行しており、それらすべてに同じ問題が見られます。これは、1回限りの運用上の問題ではなく、システム上の問題を意味します。問題は再現可能でもあります。つまり、どこを見るかわかっていれば、問題を解決できるはずです。しかし、アプリケーションのデバッグはまだ驚くほど困難です。
テスト中のボードは24Vを受け入れ、V7805を介して5Vに降圧されます。チップは、内部発振器と16x PLLで動作し、約29.5 MIPSの動作速度を提供します。このボードの関連コードは基本的に非常にシンプルです。ウェイクアップし、EEPROMからデータを読み取り、無限ループに入ります。ミリ秒ごとに割り込み、環境データを観察し、更新された値をEEPROMに書き込みます。他にも状況はありますが、無関係なコードがコメント化されていても問題が発生するので、当面の問題に関連していないことは間違いありません。
一般的な使用では、95%の時間は、ボードがメモリ内の正しい値で起動し、そのビジネスについて続行します。ただし、残りの5%の時間は、不正な値で起動します。具体的には、持っているはずのデータのビット反転バージョンで起動します。私が見ているのは4バイトの符号なしlongであり、longの上位ワードまたは下位ワードのいずれかが反転する可能性があります。たとえば、10は2 ^ 16-10になり、後で2 ^ 32-10になります。手動で数十回電源を入れ直すことでグリッチを再現できますが、これはあまり一貫しておらず、スイッチフィンガーがすり減っています。
問題を制御された方法で再現するために、テスト中のボードに24V電源を駆動する2つ目のボードを作成しました。(別のdsPICがダーリントンオプトカプラーを駆動します。)テスターボードは24Vを1.5秒間オフにし(5Vレールが実質的に0に下がり、そこに1秒間留まるのに十分な長さ)、その後、構成可能な時間だけ24Vをオンにします。 。約520 mSのオンタイムで、毎回5回の電源サイクルでこのEEPROMグリッチを再現できます。
5Vレールは適切に動作しています。スコープを信頼できると仮定すると、ターンオンから1 mS以内に5Vで安定し、おそらく.4Vのオーバーシュートになります。ターンオフ時に指数関数的に0Vまで減衰し、50ミリ秒以内に1Vに達します。私は関連があると思われるビルド警告はなく、ファイルの最後にある未使用の変数と改行がありません。
私はいくつかのことを試しました:
- MCLRの有効化/無効化
- WDTの有効化/無効化
- コード保護の有効化/無効化
- 電圧低下検出電圧の有効化/無効化/変更
- パワーオンタイマーの有効化/無効化/変更
- メイン内部発振器のさまざまなPLL設定
- PICkit 3プログラマの接続/切断
- 5Vレールに470 uFの容量を追加
- MCLRピンの4.7kプルアップで.1 uFを追加/削除する
- コード内のすべての割り込みを無効にし、メインループにEEPROM更新のみを残す
- EEPROMの読み取りを開始する前に、スタートアップルーチンに1.5秒の遅延を追加する
また、値を変更せずにEEPROMに継続的に値を書き込んでから読み取るだけの別のテストコードも作成しました。数万回の反復でエラーは発生しませんでした。私が結論づけることができるのは、EEPROMの読み取りまたは書き込み、特に電源投入/電源切断で問題が発生したことです。
2007年以来、同じEEPROMライブラリを使用しています。時々不具合が発生しましたが、再現性はありません。関連するコードはここにあります:http:
//srange.net/code/eeprom.c
http://srange.net/code/readEEByte.s
http://srange.net/code/eraseEEWord.s
http:/ /srange.net/code/writeEEWord.s
他のアプリケーションで以前にEEPROMエラーを見たことがありますが、常に1回限りのグリッチであり、再現性や一貫性はありません。
誰かが何が起こっているのか考えていますか?試してみることが不足しています。