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 コマンド中