1

USB ポート経由でボード上の個々のチップを制御する Windows TCL アプリケーションがあります。bitbang モードで FTDI ドライバーを使用しています。Bitbang モードは、ボード上の USB デバイスを PC パラレル ポートのように動作させます。

ボード上のチップがバイナリカウンターであるとしましょう。カウンターをインクリメントしたい場合は、一連のバイトを USB ポートに書き込み、チップをカウントさせます。

カウンターが一定のレートでカウントするようにするには、既知のレートでそれらのバイトを送信します。

データはバイナリ データなので、ポートをバイナリ モードに設定します。いくつかの制御バイト (チャンクと呼びます) をバッファーに書き込み、ポートをフラッシュして、データが USB ポートに送信されるようにします (必要なときにカウントを実行します)。書き込み後、しばらく待ってから、チャンクを再度書き込みます。

これが完璧なタイミングではないことはわかっています。それは問題ではありません。今回は閉じる必要があります。

私の問題は、データがチャンク間で約 2 ミリ秒よりも速く転送されないことです。(チャンク内のデータの転送速度について話しているのではなく、チャンク間の最小時間について話しているのです。)別の言い方をすれば、任意の(実用的な) サイズは約 2mS です。

オースコープでデータの変化を観察することで2mSを測定しました。これは、コードに追加したタイマーとも一致します。

この間隔時間を短くする方法はありますか? それがWindowsから取得した実際の実行タイムスライスなのか、それともUSBへのバッファ転送のキュー処理間隔なのかはわかりません。OSの遅延の原因を突き止める方法はありますか?

この間隔を制御する方法はありますか。これを 2mS ではなく 500uS にすることは素晴らしいことです。

誰かが提案をしてくれることを願っています。

ありがとう

4

2 に答える 2

1

実際には、FTDI デバイスのポーリング間隔に達しています。私の経験に基づいて、デフォルトは 2 ミリ秒であると信じていますが、Google で簡単に検索しても決定的ではありませんでした。ドライバーのサポートされているポーリング間隔は、1、2、4、8、16、または 32 ミリ秒であることが言及されていることがわかりました。

これは FTDI ドライバー/USB 仕様の制限であり、Tcl や Windows の問題ではありません。ポーリング間隔を 1 ミリ秒まで下げるようにドライバーを構成できるかもしれませんが、それが最善の方法であると思います。

于 2013-12-05T00:06:25.037 に答える