PSoC®3、PSoC 4 Lシリーズ、およびPSoC 5LP USBデザインのトラブルシューティング –  KBA210620- Community Translated (JA)

Version 11

    Community Translated by NoTa_4591161NoTa_4591161         Version: *B

     

    Translation - English: Troubleshooting PSoC® 3, PSoC 4 L-Series, and PSoC 5LP USB Designs – KBA210620

     

    このガイドは、PSoC 3PSoC 4 Lシリーズ、およびPSoC 5LPファミリに基づくUSBデザインで発生する可能性のある一般的な問題におけるトラブルシューティング手順を提供します。PSoCファミリデバイスでUSBを初めて使用する場合は、AN57294 - USB 101: An Introduction to Universal Serial Bus 2.0 を参照してください。

     

    1. USB エニュメレーション問題

     

    症状:ボードをPCなどのUSBホストに接続した後、USBデバイスがデバイスマネージャーに表示されません。

     

    • USBサブセクションハードウェアが適切に設計されていない:ボードのUSBハードウェアポート接続を次のように確認してください。
      • 22抵抗がD+およびD-ラインに直列に接続されていることを確認してください。
      • D+D-の線が逆になっていないことを確認してください。
      • VDD3.3 V以上であることを確認してください。VDD電源がこの電圧より低い場合、USBブロックは動作できません。正確な電圧仕様については、デバイスのデータシートを参照してください。
      • USBFS_Start() APIを呼び出してUSBコンポーネントをファームウェアで起動すると、D+ラインがHIGHになります。フルスピードデバイスの場合、USBデバイスの内部プルアップは1.5kΩで、ホスト側のプルダウンは15kΩです。したがって、デバイスがUSBポートに接続されており、ファームウェアのUSBコンポーネントが起動しているときのD+ラインの電圧レベルは、VDDに近い必要があります。この動作が見られない場合は、ボード上のハードウェアの問題であることを示します。
      • PSoC4L設計の場合、0.1μFのコンデンサをVBUSラインとグランドの間に追加する必要があります。

                  

    テストには、PSoC Creatorで利用可能なサンプルコード USBFS_HIDを使用してください。HIDサンプルコードを使用してPSoCデバイスをプログラムし、マウスインターが動いているかどうかを確認します。HIDは特別なドライバーを必要としないため、プロジェクトは自動的に機能します。そうでない場合、問題はUSBポートの接続にあります。

     

    • ファームウェアで供給電圧が適切に設定されていないUSBFS_Start (uint8 デバイス、uint8 モード) API関数でパラメーターとして提供されている電圧を確認してください。ボードに5 V電源が供給されている場合、引数モードUSBFS_5V_OPERATIONとして割り当てる必要があります。この場合、内部レギュレータが有効になります。ボード電源が3 Vの場合、マクロUSBFS_3V_OPERATION使用する必要があります。供給電圧が不明な場合、この場合は内部レギュレータが有効になっているため、USBFS_5V_OPERATIONを使用することを推奨します。

     

    • ディスクリプタが適切に設定されていない:プロジェクトが機能している場合、ディスクリプタの設定に問題があることを示します。PSoC Creatorのコンポーネント構成ウィンドウでUSBデバイスが適切に設定されていることを確認してください。

     

    • グローバル割込みが有効になっていないUSBFSコンポーネントを開始する前にCYGlobalIntEnableマクロを使用してグローバル割込みが有効になっていることを確認してください。

     

    • Unplug- Replugイベントが処理されないボードにセルフ電源が入っている (USBポートから電源が供給されていない) 場合、ボードがホストのUSBポートに接続されているかどうかに関係なく、ファームウェアは常に実行されます。ファームウェアに取り外しおよび再接続のイベントを検出する方法がない場合、USBコンポーネントは再起動されないため、エニュメレーションは行われません。ボードにセルフ電源が入っているときは、USBポートのVBUSラインを監視してUSBのプラグの抜き差しを検出し、USBデバイスのエニュメレーションに注意する必要があります。USBバスのVBUSラインに外部接続されているデジタル入力ピンを使用して、VBUSラインを監視します。  コード1は、plug-unplugイベントの処理方法を示します。

       

    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 );

        }

    /* User Application Code */

    コード1接続/切断イベントを検出するための疑似コード

     

    2. ドライバーのバインドの問題

     

    症状:デバイスドライバーがインストールされていないというエラーメッセージが表示されます

     

    Ø  .infファイル内のPIDの不一致デバイスのPIDが、インストールされているドライバーのINFファイルで定義されているPIDと一致しない場合は、INFファイルを編集します。

     

    一般的なUSBデバイスの場合、使用するINFファイルは、Cypress Suite USBがインストールされている場合はcyusb.infで、EZ-USB FX3 SDKがインストールされている場合はcyusb3.infです。 インストールしたドライバースイートに基づいてINFファイルを見つけてください。これらの.infファイルには、VID 0x04B4およびPIDのリストがリストされています。これらのPIDCypress VID 0x4B4のいずれかを使用している場合、この.infファイルを示すことができます。.infファイルに存在しない別のPIDを使用している場合、この.infファイルを示すことはできません。この場合、.infファイルを変更する必要があります。

     

    . infファイルを開き、OSに対応する「Device」セクションに、既存のVIDおよびPIDの詳細と同様の新しいPIDを含む行を追加してください。同様に、「Strings」セクションに別の行を追加してください。セクションの既存の行と同様ですが、新しいVIDPIDを使用します。

     

    カスタムPIDcyusb.infファイルの編集例については、ドキュメントAN65209- Getting Started with FX2LPの「Appendix E: Adding Custom VID and PID to the .inf file」セクションを参照してください。

     

    重要次の点に注意してください。

    .infファイルを変更すると、ドライバーの署名が失われます。最終製品では、ドライバーに署名する必要があります。一部のオペレーティングシステムでは、署名されていないドライバーをインストールできません。起動時にドライバー署名の強制が無効になっている場合、この問題は発生しません。

     

    設計のトラブルシューティングを行うために、ドライバー署名の強制を無効にできます。Windows 7では、以下を実行してください。

    1. 起動中にF8を押してください。
    2. 表示されるオプションのリストから、「ドライバー署名の強制を無効にする」を選択してください。

     

     

    3. PSoCUSBUARTとして設定されている場合の問題

     

    症状 PSoCデバイスでUSBCDCデバイスとして設定しました。COMポートとしてエニュメレートされていません。

     

    Ø Ø USBUARTコンポーネントが使用されている場合、Generated Sourceフォルダーに別の.inf (USBUART_cdc.inf) ファイルが生成されます。 この.infは、Windowsシリアルドライバーを示します。 USBUARTデバイスを適切にエニュメレーションするには、デバイスマネージャーからこのファイルを指定する必要があります。

     

             o    デバイスマネージャーを開き、デバイスを右クリックして、Update Driver Softwareを選択してください。

    o    Browse my computer for driver software > Let me pick from a list of device drivers on my computer > Have Disk を選択してください。

    o    プロジェクトフォルダーに移動し、…/Generated_Source/<device>/USBUART_cdc.inf を選択してください。

    o    .infファイルを指定するためNext をクリックしてください。

     

     

    Ø  Ø 同じデバイスに複数のインターフェイスがある場合は、インターフェイスアソシエーションディスクリプタが必要です。アプリケーションノート 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);

     

    コード3INおよびOUT EP初期化の疑似コード

    これらの関数はデータ転送を開始しません。ここで、実際のIN転送のために、データポインターを 'NULL'としてUSBFS_LoadInEP() API関数を呼び出します。OUT転送では、API関数を呼び出す必要はありません。OUTデータは自動的にバッファに保存されます。さらにデータを受信するには、USBFS_EnableOutEP() API関数を呼び出してOUT EPを再度有効にする必要があります。

     

     

    USBFS_LoadInEP(IN_EP, NULL, 64);  // IN EP reading data

    USBFS_EnableOutEP(OUT_EP);    // Clearing OUT EP after reading  OUT data

     

    コード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パケットを示します。

     

    pastedImage_274.png

    1 Beagle USB480によってキャプチャされたUSB HIDデバイスのエニュメレーション

     

    アプリケーションノートAN57294: USB 101: An Introduction to Universal Serial Bus 2.0参照してください。エニュメレーション手順とUSBアナライザの詳細については、セクション12USB Enumeration and Configuration 、セクション13Debugging the Communication それぞれ参照してください。