F-RAM の RAMTRON を買ってきたので FX3 に接続してみる [USB]
F-RAM というのを入手したので、 FX3 の SPI FLASH の代わりにできないかと、接続してみました。
F-RAM
使用した F-RAM は、 FM25V20-PG という 2Mibit (256kiByte) の製品です。 DIP パッケージがうれしいじゃないですか。 うまく使えるようだったら、 SOIC パッケージを張り替えてもいいな。
接続表
F-RAM をブレッドボードに置いて、 FX3 DVK のピンヘッダとジャンプワイヤで接続します。 F-RAM のそれぞれの端子は、以下のように接続しています。
FM25V20 | 信号名 | FX3 DVK | ||
---|---|---|---|---|
端子番号 | 端子名 | ヘッダ名 | ピン番号 | |
1 | /S | SPI-SSN_UART-CTS | J102 | 2 |
2 | Q | SPI-MISO_UART-TX | J103 | 2 |
3 | /W | VIO4 | - | - |
4 | VSS | GND | J34 | 8 |
5 | D | SPI-MOSI_UART_RX | J104 | 2 |
6 | C | SPI-SCK_UART-RTS | J101 | 2 |
7 | /HOLD | VIO4 | - | - |
8 | VDD | VIO4 | J34 | 2 |
J34 (SPI HEADER) にまとめられると良かったのですが、そのためには基板上の抵抗を取り外さなければなりません。今回は、 SPI-UART 切り替えヘッダの方を使いました。
ブートに使ってみる
FX3 に接続された SPI FLASH には、 FX3 のファームウェアを格納してブート時にダウンロードすることができます。 そこで、 FX3 Software Development Kit (SDK) に付属しているユーティリティ Control Center で SPI FLASH と同じ要領でファームウェアを書込んでみます。 テストに使用したのは、FX3 DVK直結カメラキット "FX3DVK-Cam F1"の付属ファームウェアです。
すると、難なくファームウェアを書込むことができました。 何の障害もありません。 FX3 DVK をリセットすると、 F-RAM からブートしてカメラが起動しました。
それにしても、デフォルト状態の SPI ブートで使用される SPI クロックは、 10MHz のはずなのですが、こんないい加減なジャンパ配線でも動いちゃうものなのですね。
UsbSpiDmaMode プロジェクトを使ってみる
FX3 SDK には、多くのプロジェクト例が同梱されていて、その中に UsbSpiDmaMode というものがあります。 これは、 FX3 の SPI 端子に接続された外部デバイスを操作する時に参照するように用意されたプロジェクト例で、そのまま SPI FLASH とのインターフェイスに使用することができます。
このプロジェクト例では、コントロール転送でコマンド送ることですべての操作を行っています。 詳細は、プロジェクトディレクトリの "readme.txt" に書いてあります。 まず、さきほどファームウェアを書込んだままの状態で、「USBブート」を行い、 UsbSpiDmaMode を RAM にダウンロードして、実行させてみました。
そして、 READ コマンド (0xC3) で先頭の 128 バイトを読み込んでみると、確かにファームウェアイメージが書かれているのが、確認できました。 まあ、このイメージからブートできるので、当然といえば当然です。
ERASE 操作は、可能か
F-RAM という素子は、不揮発な RAM という位置づけをされています。 そのため、 ERASE という概念は、そもそも存在しません。 試しにコントロール転送から ERASE コマンドを送ってみましたが、問題は発生しません。
また、 STATUS コマンドを送信したところ、正常に ERASE が終了したことを示す"00"が返ってきました。
ファームウェアを読んでみると、この ERASE コマンドは、単に ERASE 操作を行い、 STATUS コマンドは WRITE IN PROGRESS (WIP) を返すだけの仕様になっているので、動作そのものに間違いはなさそうです。 そもそも、 F-RAM では、 SPI からデータを送った直後に、実際にメモリ素子に消去・書き込みを行うので、待ち時間はゼロです。 そのため、この WIP ビットも実装されておらず、常に "0" を返すようになっています。 つまり、消去されたつもりになっているのです。
では、消去されたつもりの領域はどうなっているかというと、このように元のデータが残ったままになっています。 ERASEコマンドを実行したメモリ領域が、実は、消去されていない。 ここだけは、 SPI FLASH との互換性が無いので、注意が必要です。
消去せずに書き込み
F-RAM は、不揮発な RAM なので、消去などせず、いきなり書き込みを行うことができます。 コントロール転送で書き込みコマンドを送信して、最初の11バイトだけに書き込みを行いました。
そして、書き込まれた領域を読み込んでみると、最初の11バイトだけが変更されて、残りの部分については変化していないのがわかります。 もちろん、消去もされていません。
むすび
F-RAM という素子を FX3 DVK に接続して、どんな動きをするのか確認してみました。 ERASE コマンドが実装されていないことで、従来の SPI FLASH を想定していたファームウェアがそのまま使えないのではと考えていたのですが、 ERASE コマンドは適当に無視される仕様であることがわかりました。 ERASE によってデータが消去されずに残ってしまう点だけを注意すれば、 SPI FLASH 向けのファームウェアでも、ある程度は使用可能でしょうか。
参考文献
USB 3.0設計のすべて: 規格書解説から物理層のしくみ,基板・FPGA・ソフトウェア設計,コンプライアンス・テストまで (インターフェース・デザイン・シリーズ)
- 作者: 野崎 原生
- 出版社/メーカー: CQ出版
- 発売日: 2011/10/11
- メディア: 単行本
コメント 0