Serial ATAのIPコアをUSBでコントロールできるようにした
SATAのIPコアを2週間ほど前から開発しているのですが、ようやく、実用的な何かの形になってきました。
次の写真のように、EXPARTAN-6TにSATAのHDDとUSBをつなぎますと、
パソコン上の制御ソフトから、SATAのコマンドを自由に発行することができるようになって、SATAのハードディスクをいろいろ操作できます。
「パソコン →USB2.0 →EZ-USB FX2 → FPGA(XC6SLX45T) → SATA HDD」
という経路でつながっています。
現在、XC6SLX45TのSLICEの8%ほどを使用しています。
SATAのロジックやステートマシンだけならそれほどSLICEを食わなかった(せいぜいFPGA全体の5%くらい)のですが、セクタ番号やシリンダ番号などを格納するレジスタで、ものすごく消費したようです。
さて、専用のソフト(開発中)をつなげて、この怪しげな装置でHDDのDevice IDコードを読み出してみます。
何かが読めているではないですか!!
物の本によると、Device IDは512バイトあって、シリアル番号とディスクのタイプがそれぞれ20バイト目と54バイト目から書かれています。次のように解読できました。
Disk S/N =" JP1572JE03PPKK"
Disk Type="Hitachi HDS721050CLA362
上の写真で、ラベルに印刷されているものと見比べて見ると一致しています。
他にも論理シリンダ数とか、○○をサポート、などといった情報がDevice IDには格納されているようです。
ブートコードらしきものと、パーティションテーブルが書かれているのがわかります。
このように、USBから好き勝手なSATAコマンドを発行して、返ってくるデータを見ることができるようになりました。セクタライトは怖いのでまだやっていませんが、きっとできるでしょう。
SATAのCD-ROMは何故かアクセスできないようです。プロトコル上何か足りないものがあるのかもしれません。
このサンプルアプリは、近いうちにダウンロードできるようにしようと思います。
| 固定リンク
コメント
>SATAのCD-ROMは何故かアクセスできないようです。
ATAPIデバイスは、ATAデバイスとはコマンドが違います。
Identify Deviceコマンドも、ATA用とATAPI用があります。
セクタリードも、ATAPI用のプロトコルが決まってます。
投稿: 名無しさん | 2011.09.13 00:15