x86 プラットフォームで Windows CE 6用の USB ドライバーを開発中です。
システムの初期化中に USB が接続されている場合、USB ドライバーの初期化で問題が発生します。
通常、システムの起動後に USB をプラグインすると、USB ドライバーはバルク エンドポイントの最大パケット サイズを 512 バイトとして読み取り、ドライバーは正常に初期化されます。デバッグ出力: (初期化が成功した場合)
+USBD:OpenPipe, EP: 0x81, MaxPkt: 512, Type: Bulk -USBD:OpenPipe success, hPipe = D19A9000 +USBD:OpenPipe, EP: 0x82, MaxPkt: 512, Type: Bulk -USBD:OpenPipe success, hPipe = D19A98C0 +USBD:OpenPipe, EP: 0x83, MaxPkt: 512, Type: Bulk -USBD:OpenPipe success, hPipe = D19A1480 +USBD:OpenPipe, EP: 0x84, MaxPkt: 64, Type: Interrupt -USBD:OpenPipe success, hPipe = D19A1F60 +USBD:OpenPipe, EP: 0x1, MaxPkt: 512, Type: Bulk -USBD:OpenPipe success, hPipe = D19A5680 +USBD:OpenPipe, EP: 0x2, MaxPkt: 512, Type: Bulk -USBD:OpenPipe success, hPipe = D19A5D20 +USBD:OpenPipe, EP: 0x3, MaxPkt: 512, Type: Bulk -USBD:OpenPipe success, hPipe = D19A6500 +USBD:OpenPipe, EP: 0x4, MaxPkt: 512, Type: Bulk -USBD:OpenPipe success, hPipe = D19A74E0 +USBD:OpenPipe, EP: 0x5, MaxPkt: 512, Type: Bulk -USBD:OpenPipe success, hPipe = D19A7940
しかし問題は、システムの初期化中に USB が接続され、USB ドライバーがバルク エンドポイントの最大パケット サイズを 64 バイトとして読み取り (使用可能なメモリが印刷されていないこともあります)、初期化に失敗することです。デバッグ出力: (失敗した初期化のケース)
+USBD:OpenPipe, EP: 0x81, MaxPkt: 64, Type: Bulk -USBD:OpenPipe success, hPipe = D051A200 +USBD:OpenPipe, EP: 0x82, MaxPkt: 64, Type: Bulk -USBD:OpenPipe success, hPipe = D051AB00 +USBD:OpenPipe, EP: 0x83, MaxPkt: 64, Type: Bulk -USBD:OpenPipe success, hPipe = D05120E0 +USBD:OpenPipe, EP: 0x84, MaxPkt: 64, Type: Interrupt -USBD:OpenPipe success, hPipe = D051B3C0 +USBD:OpenPipe, EP: 0x1, MaxPkt: 64, Type: Bulk -USBD:OpenPipe success, hPipe = D051BD80 +USBD:OpenPipe, EP: 0x2, MaxPkt: 64, Type: Bulk -USBD:OpenPipe success, hPipe = D051C1C0 +USBD:OpenPipe, EP: 0x3, MaxPkt: 64, Type: Bulk -USBD:OpenPipe success, hPipe = D051C600 +USBD:OpenPipe, EP: 0x4, MaxPkt: 64, Type: Bulk -USBD:OpenPipe success, hPipe = D051CA40 +USBD:OpenPipe, EP: 0x5, MaxPkt: 64, Type: Bulk -USBD:OpenPipe success, hPipe = D051CE80 CPhysMem AllocateMemory : No memory available CPipe(Bulk)::IssueTransfer - no memory for TD buffer
そして、すべての USB 転送が失敗していることがわかります。
CQueuedPipe(Bulk)::CheckForDoneTransfers - TD 0xd06759a0 での失敗、アドレス = 1、エンドポイント = 2、errorCounter = 0、ステータス フィールド = 0x22 CQueuedPipe(Control)::CheckForDoneTransfers - TD 0xd067f600 での失敗、アドレス = 1、エンドポイント = 0、 errorCounter = 0、ステータス フィールド = 0
システムの初期化中に一括エンドポイントの異なる長さを読み取るのはなぜですか?