これはばかげた質問かもしれませんが、
組み込み Linux を実行する ARM-CortexM4 プラットフォーム (STM32F4 シリーズ) で USB ストレージ デバイスをデバッグしていました。ARM は USB ホストとして動作しており、USB のフル スピード (12Mb/s) でサム ドライブと通信しようとします。
ここに問題があります。列挙が成功し、BULK 転送を介していくつかの SCSI コマンドが実行されると、容量とすべてを正しく読み取ることができます。しかし、約 15 秒後にこれらの SCSI コマンドを (同じ条件で) 再度送信しようとすると、USB ホスト コントローラーは「トランザクション エラー」を返します。ホスト コントローラがタイムアウトします。問題は、タイムアウト後にシステムを再列挙または再プローブする必要があるような USB 大容量ストレージ クラスまたは SCSI システムのタイムアウト メカニズムがあるかどうかです。
これは、私のプログラムのばかげたエラーが原因であるか、特定のハードウェアの制限が原因である可能性があることを理解しています。しかし、PC 上の Linux で usbmon モジュールを使用してまったく同じサム ドライブで転送をキャプチャすると、オペレーティング システムが実際にシーケンス プローブ コマンド (Read-max-Lun に続いて Test-unit-ready) を 5 ごとに送信することがわかります。これが、私の PC でサム ドライブが故障しない理由である可能性があります。
ありがとう!返信をお待ちしております。