2012年10月8日月曜日

M25P16をフルコントロール!

M25P16は、SPIバス互換シリアルインターフェースを持つ、16Mビットのフラッシュロムです。
8ピンの小さなパッケージから選択可能で、気軽にフラッシュロムを搭載する事ができます。


内部ブロックは以下のようになっています。
ページサイズ(Xアドレス)は256バイトで、256ページで1セクタです。
M25P16で消去可能な最小単位はセクタですので、256ページをまとめて消去(実際にはビットを全て1に)する事になります。


ちなみに、M25P16の場合、32セクタあって、総計8192ページ存在します。
なかなか広大な敷地が広がっています。嬉しい。

コマンド群は以下のようになっています。
データライト系のコマンドは「PAGE PROGRAM」、「SECTOR ERASE」、「BULK ERASE」です。


何か別の開発を中心に考えている場合、「一応ちゃんと実装したいなぁ」とか考えて上記の対応を始めると意外に時間がかかります。

今日は意外に時間がかかった(わけでもない気がするけど・・・)M25P16の実装を公開します。

ダウンロードはこちらから。

ソースコードとヘッダから構成されています。
ソースコードのSPIマクロに実装詳細を提供すれば、すぐに使えます。
SPIのキャラクタについてはデータシートを参照して下さい。


以下の検証を実施済みです。
  1. セクタ消去を実行する。
  2. M系列信号発生器から系列信号を取り出して「PAGE WRITE」操作用データを生成する。
  3. ページライトを実行する。
  4. M系列信号発生器を再度同じシード(種)で初期化する。
  5. 「READ DATA BYTES」操作でデータを読み込んで系列信号と比較。
  6. 上記を全セクタに対して実行する。

M25P16の全バイトをくまなくI/Oできる事を確認して満足満足・・・。
ですが、「本当にやりたい事」はこの先にあります。

0 件のコメント:

コメントを投稿