質問: シリアルフラッシュメモリのデータロギング GPSからシリアルフラッシュW25Q64FVに位置を書き込むデータロガーに取り組んでいます。私は毎秒GPSデータを書くつもりです。いくつか質問があります。 1. このフラッシュメモリでは、1から256バイトまでの任意の位置に同時に書き込むことができます(ページ)。仕様によると、このメモリには100,000回の書き込み/消去サイクルがあります。それはページごとかバイトごとか?したがって、アドレスXに1バイトを書き込み、その後アドレスX + 1に別のバイト(ただし同じページ)を書き込んだ場合、そのページには99.998書き込みしか残っていないことになりますか?私はいいえと言うでしょう、しかし確かに私は尋ねています。 1バイトを書き込むことでページ全体が内部的に書き換えられる場合はどうなりますか。 2. 最後に書き込んだバイトのアドレスを永続的に保持する方法毎回更新するたびにArduinoのEEPROMに書き込むことができましたが、書き込みサイクルは "わずか" 10万サイクルしかないので、これはもっと早く達成されるでしょう。他の可能性はすべての書かれたメモリをスキャンして空のバイトを探すことかもしれませんがこれはおそらく時間がかかることがあります。あるいは、フラッシュヘッダーのビットマップに全ページをマークするようにして、最後のページだけをスキャンすることもできます。他に何か提案はありますか? 3. ブロックを消去したり、完全なフラッシュメモリを消去するという特別な目的はありますか。ラウンドロビン方式でメモリに書き込むことはできませんか。 HDD上のファイルを削除しても、すべてのバイトにゼロが書き込まれないため、フラッシュと同じにできませんでしたか。
回答: 1)セクターのP/Eサイクルは、そのセクターに複数の値を書き込み、ある時点でセクター全体を消去することです。そのため、1つのセクタにすべてのアドレスを書き込むことができ、そのセクタがいっぱいになった後にそのセクタを消去する場合に限り、1 p/eサイクルとしてカウントされます。 2)最後のメモリ位置を永続的に保存する必要がありますか?おそらく、デバイスの電源投入時に最後に使用されたFlashの場所を確認してから、アドレスカウンタをRAMに保存します。 3)あなたのアプリケーションによっては、デバイスを一杯にして、一度消去するだけです。あるいは、開始アドレスを移動させる、つまりデータが外部デバイスに送信されたら次のブロックにスキップする、ある種の管理を実装することもできます。それは、ウェアレベリングの簡単な形式としても使用できます。