1.はじめに
 FRAMとはRAMTRON(現在はサイプレス)社の商標で、一般にはFeRAMと呼ばれている。
 書換回数が1014回と、一般のEEPROM(106回)に比べるとけた違いで、
 かつ、書き込み時間も早い(待ち時間が無い)ことが特長である。

 これまで当社では、インタフェース方式がI2C方式のFRAM(FM24C04B など)を使用してきたが、
 I2C方式のクロックリカバー処理がただしく動作しないことがあったことから、
 今回、別のインタフェース方式であるSPI方式のFRAMを採用した。その結果を紹介する。

2.インタフェース
(1)ハード
 マイクロワイヤーと同じく4線式であるが、最大CLKが20MHzと早いので、IO制御とした場合でもwait無しで
 動かすことができる。

信号名 機能
 /CS チップセレクト
 SCK クロック入力
 SI データ入力
 SO データ出力
 /WP 書き込み保護(通常未使用)
 /HOL 一時停止(通常未使用)

(2)ソフト
 mode0とmode3があるが、この違いは、/CS立下り時のSCK論理がHかLかだけである。
 どちらを選択するかはユーザに委ねられるので、今回はmode0を採用した。
 コマンドは6種あるが、実際に使用するのは3つだけである。(下記①~③)
 FRAMは、書き込みbusyという状態が存在しない為、busy確認の為のRDSRコマンドは使用していない。
 WRENコマンドはWRITE毎に必要で、これが無いと書込みが出来ない。(ここが重要だった。)

コマンド一覧
コマンド名 機能 ① WRENコマンド
①WREN 書き込みイネーブルラッチ
  WRDI 書き込みディゼーブル
  RDSR ステータスレジスタ・リード
  WRSR ステータスレジスタ・ライト
②READ メモリーデータ・リード
③WRITE メモリーデータ・ライト

② READコマンド

③ WRITEコマンド

3.動作確認結果
 READ/WRITEの実際のタイミングを、4項(1),(2)に示す。
 今回は汎用IOを使用してハンドシェークを行っている。
 このことから、アクセス中に割込みが入りハンドシェークが中断しても問題が無いかを確認した。(4項の(3))
 結果、正常に読み書きできることが確認できた。
 SPI方式は、同じパッケージのpinアサインで、大容量フラッシュメモリー(16Mbit等)にも採用されており、
 大容量化にも容易に対応できることから、今後も採用していく方針である。
 (ただし、コマンドのデータbit数はメモリー容量により異なるため、ソフトの修正は必要。)

4.動作タイミング波形
(1)READ動作確認  ワードアドレス0x55番地から、0x55aaを読みだしたとき
 実際にはバイトアドレスの0xaa番地から0x55、0xab番地から0xaaを読んでいる。
 FM25040Bはバイトアクセスしかできないため、ワードアクセスはread動作を2回行っている。
 

(2)WRITE動作確認  ワードアドレス0xaa番地に、0xaa55を書いたとき
 実際にはバイトアドレスの0x154番地に0xaa、0x155番地に0x55を書いている。
 ワードアクセスのためwrite動作を2回行っている。各WRITEコマンドの前にWRENを出している。
 

(3)ハンドシェーク中断時の動作
 アクセス中に100μsec待ちを入れた時、いずれの場合もデータは正しく読み書きできた。
 ①WREN コマンド中                      ②WRITE コマンド中
   

 ③WRITE アドレス中                      ④WRITE データ中

   

 ⑤READ コマンド中                     ⑥READ アドレス中
   

 ⑦READ データ中