ディスクシステムローダー(セーバー)の準備

  • 2012/12/30(日) 17:39:41

なんか、凄く昔(暑かったころ)の話をいまさらやってます。

で、どういうことをしたいかというと、ディスクシステムからのRDデータをそのままタイムカウントしてあげて、すべてのビット変化時間を記録するというもの。

前にもちょっと書きましたが、96.4KHzのクロック動作するディスクシステムなので1クロックがおおよそ10.37us程度です。
MFM変調されているので、

Clock ----____----____----____----____----____----____----____----____----____

Data ----------------________________________--------________----------------
1 1 0 0 0 1 0 1 1
C/D |C |D |C |D |C |D |C |D |C |D |C |D |C |D |C |D |C |D |
Disk ____-_______-___________-_______-___________-_______________-_______-___

上から、ベースのクロック(96.4KHz)、ビットとしてのデータ(0か1)、MFM方式のクロックウィンドウの間隔とデータウィンドウの間隔(大体です)、実際のRDからの出力の順であらわしてみました。
で、要するに、一番下のRDのビットが立ち上がったところから次の立ち上がりまでの時間を計測してそれをどんどんデータにしていく必要があります。
ベースクロックから考えると、最小で10.37us、その次に長いのが、1.5倍で15.5us程度、最長のもので20.74usになります。

で、まず考えたのが、FT245RLをUSBで接続してパラレルでデータをやり取りするもの。
これだとD2XXでBitBangで制御すれば理論的には1Mbyte/s程度のデータ入出力が可能ということでした。で、1Mbyte/sでも使用するピンはRDの入力1ピンの変化を見ていくだけ。
ですので、どっちにしても1Mbits/secの能力です。
ってことは、データの取りこぼしが無く良好に制御できたとしても、10^-6sec=1us程度の分解能しかありません。下手をすると上記の速度さえ間に合わないということに。
これではまったく速度が足りないということが判り、Windowsなどから直接データをサンプリングするのは危険だという結論になりました。

考えたのがAVRのタイマを使ってきちんと測定し、その間隔のデータをwindows機へ送信する形で設計する方向とします。

で、結局どの程度の分解能をもたせるか?ということから考えました。
ちなみに立ち上がっているビットの長さは1us程度で意味はあまりありません。
なぜならディスクはそのエッジトリガによってデータを扱うからで、エッジとしてパルスが出ていればその長さには意味がありません。
ディスクシステムからの出力は5Vですので、AVRも5Vで使用することにしました。最近の一般的なものであれば、オーバークロックも可能ですが、とりあえず定格の20Mhzで動作させます。
すると最大の分解能は1/20Msecなので、50nsecになります。
で、50nsecの分解能で上記の間隔をデータ化する、10.37us=207カウント、15.5us=310カウント、20.74us=415カウントになり、16ビットカウンタでインプットキャプチャを利用すればデータ化は問題ないと考えました。

しかし、それを実装する上でさらに問題が発生。
カウンタとしてデータは取れるのですが、1つのデータは2バイト長になってしまい、10.37usのデータが連続した場合、200Kbyte/sec程度のデータ通信速度が必要です。
USB2.0なら大丈夫ですが、問題はAVR側の方でした。
USARTとかでいいかなと思っていましたが、理論値の最高でも2Mbps程度ですので、ぎりぎりです。

で、一つの方法として、分解能を落としてみます。
50nsecでのサンプリングをやめて、プリスケーラを1/8にて400nsecでのサンプリングにします。
これだと当然すべてのカウントが256未満になりますので、1データ辺り1バイト長になりますので、半分の転送速度でOKです。
もしくはタイマーのクロック別なカウンターで生成して、もうちょっと分解能を上げ(100nsec程度)ても1バイト長になりますので、このほうがいいかなと思っています。
で、この状態でも200Kbyte/sec程度の速度が必要でした。
FT232RLでは最大460kbps程度でまったく間に合いません。

結局いろいろ探していると、FT232Hなるものが!
おおっ!まさしくこれです。
高速なFIFOとかもあるし、いろいろできそうですが、USART以外でAVRにあるインターフェースで高速なものは後はSPIインターフェースです。
これがあればUSB-SPIとして通信できますよ。
FT232H側がSPIのマスターになるので、AVR側はスレーブですが、スレーブでもマスタークロックの1/4で通信できるので、5Mbits/secつまり600Kbyte/sec程度はいけるのか?ということのようです。

こんな妄想を繰り返し、パーツを集めて今年が終わりました。
皆様良いお年を。
では〜

この記事に対するコメント

この記事にコメントする

管理者にだけ表示を許可する