<?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>LPC MicrocontrollersのトピックEndpoint problem with EP3_OUT when receiving data</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Endpoint-problem-with-EP3-OUT-when-receiving-data/m-p/540056#M11991</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by andre.schmiel@ashling.com on Thu Aug 13 03:55:00 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 currently can communicate via Endpoint 1, 2 and 4 but have a problem receiving data via the Endpoint 3 using the LPC1837 with its USB stack. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I do see the endpoint interrupt getting triggered on the USB_EVT_OUT_NAK event but never on the USB_EVT_OUT event.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Only when I manually insert a "USBD_API-&amp;gt;hw-&amp;gt;ReadReqEP(pUSB-&amp;gt;hUsb, EPC, ptyRxData-&amp;gt;pucDataBuf, 0x400);" instruction in the interrupt handler on the USB_EVT_OUT_NAK event, I will get the USB_EVT_OUT event.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried to manually enable and reset the endpoint but it didn't help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does someone know why the USB stack doesn't automatically send the read request? What does it depend on?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is my initialisation code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;int init_usb(uint32_t memBase, uint32_t memSize)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBD_API_INIT_PARAM_T usb_param;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CORE_DESCS_T desc;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ErrorCode_t ret = LPC_OK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CORE_CTRL_T *pCtrl;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* enable clocks and USB PHY/pads */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_USB0_Init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Init USB API structure */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;g_pUsbApi = (const USBD_API_T *) LPC_ROM_API-&amp;gt;usbdApiBase;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* initialize call back structures */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;memset((void *) &amp;amp;usb_param, 0, sizeof(USBD_API_INIT_PARAM_T));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.usb_reg_base&amp;nbsp;&amp;nbsp;&amp;nbsp; = LPC_USB_BASE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.max_num_ep&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = USB_MAX_EP_NUM;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.mem_base&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = memBase;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.mem_size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = memSize;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.USB_Reset_Event = ResetEvent;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Set the USB descriptors */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.device_desc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (uint8_t *) USB_DeviceDescriptor;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.string_desc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (uint8_t *) USB_StringDescriptor;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.high_speed_desc&amp;nbsp; = USB_HsConfigDescriptor;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.full_speed_desc&amp;nbsp; = USB_FsConfigDescriptor;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.device_qualifier = (uint8_t *) USB_DeviceQualifier;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* USB Initialization */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;hw-&amp;gt;Init(&amp;amp;g_lusb.hUsb, &amp;amp;desc, &amp;amp;usb_param);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*WORKAROUND for artf45032 ROM driver BUG:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Due to a race condition there is the chance that a second NAK event will&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; occur before the default endpoint0 handler has completed its preparation&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; of the DMA engine for the first NAK event. This can cause certain fields&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; in the DMA descriptors to be in an invalid state when the USB controller&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reads them, thereby causing a hang.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pCtrl = (USB_CORE_CTRL_T *) g_lusb.hUsb; // convert the handle to control structure&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;g_Ep0BaseHdlr = pCtrl-&amp;gt;ep_event_hdlr[0]; // retrieve the default EP0_OUT handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pCtrl-&amp;gt;ep_event_hdlr[0] = EP0_patch;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set our patch routine as EP0_OUT handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* register WCID handler */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterClassHandler(g_lusb.hUsb, WCID_hdlr, &amp;amp;g_lusb);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// register EPA interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterEpHandler(g_lusb.hUsb, 2, EPA_Hdlr, &amp;amp;g_lusb); //EPA = 0x01 =&amp;gt; (2 x 1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// register EPB interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterEpHandler(g_lusb.hUsb, 5, EPB_Hdlr, &amp;amp;g_lusb); //EPB = 0x02 =&amp;gt; (2 x 2) + 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// register EPC interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterEpHandler(g_lusb.hUsb, 6, EPC_Hdlr, &amp;amp;g_lusb); //EPC = 0x03 =&amp;gt; (2 x 3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// register EPD interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterEpHandler(g_lusb.hUsb, 9, EPD_Hdlr, &amp;amp;g_lusb); //EPD = 0x04 =&amp;gt; (2 x 4) + 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(LPC_USB_IRQ);/*&amp;nbsp; enable USB interrrupts */&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* now connect */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBD_API-&amp;gt;hw-&amp;gt;Connect(g_lusb.hUsb, 1);&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;SPAN&gt;}&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;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is my descriptor:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* USB HSConfiguration Descriptor */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&amp;nbsp;&amp;nbsp; All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ALIGNED(4) uint8_t USB_HsConfigDescriptor[] = {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Configuration 1 */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIGURATION_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIGURATION_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(/* wTotalLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIGURATION_DESC_SIZE +&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_INTERFACE_DESC_SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4 * USB_ENDPOINT_DESC_SIZE&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x01,/* bNumInterfaces */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x01,/* bConfigurationValue */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x05,/* iConfiguration */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIG_BUS_POWERED,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIG_POWER_MA(480),/* bMaxPower */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Interface 0, Alternate Setting 0, Custom Class */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_INTERFACE_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x00,/* bInterfaceNumber */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x00,/* bAlternateSetting */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x04,/* bNumEndpoints */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xFF,/* bInterfaceClass */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xFF,/* bInterfaceSubClass */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xFF,/* bInterfaceProtocol */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x04,/* iInterface */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* EPA Bulk Out Endpoint */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EPA,/* bEndpointAddress */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_TYPE_BULK,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(512),/* wMaxPacketSize */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xff,/* bInterval */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* EPB Bulk In Endpoint */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EPB,/* bEndpointAddress */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_TYPE_BULK,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(512),/* wMaxPacketSize */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xff,/* bInterval */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* EPC Bulk Out Endpoint */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EPC,/* bEndpointAddress */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_TYPE_BULK,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(512),/* wMaxPacketSize */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xff,/* bInterval */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* EPD Bulk In Endpoint */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EPD,/* bEndpointAddress */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_TYPE_BULK,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(512),/* wMaxPacketSize */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xff,/* bInterval */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Terminator */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is how the PC reads the descriptors:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----------------- Endpoint Descriptor -----------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bLength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x07 (7 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDescriptorType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x05 (Endpoint Descriptor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bEndpointAddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x01 (Direction=OUT&amp;nbsp; EndpointID=1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bmAttributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x02 (TransferType=Bulk)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;wMaxPacketSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x200 (max 512 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bInterval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xFF (at most 1 NAK each 255 microframes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----------------- Endpoint Descriptor -----------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bLength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x07 (7 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDescriptorType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x05 (Endpoint Descriptor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bEndpointAddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x82 (Direction=IN&amp;nbsp; EndpointID=2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bmAttributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x02 (TransferType=Bulk)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;wMaxPacketSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x200 (max 512 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bInterval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xFF (at most 1 NAK each 255 microframes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----------------- Endpoint Descriptor -----------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bLength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x07 (7 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDescriptorType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x05 (Endpoint Descriptor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bEndpointAddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x03 (Direction=OUT&amp;nbsp; EndpointID=3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bmAttributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x02 (TransferType=Bulk)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;wMaxPacketSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x200 (max 512 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bInterval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xFF (at most 1 NAK each 255 microframes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----------------- Endpoint Descriptor -----------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bLength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x07 (7 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDescriptorType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x05 (Endpoint Descriptor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bEndpointAddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x84 (Direction=IN&amp;nbsp; EndpointID=4)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bmAttributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x02 (TransferType=Bulk)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;wMaxPacketSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x200 (max 512 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bInterval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xFF (at most 1 NAK each 255 microframes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:25:04 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:25:04Z</dc:date>
    <item>
      <title>Endpoint problem with EP3_OUT when receiving data</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Endpoint-problem-with-EP3-OUT-when-receiving-data/m-p/540056#M11991</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by andre.schmiel@ashling.com on Thu Aug 13 03:55:00 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 currently can communicate via Endpoint 1, 2 and 4 but have a problem receiving data via the Endpoint 3 using the LPC1837 with its USB stack. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I do see the endpoint interrupt getting triggered on the USB_EVT_OUT_NAK event but never on the USB_EVT_OUT event.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Only when I manually insert a "USBD_API-&amp;gt;hw-&amp;gt;ReadReqEP(pUSB-&amp;gt;hUsb, EPC, ptyRxData-&amp;gt;pucDataBuf, 0x400);" instruction in the interrupt handler on the USB_EVT_OUT_NAK event, I will get the USB_EVT_OUT event.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried to manually enable and reset the endpoint but it didn't help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does someone know why the USB stack doesn't automatically send the read request? What does it depend on?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is my initialisation code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;int init_usb(uint32_t memBase, uint32_t memSize)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBD_API_INIT_PARAM_T usb_param;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CORE_DESCS_T desc;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ErrorCode_t ret = LPC_OK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CORE_CTRL_T *pCtrl;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* enable clocks and USB PHY/pads */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_USB0_Init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Init USB API structure */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;g_pUsbApi = (const USBD_API_T *) LPC_ROM_API-&amp;gt;usbdApiBase;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* initialize call back structures */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;memset((void *) &amp;amp;usb_param, 0, sizeof(USBD_API_INIT_PARAM_T));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.usb_reg_base&amp;nbsp;&amp;nbsp;&amp;nbsp; = LPC_USB_BASE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.max_num_ep&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = USB_MAX_EP_NUM;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.mem_base&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = memBase;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.mem_size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = memSize;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb_param.USB_Reset_Event = ResetEvent;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Set the USB descriptors */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.device_desc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (uint8_t *) USB_DeviceDescriptor;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.string_desc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (uint8_t *) USB_StringDescriptor;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.high_speed_desc&amp;nbsp; = USB_HsConfigDescriptor;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.full_speed_desc&amp;nbsp; = USB_FsConfigDescriptor;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;desc.device_qualifier = (uint8_t *) USB_DeviceQualifier;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* USB Initialization */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;hw-&amp;gt;Init(&amp;amp;g_lusb.hUsb, &amp;amp;desc, &amp;amp;usb_param);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*WORKAROUND for artf45032 ROM driver BUG:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Due to a race condition there is the chance that a second NAK event will&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; occur before the default endpoint0 handler has completed its preparation&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; of the DMA engine for the first NAK event. This can cause certain fields&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; in the DMA descriptors to be in an invalid state when the USB controller&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reads them, thereby causing a hang.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pCtrl = (USB_CORE_CTRL_T *) g_lusb.hUsb; // convert the handle to control structure&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;g_Ep0BaseHdlr = pCtrl-&amp;gt;ep_event_hdlr[0]; // retrieve the default EP0_OUT handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pCtrl-&amp;gt;ep_event_hdlr[0] = EP0_patch;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set our patch routine as EP0_OUT handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* register WCID handler */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterClassHandler(g_lusb.hUsb, WCID_hdlr, &amp;amp;g_lusb);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// register EPA interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterEpHandler(g_lusb.hUsb, 2, EPA_Hdlr, &amp;amp;g_lusb); //EPA = 0x01 =&amp;gt; (2 x 1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// register EPB interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterEpHandler(g_lusb.hUsb, 5, EPB_Hdlr, &amp;amp;g_lusb); //EPB = 0x02 =&amp;gt; (2 x 2) + 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// register EPC interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterEpHandler(g_lusb.hUsb, 6, EPC_Hdlr, &amp;amp;g_lusb); //EPC = 0x03 =&amp;gt; (2 x 3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// register EPD interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = USBD_API-&amp;gt;core-&amp;gt;RegisterEpHandler(g_lusb.hUsb, 9, EPD_Hdlr, &amp;amp;g_lusb); //EPD = 0x04 =&amp;gt; (2 x 4) + 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ret == LPC_OK)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(LPC_USB_IRQ);/*&amp;nbsp; enable USB interrrupts */&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* now connect */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USBD_API-&amp;gt;hw-&amp;gt;Connect(g_lusb.hUsb, 1);&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;SPAN&gt;}&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;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is my descriptor:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* USB HSConfiguration Descriptor */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&amp;nbsp;&amp;nbsp; All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ALIGNED(4) uint8_t USB_HsConfigDescriptor[] = {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Configuration 1 */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIGURATION_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIGURATION_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(/* wTotalLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIGURATION_DESC_SIZE +&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_INTERFACE_DESC_SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4 * USB_ENDPOINT_DESC_SIZE&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x01,/* bNumInterfaces */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x01,/* bConfigurationValue */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x05,/* iConfiguration */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIG_BUS_POWERED,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_CONFIG_POWER_MA(480),/* bMaxPower */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Interface 0, Alternate Setting 0, Custom Class */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_INTERFACE_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x00,/* bInterfaceNumber */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x00,/* bAlternateSetting */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x04,/* bNumEndpoints */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xFF,/* bInterfaceClass */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xFF,/* bInterfaceSubClass */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xFF,/* bInterfaceProtocol */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x04,/* iInterface */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* EPA Bulk Out Endpoint */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EPA,/* bEndpointAddress */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_TYPE_BULK,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(512),/* wMaxPacketSize */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xff,/* bInterval */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* EPB Bulk In Endpoint */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EPB,/* bEndpointAddress */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_TYPE_BULK,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(512),/* wMaxPacketSize */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xff,/* bInterval */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* EPC Bulk Out Endpoint */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EPC,/* bEndpointAddress */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_TYPE_BULK,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(512),/* wMaxPacketSize */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xff,/* bInterval */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* EPD Bulk In Endpoint */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESC_SIZE,/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_DESCRIPTOR_TYPE,/* bDescriptorType */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EPD,/* bEndpointAddress */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_ENDPOINT_TYPE_BULK,/* bmAttributes */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WBVAL(512),/* wMaxPacketSize */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0xff,/* bInterval */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Terminator */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0/* bLength */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is how the PC reads the descriptors:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----------------- Endpoint Descriptor -----------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bLength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x07 (7 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDescriptorType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x05 (Endpoint Descriptor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bEndpointAddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x01 (Direction=OUT&amp;nbsp; EndpointID=1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bmAttributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x02 (TransferType=Bulk)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;wMaxPacketSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x200 (max 512 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bInterval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xFF (at most 1 NAK each 255 microframes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----------------- Endpoint Descriptor -----------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bLength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x07 (7 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDescriptorType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x05 (Endpoint Descriptor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bEndpointAddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x82 (Direction=IN&amp;nbsp; EndpointID=2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bmAttributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x02 (TransferType=Bulk)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;wMaxPacketSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x200 (max 512 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bInterval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xFF (at most 1 NAK each 255 microframes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----------------- Endpoint Descriptor -----------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bLength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x07 (7 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDescriptorType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x05 (Endpoint Descriptor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bEndpointAddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x03 (Direction=OUT&amp;nbsp; EndpointID=3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bmAttributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x02 (TransferType=Bulk)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;wMaxPacketSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x200 (max 512 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bInterval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xFF (at most 1 NAK each 255 microframes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----------------- Endpoint Descriptor -----------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bLength&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x07 (7 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bDescriptorType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x05 (Endpoint Descriptor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bEndpointAddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x84 (Direction=IN&amp;nbsp; EndpointID=4)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bmAttributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x02 (TransferType=Bulk)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;wMaxPacketSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x200 (max 512 bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bInterval&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xFF (at most 1 NAK each 255 microframes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:25:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Endpoint-problem-with-EP3-OUT-when-receiving-data/m-p/540056#M11991</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:25:04Z</dc:date>
    </item>
  </channel>
</rss>

