- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
FX3の「同期スレーブFIFO」のサンプルデザインを使用して、FX3とホストPC間でUSB3.0の通信試験をしているのですが
ホストPC側でC++
StreamerからBULK OUTを行うとXfer
request rejected. NTSTATUS = c0000001のエラーメッセージが表示されて通信が停止する事象が発生しています。エラーコードより原因の特定はできますでしょうか?
【詳細】
BULK OUTのエラー発生時のGPIFIIのパケット読み出し波形を取得したところ、添付画像のような波形となっていました。1回目のパケット読み出しは問題なく成功しているのですが、2回目のパケット読み出しが異常な波形となっています。規定のパケット長(1024Byte)を読み出し終わる前にFLAG_Cがアサートされている上に、それよりも前にアサートされるべきFLAG_Dがアサートされません。
この結果を見ると、FLAG_Cがアサートされている理由は、C++ StreamerのBULK OUTの最後でショートパケットを受信しているためではないかと推測されますが、
その推測で正しいでしょうか? C++ StreamerのBULK OUTの仕様を教えて下さい。
また、上記が正しいとしても、FLAG_Cがアサートされているのに、それよりも前にアサートされるべきFLAG_Dがアサートされない理由が分かりません。
FLAGの動作としてこのような動作となるのは正しいのでしょうか? FLAGの動作について教えて下さい。
- 評価で使用しているサンプルF/W : AN65974の「SlaveFifoSync」のファームウェア
但し、下記について一部FWを修正して評価しております。
― LOOPBACK_SHRT_ZLPのDefineを無効、STREAM_IN_OUT のDefineを有効
マクニカ 荒井
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
こちら側ではお客様の状況が確認できないため、どこに問題があるかを明らかにし、問題を調べていきたく思います。
まず、大きく分けて、ホストアプリケーション、FX3、FPGA (Zynq7000評価キット ZC702)のうち一つ以上に問題が存在すると考えられます。
・ホストアプリケーションは、サイプレス社の用意したStreamerやControl Centerを利用し、現在Streamerアプリケーションでのみ投稿いただいた問題が発生しています。
・FX3では、AN65974の「SlaveFifoSync」のファームウェアを使用しています。(STREAM_IN_OUTに対応)
・FPGAは、ZC702を使用しているとのことですが、verilogはStreamerに対応した論理となっていますか?ピンマッピングは正しく行えていますか?PCLK (GPIF IIに供給するクロック)には100MHz、またはそれ以下の周波数のクロックを供給していますか?
今の所FPGA側の設定に原因があるのではないか、と感じているのですが、可能であればFPGAの設定情報をご提供いただけますでしょうか。
USB Protocolアナライザー等での調査は、各種設定が正しいことを確認できた後に行うことになるかと思います。
FYI: Control Centerアプリでもloopbackは確認できますが、より多くのデータを送った場合の動作を確認するにはBulkloopアプリケーションがご利用いただけます。(Bulkloopアプリケーションを使う場合にはそれに応じた論理をFPGAで使う必要があります。既にサイプレスで用意されているものを使用することも可能です。)
C#版 C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\c_sharp\bulkloop\bin\Release\BulkLoop.exe
C++版 C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\cpp\bulkloop\x86\Release\bulkloop.exe
よろしくお願い致します。
Hirotaka Takayama
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
・NT STATUSについて
Microsoftの"2.3.1 NTSTATUS Values"のページに従い、
"NTSTATUS 0xC0000001"は"STATUS_UNSUCCESSFUL"を指し、
"{Operation Failed} The requested operation was unsuccessful.(要求した操作が失敗しました。)"
という意味になります。
そのため、BULK_OUT転送時にこのエラーメッセージが出たのはXfer Requestが失敗したためです。
(これだけでは原因特定になりません。)
・Streamerアプリケーションについて
以下のドキュメントにて簡易的ですが情報が提供されています。
AN86947 https://www.cypress.com/file/202286/download
あとは、C++でもC#でもStreamerアプリケーションのソースコードがございますのでこちらもご参照ください。
ショートパケットが受信されたというのは推測であり実際に確認されたわけではないですよね?
ショートパケットは受信されない筈です。
・FLAGの動作
FLAG C, Dの動作としては、ご理解いただいている通り、FLAG_Cがアサートされるより前にFLAG_Dがアサートされるのが普通です。
何か問題が起きていますが、現状ですとまだわかりません。
以下、問題解決のために教えてください。
Q1. 使用しているFPGAボードはなんですか?Spartan 6 SP601評価キットですか?
Q2. Verilogファイルは編集していますか?またはSpartan 6 SP601用に用意している"slavefifo2b_fpga_top.bit"を使用していますか?
Q3. Bulkloopアプリケーションを使い、loopbackは試していますか?
試していない場合、試してみていただけますか?
試している場合、問題はありませんでしたか?
よろしくお願い致します。
Hirotaka Takayama
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Q1. 使用しているFPGAボードはなんですか?Spartan 6 SP601評価キットですか?
Q2. Verilogファイルは編集していますか?またはSpartan 6 SP601用に用意している"slavefifo2b_fpga_top.bit"を使用していますか?
[Ans.]
FPGAボードはXilinx
Zynq7000評価キット(ZC702)です。AN65974のFPGA論理を参考にして独自に作成したFPGA論理を使用しています。
Q3. Bulkloopアプリケーションを使い、loopbackは試していますか?
試していない場合、試してみていただけますか?
試している場合、問題はありませんでしたか?
[Ans.]
Control Centerアプリを使用したLoopbackでは再現しません。
StreamerアプリでのみBULK
OUTのエラーが発生します。
上記状況のみでの解決が困難であり、アナライザーでのログ取得が必須な場合、お客様にてアナライザーを所持していない事もあり
別途相談させて頂ければと考えております。
宜しくお願い致します
以上
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
こちら側ではお客様の状況が確認できないため、どこに問題があるかを明らかにし、問題を調べていきたく思います。
まず、大きく分けて、ホストアプリケーション、FX3、FPGA (Zynq7000評価キット ZC702)のうち一つ以上に問題が存在すると考えられます。
・ホストアプリケーションは、サイプレス社の用意したStreamerやControl Centerを利用し、現在Streamerアプリケーションでのみ投稿いただいた問題が発生しています。
・FX3では、AN65974の「SlaveFifoSync」のファームウェアを使用しています。(STREAM_IN_OUTに対応)
・FPGAは、ZC702を使用しているとのことですが、verilogはStreamerに対応した論理となっていますか?ピンマッピングは正しく行えていますか?PCLK (GPIF IIに供給するクロック)には100MHz、またはそれ以下の周波数のクロックを供給していますか?
今の所FPGA側の設定に原因があるのではないか、と感じているのですが、可能であればFPGAの設定情報をご提供いただけますでしょうか。
USB Protocolアナライザー等での調査は、各種設定が正しいことを確認できた後に行うことになるかと思います。
FYI: Control Centerアプリでもloopbackは確認できますが、より多くのデータを送った場合の動作を確認するにはBulkloopアプリケーションがご利用いただけます。(Bulkloopアプリケーションを使う場合にはそれに応じた論理をFPGAで使う必要があります。既にサイプレスで用意されているものを使用することも可能です。)
C#版 C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\c_sharp\bulkloop\bin\Release\BulkLoop.exe
C++版 C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\cpp\bulkloop\x86\Release\bulkloop.exe
よろしくお願い致します。
Hirotaka Takayama
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
>今の所FPGA側の設定に原因があるのではないか、と感じているのですが、可能であればFPGAの設定情報をご提供いただけますでしょう>か。
上記設定情報に関しして、項目を具体的にして頂く事で回答可能となっております。
・参考までに、GPIFIIインターフェースのクロック設定は100MHzで、ピンアサインは正しく設定しています。
又、ピンアサインが正しく設定されていなければControl CenterでのBULK OUT転送は出来ないという認識ですが正しいでしょうか?
根拠はありませんが、FLAG_C、FLAG_Dの振る舞いを見ると、GPIFIIのステートマシンが異常なステートに陥っているように思えます。
GPIFIIのステートマシンの状態をリアルタイムに見る方法はありますでしょうか?
可能なら調査してみたいのですが。よろしくお願い致します。
マクニカ 荒井
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
GPIF IIのステートを見る方法としては、CyU3PGpifSMState(&curState) が役立ちます。
以下にGPIF IIステートを確認するためのプログラム例を示します。
uint8_t curState_p; CyU3PGpifGetSMState(&curState_p); CyU3PDebugPrint (4, "Current status = %d\r\n", curState_p); |
AN65974は日本語も英語もございますので、精読し、仕様に従ってFPGAを動作させていただければと思います。
よろしくお願い致します。
Hirotaka Takayama