フラッシュメモリ:数バイトだけ書き込む前にページ全体を消去する必要がありますか?


16

簡単な質問です。明確な答えが見つかりません...

SST25VF064Cフラッシュメモリチップ用のドライバーを書いています。SPIを介して通信します。

すべてのフラッシュメモリ(私が知っている)と同様に、書き込み(ビット= 0)する前に消去する(すべてのビット= 1)必要があります。このチップの場合、消去できる最小領域は4kBです。

そのメモリは256バイトのページに分割されます。1つの命令で、指定されたページに1バイトから256バイトの任意の場所に書き込むことができます。ページの境界で開始する必要はありません。プログラムする最初の場所は、ページ内のどこでもかまいません。

一般的なルールは、書き込み前にページが消去されていることを確認することです。しかし、すでに書き込まれた領域を避ければ、以前に書き込まれたページに書き込むことはできますか?たとえば、バイト0〜127にデータを保存するとします。バイト128から開始した場合、後で同じページに別の128バイトを書き込むことはできますか?

回答:


13

はい、消去後、次の消去操作の前に、任意の数の個別の操作を使用してデータを書き込む(ビットを1から0に変更する)ことができます。

さらに多くのビットをクリアするだけであれば、以前に書き込んだ場所を書き換えることもできます。これは、割り当てビットマップなどを維持するのに便利です。


素晴らしい、ありがとう!これはまさに私が探していたものでした。
ビットマック14

チップによっては、さまざまなデータシートを見た後のバイトの後に前のバイトを書き込むことを好まないものもありますが、これはデバイスによって異なるようです。
バリティ14

1
@Vality:これの例を提供できますか?
デイブツイード

3
@DaveTweed NXP LPC21xxおよびLPC23xx MCUには、メモリの16バイトごとにチェックサムバイトがあります。チェックサムはその操作で書き込まれるため、16バイトすべてを一度に書き込む必要があります。後で来て、同じ「行」にゼロを書き込もうとすると、ゼロが書き込まれますが、新しいチェックサムが以前の上書きされます。可能性としては、前のものが0だったところに1があるため、チェックサムは無効になります。MCUがチェックサムの悪い行の読み取りを許可しているかどうかは覚えていません。とにかく、それは「デバイス間で変化する」例です。
ギジェルモプランディ14

1
「書き込む任意の数の個別の操作...次の消去操作。」一部の部品、特にMCUの組み込みフラッシュメモリでは、消去が必要になる前に最大書き込み回数が示されることに注意してください。おそらくこの制限に違反すると、メモリの他の領域が破損する危険性があるため、そのような制限に注意することが重要です。
ajb

5

すでに書き込まれた領域を避けた場合、以前に書き込まれたページに書き込むことができますか?

pを理解している場合 16のデータシートを正しく読みます:この特定のチップでは、すでに書き込まれた領域を避けても、以前に書き込まれたページに書き込むことはできません。

詳細

SST25VF064Cフラッシュメモリチップのデータシート Pに。16は、「ページプログラム命令がメモリ内の最大256バイトのデータをプログラムします。ページプログラム操作を開始する前に、選択されたページアドレスは消去状態(FFH)でなければなりません。」

したがって、「ページプログラム操作を開始する前に、選択されたページ全体が消去状態(ページFFhのすべてのバイト)になっている必要がある」と仮定します。SSTまたはMicrochipは、この途方もなく曖昧な文を明確にするドキュメントをリリースしましたか?

私の経験では、すべてのMLCフラッシュチップといくつかの新しいSLCフラッシュチップの製造元は、ページが書き込まれたら、1ビットだけを変更したい場合でも、ページを再度書き込む前にページを消去する必要があることを義務付けています0ビット。(これは、YAFFSの記事「1回限りのルール」と呼ばれています。)

私の経験では、古いフラッシュチップはすべて、そのビットがページ内にある場合や、すでに他のビットがゼロにプログラムされているバイトであっても、消去サイクルなしで1ビットを0ビットに変更できます。フラッシュのページは、消去と消去の間に複数回プログラムできます。(これは、YAFFSの記事では「複数書き込み」と呼ばれます)。

製造業者のデータシートは、製造業者があなたに対して行う条件付きの約束です。データシートのすべての推奨事項に従う限り、メーカーはチップが指定どおりに動作することを約束します。既に書き込まれた領域を避けて、以前に書き込まれたページをプログラムする場合、すぐにリードバックすることで期待するデータが得られる可能性が高いと思われます-新しく書き込まれたバイトは、書き込んだ値です。他のバイトはおそらく変更されていません。ただし、これはデータシートの推奨事項に従わないため、データシート内のすべての約束に依存することはできなくなります。プログラム妨害、オーバープログラミング、チャージトラップ、DRAMロウハンマーに類似した影響などにより、このような認可されていないアクティビティがデータ保持時間と耐久性を低下させるという噂を聞きます。

「メモリ使用スキームは、ビットエラーレートに影響します。部分ページプログラミング、ブロック内での非シーケンシャルページプログラミング、消去なしのブロックごとの過剰な読み取り、および単一ブロック内での読み取り操作の不均等回数による読み取り回数の増加エラーを妨げます。」-ミハル・ジェドラック。 「組み込みシステムのNANDフラッシュメモリ」。

「ページプログラミングイベント中にビットが意図せずに「1」から「0」にプログラムされると、プログラム障害が発生します。このビットエラーは、プログラム中のページまたはブロック内の別のページで発生する可能性があります。バイアス電圧条件ページプログラミング中のブロックにより、少量の電流が近くのメモリセルにトンネルする可能性があります。部分的なページプログラミングを繰り返し試行すると、この状態がさらに悪化します。」-ダグラスシェルドンとマイケルフライ。 「フラッシュメモリで着信拒否テスト」。p。8、9。

「プログラミング操作中にビットが意図せずにプログラムされると(1から0)プログラムの妨害が発生します。...この状態は、ブロック内のランダムプログラミングおよびページへの複数の部分書き込みの適用により悪化します。」 「Yaffs NANDフラッシュ障害の軽減」


0

使用しているプログラミングソフトウェアが既に「必要な」256バイトを書き込んでいる可能性が高いです。1〜256バイトの書き込み機能を提供しているように「表示」されますが、実行しているのは、必要なバイトを256「FF」の「マスク」とOR演算することです。これが正しければ、4Kバイト全体を消去することなく、「安全に」任意のバイトを1回書き込むことができます。チェックサムがコントロール外で書き込まれる場合、おそらく、以前に書き込まれたセグメントに別のバイトを書き込むと、無効なチェックサムが作成されます。これの意味は、チップに依存しています。

プログラミングソフトウェアが「OR-ing」を実行しない場合は、自分で実行できます。256バイトセグメントをクリアし、バイトを正しい位置に書き込むか、またはFFの256バイトマスクを使用して、セグメントを目的のページに書き込みます。

いずれかの方法が特定のチップで機能するかどうかは、簡単に判断できます。最初の128バイトに書き込み、2番目の128バイトに書き込み、最初の128バイトが「めちゃくちゃ」になっていないことを確認してください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.