質問: SPIフラッシュメモリチップは、dsPICの内部EEPROMと同じアトミックでない書き込み操作で問題がありますか? A while back I had some intermittent trouble with the internal EEPROM of a dsPIC. Every so often, some value in the EEPROM would be found zeroed out on power-on. I tracked the problem down to when the chip lost power after the erase step of the write cycle, but before the write had completed. It was all about the timing of the power-down relative to the firmware execution, which was (in normal operation) random. I solved this by adding a buffer section to my EEPROM, to ensure that an incomplete write-cycle could be completed on restoration of power. I had to turn EEPROM writes into an atomic operation. 現在、内部EEPROMなしで別のdsPICを使用しています。外部フラッシュメモリチップに永続データを保存します。私も同じような懸念があるのではないかと思います。外部のフラッシュチップが書き込み中に電源を落としてデータを失い、内部EEPROMの場合のようにファームウェアに修正を書き込むのではないかと心配する必要がありますか?それとも、チップ自体がアトミックな書き込み操作を保証するのでしょうか。 より詳細には、私のバッファリング技術は3つのフィールドからなる永続的メモリの領域を定義します:書き込むアドレス、書き込むデータ、そしてREADYフラグ。 「書き込み」は4つのステップから成ります:バッファへの書き込み、READYフラグの設定、バッファからの書き込み、READYフラグのクリア。電源投入時に、READYフラグを確認します。設定されている場合は、バッファ内のものをすべて実行します。これはEEPROMではうまくいきましたが、フラッシュでうまくいくかどうかはわかりません。
回答: これは、座って慎重に物事を戦略化する必要がある分野です。データシートの詳細は以下のとおりです。 1. 4kセクタ消去:\ $ 400ms \ $最悪の場合 2. 32kブロックの消去:\ $ 800ms \ $最悪の場合 3. 64kブロック消去:\ $ 1000ms \ $最悪の場合 4. ページ書き込み:\ $ 3ms \ $最悪の場合 5. 1バイト目の書き込み:\ $ 40 \ mu s \ $最悪の場合 6. 次のバイトの書き込み:\ $ 12 \ mu s \ $最悪の場合 この詳細を制御する場合は、重要な書き込みが行われている間に決定した「ドループマージン」内に維持されるローカル電力を(コンデンサの蓄積電荷によって)調整することをお勧めします。あなたが賢明に最初のバイト書き込みタイミングを使用するならば、これは完全な秒である必要はありません(それに追加の通信/セットアップ時間を含めることを忘れないでください)。たとえば、ブロックまたはセクタの消去が開始されていること。これにより、電圧低下やリセットが発生したかどうかを判断できます。最後にどこにいたかを確認して、プロセスを終了できます。複数の「特別ページ」も必要になるかもしれません。しかし、いずれにせよ、あなたは徹底的にすべてのケースを考慮する必要があります!