2012年4月8日日曜日

SPIコントローラの作成 4

SPI BUSのクロックをSPIモジュールのクロックと同じにしていたのだが、これだと
周波数を下げて使いたい場合にシステム全体の周波数を下げることになったり、
あるいは、非同期FIFOで繋いだりといったことになって使い辛い。
そこで、分周器を追加してSPI BUSのクロックを設定できるようにした。分周比は
1/2~1/64の間で設定できる。 SPI規格にはクロック極性(CPOL)と位相(CPHA)の
組み合わせで4種の動作モードがあるようなので、これにも対応した。
 また、SPI BUSの送受信データのエンディアンを設定できるようにした。
その結果、レジスタ仕様は以下のようになった。



制御プログラムは以下のような感じになる。
プログラムを起動した時点でN25Q128のSPI I/Fモードがどのモードか不明という前提で
まず、動作モードを調べ、次にそのモード用のコマンドでQuad I/O SPIモードに設定し直している。
(※. 差し替えました。 2012.04.29)


以下はリトルとビッグそれぞれのエンディアンでN25Q128のメモリをリードした結果だ。
SPI BUSのクロックは50MHzに設定した。


また、以下はbitファイルのhexダンプだ。

bitファイルの構造は先頭にファイル情報があり、その後(白黒反転部)が回路情報となっている。
上記のメモリリードの結果と比べると、回路情報部をそのままメモリに書き込めば良さそうだ。
(※.現在N25Q128に書き込まれている回路情報と上記でダンプしているbitファイルはまったくの
別物なのでダンプ内容の細部は異なるがデータ構造をみて判断している。)

ということで、SPI コントローラとしては動作は問題なさそうだ。しかし、N25Qの書換を高速に行
うためには、PC-FPGA間の通信も高速化する必要がある。現在はUSB-UARTで115200bpsと
なっているため、何とかしてこれをもっと高速化しなければならない。

また、このSPIコントローラはSD/MMCカードにも使えるんじゃないかと思う。
そのうち、DE0に実装して試してみよう。

0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...