Original KBA:
Troubleshooting PSoC® 3, PSoC 4 L-Series, and PSoC 5LP USB Designs – KBA210620
Translated by Kenshow
==============================
タイトル:PSoC®3、PSoC 4Lシリーズ、およびPSoC 5LP USBデザインのトラブルシューティング – KBA210620
バージョン:*B
このガイドは、PSoC 3、PSoC 4 Lシリーズ、およびPSoC 5LPファミリに基づくUSBデザインで発生する可能性のある一般的な問題におけるトラブルシューティング手順を提供します。PSoCファミリデバイスでUSBを初めて使用する場合は、AN57294 - USB 101: An Introduction to Universal Serial Bus 2.0 から始めてください。
症状:ボードをPCなどのUSBホストに接続した後、USBデバイスがデバイスマネージャーに表示されません。
uint8 USB_Started_Flag ; for (;;) { if (VBUS_MONITOR_PIN_Read() == 0) { USBFS_Stop(); USB_Started_Flag = 0; } else if (USB_Started_Flag == 0 ) { USBFS_Start(device, USBFS_3V_OPERATION ); } /* ユーザーアプリケーションコード */ |
コード1:接続/切断イベントを検出するための疑似コード
2.ドライバーのバインドの問題
症状:デバイスドライバーがインストールされていないというエラーメッセージが表示されます
Ø .infファイル内のPIDの不一致:デバイスのPIDが、インストールされているドライバーのINFファイルで定義されているPIDと一致しない場合は、INFファイルを編集します。
一般的なUSBデバイスの場合、使用するINFファイルがあるcyusb.inf、インストールされている場合は、Cypress Suite USBをインストールしている場合はcyusb.infで、EZ-USB FX3 SDKがインストールされている場合はcyusb3.infになります。 インストールしたドライバースイートに基づいてINFファイルを見つけます。これらは .infファイルで、VID 0x04B4およびPIDのリストがあります。これらのPIDとCypress VID 0x4B4のいずれかを使用している場合、これを.infファイルで示すことができます。.infファイルに存在しない別のPIDを使用している場合、.infファイルでこれを指すことはできません。この場合、.infファイルを変更する必要があります。
. infファイルを開き、OSに対応する「Device」セクションに、既存するVIDおよびPIDの詳細と同様に新しいPIDを含む行を追加します。同じく、「Strings」セクションに別の行を追加します。セクションの既存の行と同様に新しいVIDとPIDを使用します。
カスタムPIDのcyusb.infファイルの編集例については、ドキュメントAN65209- Getting Started with FX2LPの「Appendix E: Adding Custom VID and PID to the .inf file」セクションを参照してください。
重要:次の点に注意してください。
.infファイルを変更すると、ドライバーの署名が失われます。 最終製品では、ドライバーに署名する必要があります。一部のオペレーティングシステムでは、署名されていないドライバーをインストールできません。起動時にドライバー署名の強制が無効になっている場合、この問題は発生しません。
設計のトラブルシューティングを行うために、ドライバー署名の強制を無効にすることができます。Windows 7では、以下を実行します。
3. PSoCがUSBUARTとして設定されている場合の問題
症状: PSoCデバイスでUSBをCDCデバイスとして設定しました。COMポートとしてエニュメレートされていません。
Ø USBUARTコンポーネントが使用されている場合、生成されたソースフォルダーに別の.inf(USBUART_cdc.inf)ファイルが生成されます。 この.infは、Windowsシリアルドライバーを指します。 USBUARTデバイスを適切にエニュメレーションするには、デバイスマネージャーからこのファイルを指定する必要があります。
o Open Device Manager and right-click on the device, and select Update Driver Software.
o Choose Browse my computer for driver software > Let me pick from a list of device drivers on my computer > Have Disk.
o Navigate to the project folder and select …/Generated_Source/<device>/USBUART_cdc.inf.
o Click Next to point to the .inf file.
Ø 同じデバイスに複数のインターフェイスがある場合は、インターフェイスアソシエーションディスクリプタが必要です。アプリケーションノート AN58726 - USB HID Intermediate with PSoC® 3 and PSoC 5LPの「Compound and Composite Devices」セクションを参照してください。KBA223141では、IADの追加についても説明しています。
4. エンドポイント構成でのファームウェアの問題
症状:デバイスは正しくエニュメレートしますが、IN / OUTデータ転送が期待どおりに行われません。
Ø エニュメレーション前のデータの転送:データ転送は、エニュメレーションプロセスの完了後にのみ実装する必要があります。ファームウェアは、USBFS_GetConfiguration() API関数がゼロ以外の値を返すまで待機する必要があります。次の擬似コードはこれを示しています。
USBFS_Start(USBFS_DEVICE, USBFS_5V_OPERATION); while (0u == USBFS_GetConfiguration()); |
コード2 :デバイスがエニュメレートされるまで待機するための擬似コード
Ø 自動メモリモードでのDMA:自動メモリ管理でDMAを使用している場合、最初にエンドポイント(EP)番号、バッファポインタ、および長さでINデータバッファとOUTデータバッファを登録する必要があります。ホストによって構成が設定された後、次のAPI関数を呼び出す必要があります。
USBFS_LoadInEP(IN_EP, &BufferIn[0],64); USBFS_ReadOutEP(OUT_EP, &BufferOut[0],64); |
コード3:INおよびOUT EP初期化の疑似コード
これらの関数はデータ転送を開始しません。ここで、実際のIN転送のために、データポインターを 'NULL'としてUSBFS_LoadInEP() API関数を呼び出します。OUT転送では、API関数を呼び出す必要はありません。OUTデータは自動的にバッファに保存されます。さらにデータを受信するには、USBFS_EnableOutEP() API関数を呼び出してOUT EPを再度有効にする必要があります。
USBFS_LoadInEP(IN_EP, NULL, 64); // EP読み取りデータ USBFS_EnableOutEP(OUT_EP); // OUTデータを読み取った後にOUT EPをクリアする |
コード4 :自動メモリ管理モードでのDMAでの関数の使用
詳細については、AN56377 - PSoC 3 and PSoC 5LP - Introduction to Implementing USB Data Transfersのプロジェクト「Project 3: Increasing USB Throughput with DMA」を参照してください。
Ø Windows 7のOSのホストから複数の要求を処理: Windows 7のOSは、同じ構成番号を持つ2つのSET_CONFIGURATIONリクエストを送信することができます。この場合、ユーザーレベルのコードは、各リクエスト後にOUTエンドポイントを再度有効にする必要があります。
USBFS_IsConfigurationChanged() API関数を呼び出して、PCからの構成変更を検出します。ゼロ以外の値を返す場合、USBFS_GetConfiguration() API関数が呼び出され、構成番号が取得されます。この使用モデルをコード5に示します。
if(USBFS_IsConfigurationChanged()!= 0) { if(USBFS_GetConfiguration()!= 0) { USBFS_EnableOutEP(OUT_EP); } } |
コード5:メインループの使用モデルの疑似コード
Ø 最大ペイロードサイズのデータパケットの処理:最大ペイロードサイズのデータパケットを送信すると、問題が発生する可能性があります。Windows OSでは、データ転送が完了したことを示す短いパケットが必要です。そうでない場合、転送全体が完了したとは見なされません。詳細については、KBA89052を参照してください。
Ø トグルエラー: USBハードウェアはデータトグルエラーをチェックせずにOUTパケットを受信します(受信パケットデータトグルビットは前のパケットと同じです)。ファームウェアはトグルビットエラーチェックを処理する必要があります。
5. USBアナライザー
USBアナライザーを使用したUSBパケットの分析は、問題が発生する正確な手順を特定するのに役立ちます。エニュメレーションまたは通常のデータ転送の問題の場合、USBパケットをチェックすると、問題の正確な場所がわかります。
USBプロトコルに違反があると、アナライザーはエラーをスローします。アナライザーは、USB転送タイプに基づいてデータパケットをグループ化します。図1に エニュメレーション中の典型的なUSBパケットを示します。
図1 :Beagle USB480によってキャプチャされたUSB HIDデバイスのエニュメレーション
アプリケーションノートAN57294: USB 101: An Introduction to Universal Serial Bus 2.0を参照してください。エニュメレーション手順とUSBアナライザの詳細については、セクション12:USB Enumeration and Configuration 、13:Debugging the Communication をそれぞれ参照してください。
==============================
30-Apr-2020