« データ転送速度190MBytes/sec達成!! | トップページ | WDMでのDMAと物理アドレス »

2009.03.22

WDM版汎用PCI Exiressデバイスドライバをリリースしました

ようやく、WDM版汎用PCI Exiressデバイスドライバをリリースできました。
これで、本当にようやく、お客様にアプリケーションの開発を始めてもらうことができるようになりました。

このドライバは、PCI Express用という名前ですが、Expressではない普通のPCIでも使えます。
使い方と説明はこちらのページにあります。
http://www.tokudenkairo.co.jp/pcie/drvman.html
ダウンロードはこちらのページにあります。


このドライバは、特電PCI Express評価ボードがなくても、汎用のPCI Expressデバイスドライバとして、PCIの構成を見たり、システムのメモリにアクセスしたりすることができます。
・PCIの構成を見るツール(PCIeMan)はこちら
・PCIにいろんな(コンフィグ/メモリ・リード/ライト)リクエストを発行するツール(testapp.exe)はこちら
です。
PCI Expressでなくても普通のPCIでも使えます。Capability Pointerを辿っていく機能も実装したので、結構遊べると思います。
Pcieman

このドライバは、非商用であれば、汎用PCIドライバとして無償で使用することができます。
また、特電PCI Expressボード用ドライバとしてならば、商用・非商用を問わず無償で使用することができます。

このドライバをフルにインストールすると、下の図のように2つのデバイスがインストールされます。
Dm

ところで、WDMドライバの開発に便利なテクニックを発見しましたので紹介します。

PCIやPCI ExpressをFPGAで作る場合、FPGAをコンフィギュレーションしてしまうとPCIの構成情報(BARレジスタなど)が消えてしまいます。パソコンを再起動するのは至極面倒!
そんなとき、WindowsのデバイスマネージャでPCIデバイスを選択して右クリックし、一旦「無効」にして「有効」にすると、PCIのコンフィギュレーションレジスタが再度設定されるのです。
デバイスマネージャで無効→有効をすると、デバイスドライバが更新され、PCIのコンフィギュレーションレジスタが再設定される

それどころか、無効にしたとき、ある条件が揃うとsysファイルがメモリからアンロードされます。次に「有効」にしたとき、デバイスドライバのsysファイルがメモリに再度読み込まれます。

要するに、デバイスドライバのsysファイルを作りなおしたら、C:\windows\system32\driversにコピーして、無効→有効、とやれば新しいドライバがインストールされるのです。ハードウェアウィザートとかの面倒なGUIを操作してINFファイルを指定する必要はありません。
パソコンを再起動しなくても、デバイスドライバの更新や、PCIコンフィグ空間の再設定ができるのです。

これは便利!

さて、このドライバは以下のような特徴を備えています。
・WDMに対応した、正当な方法で作られている
・PCIコンフィギュレーションレジスタの読み書きが可能
・PCIボード(Express含む)上のメモリ空間の読み書きが可能
・PCIバスドライバにアクセスして構成情報を得ている(コンフィギュレーション空間に直接アクセスはしない)
・GUIDを用いた新しい方法でシンボリックリンクを作成している
・CombinedWriteを用いて、64バイトサイズの書き込みリクエストを発行できる
 (CPU→PCI Express方向へのバースト書き込みは非常に高速)

という感じで、WDMの世界では行儀がよいと思われる方法に従って作成しました。
なので、今後、64bit版やVistaやWindows7などへの対応もスムーズにいけるのではないかと期待しています。

あとは、物理メモリの確保やDMAなどの機能や、アクセスしてはいけない領域にうっかりアクセスするのを防ぐ機構の開発などをしていきたいと思っています。

また、特電PCI Express IPコアで大量のデータを読み書きする実験を行いました。
Testapp

これは、8192バイトの乱数データを読み書きするテストなのですが、最終リリースのコア(0.5)では、ACKとSKPが偶然ぶつかるとパソコンが読み取り失敗するという問題があることがわかってきました。
この問題を取り除いたところ、1500万回程度読み書き(120GBytes程度のデータ量)しても、エラーが起きなくなったので、おそらく問題は解決されたのでしょう。
不安いっぱいのスタートでしたが、このコアに自信が持てるようになってきました。

最新版のIPコアは、Version0.55としてアップロードしました。
次はアドインカード→PC方向のDMA転送を目指します。

どうぞよろしくお願いします。

|

« データ転送速度190MBytes/sec達成!! | トップページ | WDMでのDMAと物理アドレス »

コメント

NTドライバをWDMに移植しようとしている素人で、
ようやくほぼ空のsysを手動インストールできたところです。
>要するに、デバイスドライバのsysファイルを作りなおしたら、
>C:\windows\system32\driversにコピーして、無効→有効、とやれば
>新しいドライバがインストールされるのです。
sysをどのように書けば良いのでしょうか。

投稿: T.T | 2010.06.20 16:21

コメントを書く



(ウェブ上には掲載しません)




« データ転送速度190MBytes/sec達成!! | トップページ | WDMでのDMAと物理アドレス »