私はLPC4078とMCUXpressoを使用して、EEPROMに値を保存する実験を行っています。
ページ全体を消去せずに、ページの中央に数バイトのデータを書き込みたい。
データシートを見ると、ページレジスタに書き込むデータを書き込んだ後、さらに不揮発性メモリにプログラムする必要があり、それは消去/プログラム操作によって行われると記載されている。
消去/プログラム操作は、ページ全体を消去するのか、それとも新しいデータが格納されているページ領域だけを消去するのか、また、どのようにしてそれを判断するのか?- 消去/プログラム用のアドレス設定では、6 つの lsb が無視されるため、ページのみが認識されます。
UM10562.pdfには、このマターについて明確な記載はありません。
よろしくお願いします。
アレックス
該当プロジェクトを含むワークスペースを添付します。LPC4078上でlpc-link2デバッガを使って実行しました。
(セミホスティングを動作させるのが面倒だったので、ブレークポイントを使ってデータを検査しました。)
こんにちは、 @alex_conway さん。
こんにちは、アリスさん。
私の実験結果はそれとは異なることを示している。
まずは手始めに、lpc_board_ea_devkin_4088ライブラリとperiph_eepromデモプロジェクトを使って小さなプログラムを作成しました。
EEPROMの1ページを消去して、それを読み戻します。驚いたことに、結果は0xFFではなくすべて'\0'だった。
次に、そのページのアドレス0に「ABCDEFG\0」を書き込み、ページを読み戻します。「ABCDEFG\0」を受け取ります
次に、そのページのアドレス7に「ABCDEFG\0」を書き込み、ページを読み戻します。「ABCDEFGABCDEFG\0」を受け取ります
これはすべて予想通りだったが、2点だけ例外があった。
1. EEPROMを消去した後、0を読み取る
2. Chip_EEPROM_Write() の実装を見ると、読み出し-変更-消去-書き込みのシーケンスがないように見えます。Chip_EEPROM_WritePageRegister と Chip_EEPROM_EraseProgramPag があるだけです。
だから私はこの質問をしたのです。
よろしくお願いします。
アレックス
printf文字列にすべて改行を追加したら、セミホスティングがうまく動作するようになりました!また、私が言ったことすべてをより明確に裏付ける証拠もあります。
消去するとEEPROMが0x00に設定されます
このコードは、読み取り→変更→消去→書き込みのシーケンスを実行せず、消去→書き込みのみを実行します。
LPC4078は、消去時に書き込みが行われた場所のみを消去するようです。
この点について、ぜひとも明確な説明をいただきたいです。
よろしくお願いします。
アレックス
「エスカレーション」という言葉が何を意味するにせよ、NXPからはこれに関してそれ以上の回答は得られていない。
まだ確認が必要です。