- 締切済み
PIC16F877でEEPROM(AT93c86)の書き込みが不安定
タイトルの通り、PIC16F877でATMEL社の93C86への書き込みのプログラムを書こうと思っています。 とりあえずは、トランジスタ技術の1999年5月号、http://www.cqpub.co.jp/toragi/download/1999/TR9905A1/TR9905A1.htmのダウンロードページにMW.asmというマイクロワイヤ用のソースがあったので、それを参考にして必要な部分だけ修正を加えました。 動かしてみたところ、書き込みができることはできるのですが、1バイト書くときはほとんどミスはないのですが、4バイトなどを連続で書こうとすると、書けなかったり、途中1バイト書けなかったり、指定してないアドレスに書いたりという不安定なことがおこります。しかし、なぜか書き込みを4回やるとかならず綺麗に書き込めます。 この原因は何なんでしょうか? なぜか、READはさっぱりできず、なんど読んでもFFとなってしまうので、ベリファイはしていません。 SSPCONの設定で、SSPEN=1,CKP=0,Clock=Fosc/4としているのですが、Foscはセラロックの値ですよね?のでセラロックは4Mhzを使っているので、clockは4÷4で1となっているとおもうのですが、だいたいマイクロワイヤのEEPROMって、clock2Mhzで動かすのが多いようなので、セラロックを8Mhzに変えてみたりもしたのですが無理でした。 PICに手を出して間もないので、かなりの勘違いもしていると思うのですが、書き込み不安定の原因はどのような事が考えられるでしょうか?よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kazusone
- ベストアンサー率54% (33/61)
93C86はフラッシュメモリでしょうか? フラッシュメモリは書込みに時間がかかります。データシートに書かれた時間以上待って次の書込みを行うか、BUSYフラグをチェックして書き込み完了を待つようになっているはずです。 4回やるとかけるのは、既に記録済みのアドレスに同一データを書き込もうとすると、フラッシュメモリの内部回路が書き込みをキャンセルして待ち時間が不要となる機能の影響かもしれません。 書込み後の待ち時間は十分か確認したらいかがですか?
お礼
回答ありがとうございます。 書き込み後の待ち時間はデータシート通り入れているのですが、 うまくいきません。倍以上とってみたりもしたのですが、効果はありませんでした。