PC 上の私のアプリケーションは、ファイル (2 MB) を 1 KB のチャンクで組み込みデバイスに送信します。
私は FTDI Windows ドライバーを使用しています。私のコードはクロスプラットフォームであるため、従来の FT_Write() API 関数を使用しています。
注:以下の問題は、1KB のチャンク サイズを使用した場合に発生します。小さいチャンク (私は 64 バイトを試しました) は問題なく動作します。
問題は、関数が数百パケットごとに「0 バイト送信」を返し、スタックすることです。TX と Rx の両方を消去し、続いて ResetDevice() を呼び出してチップを回復するという回避策を見つけました。それでも数百パケットごとに発生しましたが、少なくともファイル全体 (2 MB) を送信できます。
しかし、USB アイソレーター ( http://www.bb-elec.com/Products/USB-Connectivity/USB-Isolators/Compact-USB-Port-Guardian.aspx ) を使用すると、回避策に失敗しました。
私の回避策は優雅な解決策ではないと思います。
注: 以下の FTDI アプリケーション ノートで見つけた提案のため、大きなチャンクを使用します。
FTDI デバイスにデータを書き込む場合、できるだけ多くのデータをアプリケーションでバッファリングし、1 回の書き込み関数呼び出しでデバイスに書き込む必要があります(Win32 API を使用する VCP アプリケーションの場合は WriteFile、D2XX クラシック インターフェイスを使用する場合は FT_Write、またはD2XX FT_W32 インターフェイスを使用している場合は FT_WriteFile)。この結果、データは USB パケットあたり 64 バイトでデバイスに書き込まれます。
これらの問題の適切な修正は何ですか? FTDIの初期化に関連していますか? 私のドライバーのバージョンは 2.12.16.0 (2016 年 3 月 9 日) です。