ezusb.sysとCyUSB.sys

USB-ADC2ですが、ファームウェアの移植が完了しました。ということで現在ホスト側に取り掛かっているのですが、ここで問題が一つ発生しました。新チップのFX2LPでは、デバイスドライバが旧チップのAN2131やFX2が使用していたezusb.sysではなく、CyUSB.sysという新しいものを使う必要があるようです。ということで今まで使用してきたオプティマイズさんのカメレオンUSB(ezusb.sysを簡単に扱うようにしたもの)が使うことができないので、どうにかする必要があります。

とりあえず作戦を立ててみました。
CyUSB.sysにはAPIドキュメントが付属しており、CyUSB.sysの上位ライブラリCyAPI.libにはエンドポイントを通じたバルク転送等の読み書きについて解説があります。ドキュメントをみる限り、ファーム転送の簡単な方法のみが見つからなかったので、これを解決すればよいようです。
解決の方法ですが、FX2LPのTechnical Reference Manualの3.8を読むとファームの転送はVendor Requestという特赦なコマンドを用いて行われているようなので、これを実装すればなんとかなると思います。

いかがでしょうか。何か情報をお持ちの方がいましたら、是非コメントよろしく願い致します。

March 17, 2006 23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdelicious.comでブックマーク

コメント

FX2LPへファームの自前転送できました(と、思います)。
0xa0というベンダリクエストでひたすら書き込みをするだけみたいです。
書き込みはデータはusbsnoopyというソフトで一度ログをとって抜き出しました。
前半部に転送のオマジナイがあって、後半はHexファイルの中身そのものでした。
以上です。

Posted by: Hirata : April 1, 2006 06:55 PM

Hirataさん、情報ありがとうございます。
こちらはまだ試していないのですが、やはり睨んだとおりのようでしたね。あと、usbsnoopyという便利なソフトの紹介ありがとうございます。是非解析の際には使ってみようと思います。

Posted by: fenrir : April 2, 2006 10:57 PM

LP でも ezusb.sys が使えました。

4バイトをEZ-USBに転送して、EZ-USBの方で32ビットの
変数にするためのよい方法をご存じないですか?

s32 dummy;
dummy = EP1OUT[0] * 0x1000000 + EP1OUT[1] * 0x1000 + ...

ではうまくいかなくて、かなり無理したプログラムになってしまいました。

以上、よろしくお願いいたします。


Posted by: TeamKNOx : July 27, 2006 07:23 AM

>TeamKNOxさん
報告ありがとうございます。
すいません、少し懐疑的なのですが、LPでもezusb.sysが使えるのでしょうか? FX2 LPとFX2では、Cypressから付いてくるSDKの中のコンソールがそれぞれCyConsole(CyUSB.sysベース)とEZ-USB Contorol(ezusb.sysベース)で違うので、FX2 LPではezusb.sysでドライブできないものかと思っていました。特別な操作が必要なのでしょうか? 是非認識までの状況等を詳しく教えていただけると大変ありがたいです。
8bit4つを32bitにする件ですが、僕はビットシフト演算を利用しています。こんなコードでどうでしょうか。やはり強引さはかわらないと思いますが。
s32 dummy = EP1OUT[0];
dummy <<= 8; dummy |= EP1OUT[1];
dummy <<= 8; dummy |= EP1OUT[2];
dummy <<= 8; dummy |= EP1OUT[3];

Posted by: fenrir : July 27, 2006 11:13 AM

もう少しいい方法を思いつきました。こちらの方が高速です。
typedef union{
s32 lw_access; //32ビットアクセス
struct{
u8 b0, b1, b2, b3;
} b_access; //8ビットアクセス
} lw_b4_t;

lw_b4_t dummy;
dummy.b_access.b0 = EP1OUT[0];
dummy.b_access.b1 = EP1OUT[1];
dummy.b_access.b2 = EP1OUT[2];
dummy.b_access.b3 = EP1OUT[3];
これでdummy.lw_accessでs32で取り出せます。

Posted by: fenrir : July 27, 2006 02:20 PM

こんばんは

 さっそく、ご回答いただきまして本当にありがとうございました。

 当方の環境では
 s32 dummy = EP1OUT[0];
dummy <<= 8; dummy |= EP1OUT[1];
dummy <<= 8; dummy |= EP1OUT[2];
dummy <<= 8; dummy |= EP1OUT[3];

 のみ動作しました。

 LP での ezusb.sys ドライバ下での動作ですが、
 俺自身はCypressの開発環境(コンソール系)は
 入れていません。
 ezusb.sys を適当なフォルダ にコピーする
 VBSスクリプトを走らせています。
 オプチから miniFX2 が来たのですが、
 上記の環境から何もすることなく、開発・実行が
 出来ています。

 CyUsb の環境も構築しましたが、ezusb.sys より
 遅いので使っていません。
 ファームのダウンロード&再スタート時にRenumで
 こける不具合もありました。
 64ビット化の暁には再度、挑戦しようと思います。
 釈迦に説法だとは思いますが、当方のフレームワークもご笑覧ください。
 http://www.teamknox.com/usb/USBj.html#sub2

 ホストソフトからファームをダウンロード出来るようになっています。
 
以上、よろしくお願いいたします。

Posted by: TeamKNOx : July 27, 2006 11:41 PM

コメントする