2013年12月30日月曜日

M25PX16をフルコントロール! (M25P16とM25PX16を比較してみる)

あらまし

2012年の10月にM25P16をフルコントロール!と題してM25P16の制御コードを公開しました。
今年に入ってM25PX16を使用する機会があり、それじゃあM25P16と何が違うの?というのを簡単に調べた結果をまとめてみました。一番下にはソースコードも示しましたのでご覧下さい。

M25P16とM25PX16

ブロック・ダイアグラムを見る限り、基本的な構成は変わりませんが、「64 OTP bytes」という何かが追加されています。ここで言うOTPとは、one-time programmableの略で、64バイトのワンタイム・ロムが存在するという事がわかります。なるほど、これは装置物に仕立てる時のアレコレに使えます。


次にメモリ・マップを確認してみると、M25PX16ではサブ・セクタが導入されている事がわかります。


M25PX16のコマンドがどうなっているのかというと、M25P16のコマンド・セットに加えて、幾つかの新しいコマンドが追加された形になっています。


M25PX16では、ロックレジスタが新設され、不用意なライトからメモリを保護できるように機能強化されています。また、DQ0とDQ1の二線を使って入出力ができる機能が追加されており、M25P16よりも高速にR/W可能なコマンドも用意されました。消去コマンドも、M25PX16ではサブ・セクタ単位での消去も可能となっています。

ざっと見た結果、M25P16を機能強化したのがM25PX16という感じで、M25P16を使用していた基板にM25PX16を使用する事もソフトウェアの変更のみで可能という事がわかりました。READ IDENTIFICATIONコマンドを発行すれば基板にどちらのフラッシュ・ロムが搭載されているのか検知可能ですから、下層でうまく実装する事で自動的に切り替える事も可能です。


ということで、M25P16とM25PX16に対する制御コードを記述し、実機動作確認済みのソースコード公開します。

ソースコード

  • 実機で動作確認済みのソースコードからターゲット依存箇所を取り除いたソースコードです。
  • 無保証です。一切の責任を負いません。
https://github.com/shinta-main-jp/M25PX16