3

この質問が Stackoverflow に当てはまることを願っています (そうでない場合は、既に謝罪したいと思います)。

私はSilabsのC8051F340マイクロコントローラを持っています。uC から不揮発性フラッシュ メモリに情報を格納する小さなインターフェイスを作成しました。説明したデータ シートのように、アドレス 0x0200 ~ 0x0300 の間のすべてのデータを保存します。そこにデータをコピーするには、memcpy を使用します。

char xdata *ptr_selection       = 0x0210;
// Some other code here
memcpy (ptr_selection, writeBuffer, sizeof (writeBuffer));

コピー自体はうまく機能します(フラッシュメモリを調べたところ、データが正しく保存されていました)-uCを取り外して5秒ほどで再度接続しても、データはまだそこにあります。しかし、切断したままにしておくと、データは多かれ少なかれ「リセット」されます。つまり、毎回ほぼ同じ「リセット値」になります。それで、私は何を間違っていますか?フラッシュデータが不揮発性ではないということですか、それとも何か問題がありましたか?

4

2 に答える 2

2

質問に表示されたコードに基づいて、不揮発性フラッシュ メモリではなく RAM である外部データ (xdata) に書き込もうとしています。数秒後にデータが消える理由は、電源コンデンサが内部 RAM を動作させ続けるのに十分な時間チップに電力を供給しているためです。

フラッシュ メモリに書き込むには、特定のプロトコルに従ってフラッシュ プログラミング回路のロックを解除し、書き込む領域を消去してから、データシートのセクション 12 に記載されているように MOVX 命令を使用してバイトを書き込む必要があります。

このシリコン ラボのアプリケーション ノート「ファームウェアからフラッシュへの書き込み」では、このプロセスについて詳しく説明しています。

于 2011-11-20T19:55:55.520 に答える
1

フラッシュ メモリは、通常の SRAM や SDRAM メモリとは異なります。

ただ書き込むことはできません。あなたができる最大 - 通常のメモリから読み取ることができます(NORフラッシュがある場合のみ)。

ただし、書き込みたい場合は、最初に消去する必要があります (すべてのビットを 1 に設定します)。そうして初めて、それに書き込むことができます。通常、消去はセクタ単位で行われます。彼らは消去セクタと呼んだ。サイズについては、マイクロコントローラのデータシートを参照してください。

PS

CPUのデータシートによると、書き込むには特別な命令を使用する必要があります。memcpy が内部で使用していることを確認してください。

于 2011-11-20T19:56:54.537 に答える