マイコン工作実験日記

Microcontroller を用いての工作、実験記録

消えないビット

2008-06-10 23:21:37 | Weblog
2週間くらい前から悩まされている問題があります。ATSAM7SE256のフラッシュに書き込むファームが大きくなってきたら、書き込みエラーが発生するようになってしまったのです。書き込んだ後にべリファイすると正しく書き込めていない箇所があります。



どういうべリファイをしているのか詳しい動作がわからないのですが、なぜかいつもエラーが報告されるのは1ヶ所だけです。1ヶ所見つかった時点でべリファイ動作を中止しているのか、はたまたホントに1ヶ所しか間違いがないのかわかりません。いつもアドレスは0x0011XXXXなのですが、特定の1ページだけというわけではなさそうです。上記のエラーはB2であるべき個所がB6になっていることを示していますが、どうやらいつもこの例のように0になるべきビットが立ったままになってしまっているようです。

再書き込みをしてみても、同じ位置で同じエラーになります。一度、全ページを消去してから書き込むとたまに正しく書けることもありますが、ほとんどの場合やはりエラーとなるようです。現時点ではエラーの発生する箇所は、初期化データが配置される領域に相当しています。そのため、どの部分が化けるかによって、問題無く動作を開始しても、しばらくしてから突然例外が発生するというように動作が不安定になるという症状が発生してしまいます。

ATMELのデータシートでは10,000回の消去が可能となっていますが、まだ1000回も書き込んでないハズです。消えにくい石に当たってしまったということでしょうか。いちおう予備のSE256は買ってあるので、ピッチ変換基板ごと交換することは可能ですが、高価なピンヘッダへの出費が痛いです。いまんとこ、0xffで初期化したダミーの配列を定義して、エラーの発生しそうな領域を食いつぶしてなんとかしのいでいます。しかしながら、問題領域がプログラム・テキスト領域内に侵入するのは時間の問題です。そうしたら、しばらくはダミーのコード追加で逃げることになるかも。