<?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のトピックLPC43x0 Errata USBROM.1. workaround doesn't work. CDC Class returns STALL instead of ACK</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524579#M7215</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by hr on Wed Dec 04 03:18:20 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi there,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;i'm working currently with the LPC4330 and the NGX-Xplorer board. I'm also using the newest LPCOpen Version 2.02. I want to have a virtual serial port over usb and the example code in the&amp;nbsp; project&lt;/SPAN&gt;&lt;BR /&gt;&lt;I&gt; ngx_xplorer_4330_usbd_rom_cdc_vcom &lt;/I&gt;&lt;SPAN&gt; works fine besides the problem USBROM.1 described in the Errata sheet LPC4350/30/20/10. I have several NGX-boards and all of them have the rev. A Chips on it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem is that i have to get a program running which establishes a remote file system over uart. This software like some other terminal programs (for example putty) cannot connect to the VCOM port due to the bug in the ROM lib. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The workaround for the USBROM.2 problem is already included in the example. I now have a problem with the code provided in the Errata sheet for the USBROM.1 problem. I included the code provided in the sheet in the &lt;/SPAN&gt;&lt;I&gt;cdc_vcom.c&lt;/I&gt;&lt;SPAN&gt; file and it looks like this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
ErrorCode_t CDC_ep0_override_hdlr(USBD_HANDLE_T hUsb, void* data, uint32_t event) {
USB_CORE_CTRL_T* pCtrl = (USB_CORE_CTRL_T*) hUsb;
USB_CDC_CTRL_T* pCdcCtrl = (USB_CDC_CTRL_T*) data;
ErrorCode_t ret = ERR_USBD_UNHANDLED;

if(event == USB_EVT_OUT) {
if (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Type == REQUEST_CLASS) {
if (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Recipient == REQUEST_TO_INTERFACE) {
if ((pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;cif_num ) || /* IF number correct? */ (pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;dif_num)) {
pCtrl-&amp;gt;EP0Data.pData -= pCtrl-&amp;gt;SetupPacket.wLength;
ret = pCdcCtrl-&amp;gt;CIC_SetRequest(pCdcCtrl, &amp;amp;pCtrl-&amp;gt;SetupPacket,&amp;amp;pCtrl-&amp;gt;EP0Data.pData,pCtrl-&amp;gt;SetupPacket.wLength);
if ( ret == LPC_OK) {
USBD_API-&amp;gt;core-&amp;gt;StatusInStage(pCtrl); /* send Acknowledge */
}
}
else {
ret = g_defaultCdcHdlr(hUsb, data, event);
}
}
else {
ret = g_defaultCdcHdlr(hUsb, data, event);
}
}
else {
ret = g_defaultCdcHdlr(hUsb, data, event);
}
}
else {
ret = g_defaultCdcHdlr(hUsb, data, event);
}
return ret;
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I translated the &amp;amp;&amp;amp; conditions in the first if to several if statements to check what condition breaks the code. I also added the second part of the code to the cdc_vcom.c file into the vcom_init() function. The code looks like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
ret = USBD_API-&amp;gt;cdc-&amp;gt;init(hUsb, &amp;amp;cdc_param, &amp;amp;g_vCOM.hCdc);
{
// Code to fix the STALL Bug in the ROM lib when requesting line breaks
// This code must be placed immediately after the call to USBD_API-&amp;gt;cdc-&amp;gt;init()
USB_CORE_CTRL_T* pCtrl = (USB_CORE_CTRL_T*) hUsb;
/* store the default CDC handler and replace it with ours */
g_defaultCdcHdlr = pCtrl-&amp;gt;ep0_hdlr_cb[pCtrl-&amp;gt;num_ep0_hdlrs - 1];
pCtrl-&amp;gt;ep0_hdlr_cb[pCtrl-&amp;gt;num_ep0_hdlrs - 1] = CDC_ep0_override_hdlr;

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The workaround function &lt;/SPAN&gt;&lt;I&gt;CDC_ep0_override_hdlr&lt;/I&gt;&lt;SPAN&gt; is called during the establishment of a connection. So the second part of the code seems to be working. The code in the &lt;/SPAN&gt;&lt;I&gt;CDC_ep0_override_hdlr&lt;/I&gt;&lt;SPAN&gt; function has now a problem with the last conditional statement.&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
if ((pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;cif_num ) || /* IF number correct? */ (pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;dif_num))
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I debuged it to that point. This conditional statement is not true at the important point of the USB_EVT_OUT because of differing interface numbers cif_num and dif_num. The pCtrl structure provides the correct interface numbers as declared in the &lt;/SPAN&gt;&lt;I&gt;app_usbd_cfg.h&lt;/I&gt;&lt;SPAN&gt;. But the data (pCdcCtrl) structure shows strange numbers. In the case of the control interface it shows a 1 but it should be a zero and in case of the data interface it shows 129 but it should be a one.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I also used the USBlyzer to look at the usb traffic and the host sends the "SetLine_Coding" request to the correct interface number. 0000h. So i don't understand why in the workaround function the data structure which is passed to it has this strange interface numbers in it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does anyone has an idea what to check ? Or does anyone already included the workaround code from the Errate sheet ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you in advance for any help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 16:50:50 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T16:50:50Z</dc:date>
    <item>
      <title>LPC43x0 Errata USBROM.1. workaround doesn't work. CDC Class returns STALL instead of ACK</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524579#M7215</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by hr on Wed Dec 04 03:18:20 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi there,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;i'm working currently with the LPC4330 and the NGX-Xplorer board. I'm also using the newest LPCOpen Version 2.02. I want to have a virtual serial port over usb and the example code in the&amp;nbsp; project&lt;/SPAN&gt;&lt;BR /&gt;&lt;I&gt; ngx_xplorer_4330_usbd_rom_cdc_vcom &lt;/I&gt;&lt;SPAN&gt; works fine besides the problem USBROM.1 described in the Errata sheet LPC4350/30/20/10. I have several NGX-boards and all of them have the rev. A Chips on it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem is that i have to get a program running which establishes a remote file system over uart. This software like some other terminal programs (for example putty) cannot connect to the VCOM port due to the bug in the ROM lib. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The workaround for the USBROM.2 problem is already included in the example. I now have a problem with the code provided in the Errata sheet for the USBROM.1 problem. I included the code provided in the sheet in the &lt;/SPAN&gt;&lt;I&gt;cdc_vcom.c&lt;/I&gt;&lt;SPAN&gt; file and it looks like this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
ErrorCode_t CDC_ep0_override_hdlr(USBD_HANDLE_T hUsb, void* data, uint32_t event) {
USB_CORE_CTRL_T* pCtrl = (USB_CORE_CTRL_T*) hUsb;
USB_CDC_CTRL_T* pCdcCtrl = (USB_CDC_CTRL_T*) data;
ErrorCode_t ret = ERR_USBD_UNHANDLED;

if(event == USB_EVT_OUT) {
if (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Type == REQUEST_CLASS) {
if (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Recipient == REQUEST_TO_INTERFACE) {
if ((pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;cif_num ) || /* IF number correct? */ (pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;dif_num)) {
pCtrl-&amp;gt;EP0Data.pData -= pCtrl-&amp;gt;SetupPacket.wLength;
ret = pCdcCtrl-&amp;gt;CIC_SetRequest(pCdcCtrl, &amp;amp;pCtrl-&amp;gt;SetupPacket,&amp;amp;pCtrl-&amp;gt;EP0Data.pData,pCtrl-&amp;gt;SetupPacket.wLength);
if ( ret == LPC_OK) {
USBD_API-&amp;gt;core-&amp;gt;StatusInStage(pCtrl); /* send Acknowledge */
}
}
else {
ret = g_defaultCdcHdlr(hUsb, data, event);
}
}
else {
ret = g_defaultCdcHdlr(hUsb, data, event);
}
}
else {
ret = g_defaultCdcHdlr(hUsb, data, event);
}
}
else {
ret = g_defaultCdcHdlr(hUsb, data, event);
}
return ret;
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I translated the &amp;amp;&amp;amp; conditions in the first if to several if statements to check what condition breaks the code. I also added the second part of the code to the cdc_vcom.c file into the vcom_init() function. The code looks like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
ret = USBD_API-&amp;gt;cdc-&amp;gt;init(hUsb, &amp;amp;cdc_param, &amp;amp;g_vCOM.hCdc);
{
// Code to fix the STALL Bug in the ROM lib when requesting line breaks
// This code must be placed immediately after the call to USBD_API-&amp;gt;cdc-&amp;gt;init()
USB_CORE_CTRL_T* pCtrl = (USB_CORE_CTRL_T*) hUsb;
/* store the default CDC handler and replace it with ours */
g_defaultCdcHdlr = pCtrl-&amp;gt;ep0_hdlr_cb[pCtrl-&amp;gt;num_ep0_hdlrs - 1];
pCtrl-&amp;gt;ep0_hdlr_cb[pCtrl-&amp;gt;num_ep0_hdlrs - 1] = CDC_ep0_override_hdlr;

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The workaround function &lt;/SPAN&gt;&lt;I&gt;CDC_ep0_override_hdlr&lt;/I&gt;&lt;SPAN&gt; is called during the establishment of a connection. So the second part of the code seems to be working. The code in the &lt;/SPAN&gt;&lt;I&gt;CDC_ep0_override_hdlr&lt;/I&gt;&lt;SPAN&gt; function has now a problem with the last conditional statement.&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
if ((pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;cif_num ) || /* IF number correct? */ (pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;dif_num))
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I debuged it to that point. This conditional statement is not true at the important point of the USB_EVT_OUT because of differing interface numbers cif_num and dif_num. The pCtrl structure provides the correct interface numbers as declared in the &lt;/SPAN&gt;&lt;I&gt;app_usbd_cfg.h&lt;/I&gt;&lt;SPAN&gt;. But the data (pCdcCtrl) structure shows strange numbers. In the case of the control interface it shows a 1 but it should be a zero and in case of the data interface it shows 129 but it should be a one.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I also used the USBlyzer to look at the usb traffic and the host sends the "SetLine_Coding" request to the correct interface number. 0000h. So i don't understand why in the workaround function the data structure which is passed to it has this strange interface numbers in it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does anyone has an idea what to check ? Or does anyone already included the workaround code from the Errate sheet ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you in advance for any help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:50:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524579#M7215</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:50:50Z</dc:date>
    </item>
    <item>
      <title>Re: LPC43x0 Errata USBROM.1. workaround doesn't work. CDC Class returns STALL instead of ACK</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524580#M7216</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by durgesh on Wed Dec 04 14:47:15 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Current CDC headers distributed in LPCOpen have changed little bit which is effecting the offsets in USB_CDC_CTRL_T structure. Since this bug exists only in REV A silicon of LPC43xx and LPC18xx we need to be include workaround selectively.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Use following&amp;nbsp; USB_CDC0_CTRL_T structure instead of USB_CDC_CTRL_T for REV A parts only.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
typedef struct _CDC0_CTRL_T
{
&amp;nbsp; USB_CORE_CTRL_T*&amp;nbsp; pUsbCtrl;
&amp;nbsp; /* notification buffer */
&amp;nbsp; uint8_t notice_buf[12];
&amp;nbsp; CDC_LINE_CODING line_coding;

&amp;nbsp; uint8_t cif_num;&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; /* control interface number */
&amp;nbsp; uint8_t dif_num;&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; /* data interface number */
&amp;nbsp; uint8_t epin_num;&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; /* BULK IN endpoint number */
&amp;nbsp; uint8_t epout_num;&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; /* BULK OUT endpoint number */
&amp;nbsp; uint8_t epint_num;&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; /* Interrupt IN endpoint number */
&amp;nbsp; /* user defined functions */
&amp;nbsp; ErrorCode_t (*SendEncpsCmd) (USBD_HANDLE_T hCDC, uint8_t* buffer, uint16_t len);
&amp;nbsp; ErrorCode_t (*GetEncpsResp) (USBD_HANDLE_T hCDC, uint8_t** buffer, uint16_t* len);
&amp;nbsp; ErrorCode_t (*SetCommFeature) (USBD_HANDLE_T hCDC, uint16_t feature, uint8_t* buffer, uint16_t len);
&amp;nbsp; ErrorCode_t (*GetCommFeature) (USBD_HANDLE_T hCDC, uint16_t feature, uint8_t** pBuffer, uint16_t* len);
&amp;nbsp; ErrorCode_t (*ClrCommFeature) (USBD_HANDLE_T hCDC, uint16_t feature);
&amp;nbsp; ErrorCode_t (*SetCtrlLineState) (USBD_HANDLE_T hCDC, uint16_t state);
&amp;nbsp; ErrorCode_t (*SendBreak) (USBD_HANDLE_T hCDC, uint16_t state);
&amp;nbsp; ErrorCode_t (*SetLineCode) (USBD_HANDLE_T hCDC, CDC_LINE_CODING* line_coding);

&amp;nbsp; /* virtual functions */
&amp;nbsp; ErrorCode_t (*CIC_GetRequest)( USBD_HANDLE_T hHid, USB_SETUP_PACKET* pSetup, uint8_t** pBuffer, uint16_t* length); 
&amp;nbsp; ErrorCode_t (*CIC_SetRequest)( USBD_HANDLE_T hCdc, USB_SETUP_PACKET* pSetup, uint8_t** pBuffer, uint16_t length);

} USB_CDC0_CTRL_T;
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;so the workaround function &lt;/SPAN&gt;&lt;I&gt;CDC_ep0_override_hdlr&lt;/I&gt;&lt;SPAN&gt; should be &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
ErrorCode_t CDC_ep0_override_hdlr(USBD_HANDLE_T hUsb, void *data, uint32_t event)
{
USB_CORE_CTRL_T *pCtrl = (USB_CORE_CTRL_T *) hUsb;
USB_CDC0_CTRL_T *pCdcCtrl = (USB_CDC0_CTRL_T *) data;
ErrorCode_t ret = ERR_USBD_UNHANDLED;

if ( (event == USB_EVT_OUT) &amp;amp;&amp;amp;
 (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Type == REQUEST_CLASS) &amp;amp;&amp;amp;
 (pCtrl-&amp;gt;SetupPacket.bmRequestType.BM.Recipient == REQUEST_TO_INTERFACE) &amp;amp;&amp;amp;
 ((pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;cif_num)&amp;nbsp; ||/* IF number correct? */
&amp;nbsp; (pCtrl-&amp;gt;SetupPacket.wIndex.WB.L == pCdcCtrl-&amp;gt;dif_num)) ) {

pCtrl-&amp;gt;EP0Data.pData -= pCtrl-&amp;gt;SetupPacket.wLength;
ret = pCdcCtrl-&amp;gt;CIC_SetRequest(pCdcCtrl, &amp;amp;pCtrl-&amp;gt;SetupPacket, &amp;amp;pCtrl-&amp;gt;EP0Data.pData,
&amp;nbsp;&amp;nbsp; pCtrl-&amp;gt;SetupPacket.wLength);
if ( ret == LPC_OK) {

USBD_API-&amp;gt;core-&amp;gt;StatusInStage(pCtrl);/* send Acknowledge */
}

}
else {
ret = g_defaultCdcHdlr(hUsb, data, event);
}
return ret;
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:50:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524580#M7216</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:50:51Z</dc:date>
    </item>
    <item>
      <title>Re: LPC43x0 Errata USBROM.1. workaround doesn't work. CDC Class returns STALL instead of ACK</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524581#M7217</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by durgesh on Wed Dec 04 18:31:15 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Use the attached files which have some more checks so that the workaround doesn't effect latest silicon. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[list]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*] Replace cdc_vcom.c in lpcopen\applications\lpc18xx_43xx\examples\usbd_rom\usbd_rom_cdc_vcom directory&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*] Replace usbd_cdcuser.h in lpcopen\software\lpc_core\lpc_chip\usbd_rom directory.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[/list]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;An updated LPCopen will be released for LPC18xx/43xx next week which will include the fixes. &lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:50:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524581#M7217</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:50:52Z</dc:date>
    </item>
    <item>
      <title>Re: LPC43x0 Errata USBROM.1. workaround doesn't work. CDC Class returns STALL instead of ACK</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524582#M7218</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by hr on Tue Dec 17 04:15:34 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi durgesh,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thank you for your help. The code you provide works well for me in the example. i will now try to move it in my application. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Sorry for replying so late i wrote my post before a short holiday trip.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:50:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524582#M7218</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:50:52Z</dc:date>
    </item>
    <item>
      <title>Re: LPC43x0 Errata USBROM.1. workaround doesn't work. CDC Class returns STALL instead of ACK</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524583#M7219</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by liaochengyi on Sat Mar 22 05:40:57 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, durgesh&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is the workaround solution can apply on LPC11u37? or is LPC11u37 needs the solution?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;BR&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chengyi&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:50:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524583#M7219</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:50:53Z</dc:date>
    </item>
    <item>
      <title>Re: LPC43x0 Errata USBROM.1. workaround doesn't work. CDC Class returns STALL instead of ACK</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524584#M7220</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by liaochengyi on Sat Mar 22 06:04:06 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, durgesh&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is the workaround solution can apply on LPC11u37? or is LPC11u37 needs the solution?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;When I built it, I can't find the "CIC_SetRequest_t" type name?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it need more file?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;BR&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chengyi&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:50:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC43x0-Errata-USBROM-1-workaround-doesn-t-work-CDC-Class/m-p/524584#M7220</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:50:54Z</dc:date>
    </item>
  </channel>
</rss>

