1 Reply Latest reply on Feb 17, 2011 2:25 AM by shubham.trivedi

    Vend_ax based application not sending response on EP0

    joanne.dreitzler

      I have an application based on the Vend_ax sample.  I have one command that will not send a response back.  I load EP0, but it is never sent.

         

      If I comment out #1 and #2, then I get a response back, but I do not get my two bytes of data after the control "header".

         

      case VR_XSVF_COMMAND:
      #if  1  //jad ENABLE_FPGA_PROGRAMMING
         EP0BCH = 0;                                                                                              //<<<<<#1
         EP0BCL = 0; // Clear bytecount to allow new data in; also stops NAKing         //<<<<<#2

         

         while(EP0CS & bmEPBUSY);

         

         blockLen = EP0BCL;
         for(i=0; i<blockLen; i++)
         {
          fileStorage[i] = *(EP0BUF+i);
         }
      #if 0 //jad        
         if (xsvfFirstCommand == 1)
         {
          xsvfFirstCommand = 0;
          xsvfInitialize();
         }

         

         *EP0BUF = xsvfRun();
      #endif
      //jad*EP0BUF = 0xFF;
      #else
         *EP0BUF = 0xFF;
      #endif // ENABLE_FPGA_PROGRAMMING
         EP0BCH = 0;
         EP0BCL = 1;   // Arm endpoint with # bytes to transfer
         EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
         break;

         

       

         

      The PC code is  (cmd[] = 0x07 0x00) :

         

       

         

      if

             

       

         

      (myDev != null)

         

      {

         

       

         

       

         

       

             

       

         

      //jad implement sending to board

         

       

         

      {

      myDev.ControlEndPt.ReqType =

      myDev.ControlEndPt.Direction =

      myDev.ControlEndPt.ReqCode = (

      myDev.ControlEndPt.Value = (

      myDev.ControlEndPt.Index = (

       

       

       

       

          if    (myDev.ControlEndPt !=     null    )    CyConst    .REQ_VENDOR;    CyConst    .DIR_FROM_DEVICE;    byte    )    Commands    .VR_XSVF_COMMAND;    ushort    )cmd.Length;    ushort    )0;    int    len = cmd.Length;    if    (myDev.ControlEndPt.XferData(    ref    cmd,     ref    len))    return    (    XSVFErrorCodes    )cmd[0];    else   

       

      }

      }

       

          return        XSVFErrorCodes    .XSVF_USB_COMMAND_FAILED;    return        XSVFErrorCodes    .XSVF_NO_DEVICE;
        • 1. Re: Vend_ax based application not sending response on EP0
          shubham.trivedi

          Hi dreitz,

             

          This is expected as you are assigning the EP0BCL register at the begining of the vendor command ,

             

          EP0BCH = 0;                                                                                              //<<<<<#1
             EP0BCL = 0; // Clear bytecount to allow new data in; also stops NAKing         //<<<<<#2

             

           

             

          This will commit the EP0 buffer with 0 bytes and you would not receive any data.You should first initialize the buffer and then write to these registers as you are doing at the end in your code.

             

           

             

          -shub