<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic USB Control transfer Stall PID error with LPC4357 in LPCXpresso IDE</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-Control-transfer-Stall-PID-error-with-LPC4357/m-p/585316#M26689</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by srinivasR on Thu Nov 26 08:07:54 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to implement vendor specific control commands for my product.&amp;nbsp; I have a specific command to set/get from Device.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Mywindows host PC application is sending a control transfer ( libusbK ) and I could see the data in USBlzer, but transaction is NOT successful. Error is -" &lt;/SPAN&gt;&lt;STRONG&gt;Unsuccessful ( Stall PID&lt;/STRONG&gt;&lt;SPAN&gt;)"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// code snippet at windows&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.BmRequest.Dir&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = BMREQUEST_DIR_HOST_TO_DEVICE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.BmRequest.Type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = BMREQUEST_TYPE_VENDOR;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.BmRequest.Recipient =&amp;nbsp; BMREQUEST_RECIPIENT_DEVICE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.Request&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = BM_COMMAND_START_CAN;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.Length= 8;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;success = Usb.ControlTransfer(usbHandle, *((WINUSB_SETUP_PACKET*)&amp;amp;setupPacket), vendorBuffer, sizeof(vendorBuffer)-1, NULL, NULL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;At device side, VCOM USB API is used . and in the cdc_ep0_handler , it is not clear as how to handle the control request. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Breakpoint is hitting the if block of BM_COMMAND_START_CAN in the below method, but guess device is not responding proper ACK. Please advice..&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* CDC EP0_patch part of WORKAROUND for artf42016. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static ErrorCode_t CDC_ep0_override_hdlr(USBD_HANDLE_T hUsb, void *data, uint32_t event)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if ( (event == USB_EVT_OUT) &amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Type == REQUEST_CLASS) &amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Recipient == REQUEST_TO_INTERFACE) ) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if ((pCdcCtrl-&amp;gt;epin_num &amp;amp; 0x80) == 0) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;cif_num = pCdc0Ctrl-&amp;gt;cif_num;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dif_num = pCdc0Ctrl-&amp;gt;dif_num;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setReq = pCdc0Ctrl-&amp;gt;CIC_SetRequest;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;cif_num = pCdcCtrl-&amp;gt;cif_num;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dif_num = pCdcCtrl-&amp;gt;dif_num;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setReq = pCdcCtrl-&amp;gt;CIC_SetRequest;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* is the request target is our interfaces */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (((pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == cif_num)&amp;nbsp; ||&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == dif_num)) ) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;pCtrl-&amp;gt;EP0Data.pData -= pCtrl-&amp;gt;SetupPacket.wLength;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = setReq(pCdcCtrl, &amp;amp;pCtrl-&amp;gt;SetupPacket, &amp;amp;pCtrl-&amp;gt;EP0Data.pData,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; pCtrl-&amp;gt;SetupPacket.wLength);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if ( ret == LPC_OK) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* send Acknowledge */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBD_API-&amp;gt;core-&amp;gt;StatusInStage(pCtrl);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else if(event == USB_EVT_SETUP &amp;amp;&amp;amp; pCtrl-&amp;gt;SetupPacket.bRequest ==BM_COMMAND_START_CAN )&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDataSend=!bDataSend;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = LPC_OK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//USBD_API-&amp;gt;core-&amp;gt;StatusInStage(pCtrl);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = g_defaultCdcHdlr(hUsb, data, event);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 02:41:17 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T02:41:17Z</dc:date>
    <item>
      <title>USB Control transfer Stall PID error with LPC4357</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-Control-transfer-Stall-PID-error-with-LPC4357/m-p/585316#M26689</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by srinivasR on Thu Nov 26 08:07:54 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to implement vendor specific control commands for my product.&amp;nbsp; I have a specific command to set/get from Device.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Mywindows host PC application is sending a control transfer ( libusbK ) and I could see the data in USBlzer, but transaction is NOT successful. Error is -" &lt;/SPAN&gt;&lt;STRONG&gt;Unsuccessful ( Stall PID&lt;/STRONG&gt;&lt;SPAN&gt;)"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// code snippet at windows&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.BmRequest.Dir&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = BMREQUEST_DIR_HOST_TO_DEVICE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.BmRequest.Type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = BMREQUEST_TYPE_VENDOR;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.BmRequest.Recipient =&amp;nbsp; BMREQUEST_RECIPIENT_DEVICE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.Request&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = BM_COMMAND_START_CAN;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setupPacket.Length= 8;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;success = Usb.ControlTransfer(usbHandle, *((WINUSB_SETUP_PACKET*)&amp;amp;setupPacket), vendorBuffer, sizeof(vendorBuffer)-1, NULL, NULL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;At device side, VCOM USB API is used . and in the cdc_ep0_handler , it is not clear as how to handle the control request. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Breakpoint is hitting the if block of BM_COMMAND_START_CAN in the below method, but guess device is not responding proper ACK. Please advice..&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* CDC EP0_patch part of WORKAROUND for artf42016. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static ErrorCode_t CDC_ep0_override_hdlr(USBD_HANDLE_T hUsb, void *data, uint32_t event)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if ( (event == USB_EVT_OUT) &amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Type == REQUEST_CLASS) &amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Recipient == REQUEST_TO_INTERFACE) ) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if ((pCdcCtrl-&amp;gt;epin_num &amp;amp; 0x80) == 0) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;cif_num = pCdc0Ctrl-&amp;gt;cif_num;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dif_num = pCdc0Ctrl-&amp;gt;dif_num;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setReq = pCdc0Ctrl-&amp;gt;CIC_SetRequest;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;cif_num = pCdcCtrl-&amp;gt;cif_num;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dif_num = pCdcCtrl-&amp;gt;dif_num;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;setReq = pCdcCtrl-&amp;gt;CIC_SetRequest;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* is the request target is our interfaces */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (((pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == cif_num)&amp;nbsp; ||&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == dif_num)) ) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;pCtrl-&amp;gt;EP0Data.pData -= pCtrl-&amp;gt;SetupPacket.wLength;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = setReq(pCdcCtrl, &amp;amp;pCtrl-&amp;gt;SetupPacket, &amp;amp;pCtrl-&amp;gt;EP0Data.pData,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; pCtrl-&amp;gt;SetupPacket.wLength);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if ( ret == LPC_OK) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* send Acknowledge */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBD_API-&amp;gt;core-&amp;gt;StatusInStage(pCtrl);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else if(event == USB_EVT_SETUP &amp;amp;&amp;amp; pCtrl-&amp;gt;SetupPacket.bRequest ==BM_COMMAND_START_CAN )&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDataSend=!bDataSend;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = LPC_OK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//USBD_API-&amp;gt;core-&amp;gt;StatusInStage(pCtrl);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = g_defaultCdcHdlr(hUsb, data, event);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:41:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/USB-Control-transfer-Stall-PID-error-with-LPC4357/m-p/585316#M26689</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:41:17Z</dc:date>
    </item>
    <item>
      <title>Re: USB Control transfer Stall PID error with LPC4357</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-Control-transfer-Stall-PID-error-with-LPC4357/m-p/585317#M26690</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by srinivasR on Fri Nov 27 05:11:49 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Now I am able to read Control transfers from DEVICE TO HOST., but not yet successful with HOST - TO - DEVICE.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.....&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else if(event == USB_EVT_SETUP &amp;amp;&amp;amp; pCtrl-&amp;gt;SetupPacket.bRequest ==BM_COMMAND_STATUS_CONTROLLER )&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pCtrl-&amp;gt;EP0Data.Count=8; // send response to HOST of 8 bytes&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;memset(buff,'3',8);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pCtrl-&amp;gt;EP0Data.pData=(uint8_t *) buff;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBD_API-&amp;gt;core-&amp;gt;DataInStage(pCtrl); // initiate the data transfer stage&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = LPC_OK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else if(event == USB_EVT_SETUP &amp;amp;&amp;amp; pCtrl-&amp;gt;SetupPacket.bRequest ==BM_COMMAND_START_CAN )&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBD_API-&amp;gt;core-&amp;gt;DataOutStage(pCtrl); //??????????&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBD_API-&amp;gt;core-&amp;gt;StatusInStage(pCtrl);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am struggling with documentation of USBD API. Not understood as how to implement the Control commands from Host to device . DataOutStage is not giving any data sent from HOST as I expected from the documentation.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am not clear as how to read the data from host to device?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:41:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/USB-Control-transfer-Stall-PID-error-with-LPC4357/m-p/585317#M26690</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:41:18Z</dc:date>
    </item>
  </channel>
</rss>

