8ピンの小さなパッケージから選択可能で、気軽にフラッシュロムを搭載する事ができます。
内部ブロックは以下のようになっています。
ページサイズ(Xアドレス)は256バイトで、256ページで1セクタです。
M25P16で消去可能な最小単位はセクタですので、256ページをまとめて消去(実際にはビットを全て1に)する事になります。
ちなみに、M25P16の場合、32セクタあって、総計8192ページ存在します。
なかなか広大な敷地が広がっています。嬉しい。
データライト系のコマンドは「PAGE PROGRAM」、「SECTOR ERASE」、「BULK ERASE」です。
何か別の開発を中心に考えている場合、「一応ちゃんと実装したいなぁ」とか考えて上記の対応を始めると意外に時間がかかります。
今日は意外に時間がかかった(わけでもない気がするけど・・・)M25P16の実装を公開します。
ダウンロードはこちらから。
ソースコードとヘッダから構成されています。
ソースコードのSPIマクロに実装詳細を提供すれば、すぐに使えます。
SPIのキャラクタについてはデータシートを参照して下さい。
以下の検証を実施済みです。
- セクタ消去を実行する。
- M系列信号発生器から系列信号を取り出して「PAGE WRITE」操作用データを生成する。
- ページライトを実行する。
- M系列信号発生器を再度同じシード(種)で初期化する。
- 「READ DATA BYTES」操作でデータを読み込んで系列信号と比較。
- 上記を全セクタに対して実行する。
M25P16の全バイトをくまなくI/Oできる事を確認して満足満足・・・。
ですが、「本当にやりたい事」はこの先にあります。
0 件のコメント:
コメントを投稿